第2章:ROS2基础与环境搭建

各位同学,欢迎来到第二章。上一章我们聊了整体架构,这一章咱们得先把家伙事儿备齐了。

ROS2 Humble,这是咱们整个系统的地基。我见过太多人一上来就急着写代码,结果环境没配好,折腾半天全白费。别急,咱们一步步来。

2.1 为什么选ROS2 Humble?

ROS2版本不少,Foxy、Galactic、Humble、Iron...为什么我推荐Humble?

说白了,Humble是目前最稳的长期支持版(LTS),2024年5月才发布,支持到2029年。你想想看,咱们这个课程涉及MoveIt和Nav2,这两个大项目对ROS2版本的依赖很敏感。我去年帮一个客户调试抓取系统,他用的是Rolling版本,结果MoveIt2的某个API突然变了,折腾了两天才找到原因。

所以,听我的,用Humble,省心。

系统要求: Ubuntu 22.04 LTS + ROS2 Humble。别问能不能用Windows,问就是不能。

2.2 安装ROS2 Humble

安装过程其实不复杂,但有几个坑我得提前告诉你。

2.2.1 设置语言环境

先确保你的Ubuntu 22.04语言环境是UTF-8。我习惯这样检查:

locale  # 看看有没有zh_CN.UTF-8或en_US.UTF-8
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

嗯,这里要注意,如果你用的是中文系统,后面编译时有些日志会乱码。我个人建议用英文环境,省得后面排查问题还要猜日文。

2.2.2 添加ROS2源

sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update

我曾经遇到过一个问题:curl下载ros.key时网络超时。如果你也遇到,试试挂个代理,或者直接手动下载放到对应目录。

2.2.3 安装桌面版(推荐)

sudo apt install ros-humble-desktop

这个包包含了Rviz2、Gazebo、各种常用工具。大概2-3GB,喝杯咖啡等一会儿。

小技巧: 如果你硬盘空间紧张,可以只装ros-humble-ros-base,但后面做可视化调试会缺工具。我建议一步到位。

2.2.4 配置环境变量

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

验证一下:

ros2 --version

如果看到类似 ros2 humble 的版本信息,恭喜你,装好了。

注意: 如果你同时装了ROS1,记得在.bashrc里只source一个版本,否则会冲突。我见过有人两个都source,结果ros2命令调成了ros1的,查了半天。

2.3 工作空间创建与Colcon编译

环境装好了,接下来咱们得建个工地——工作空间。

2.3.1 创建工作空间

mkdir -p ~/robot_ws/src
cd ~/robot_ws

这个 robot_ws 就是咱们整个项目的大本营。src目录放源码,build和install目录由编译工具自动生成。

2.3.2 安装Colcon

ROS2的编译工具是Colcon,取代了ROS1的Catkin。说实话,Colcon比Catkin快多了,尤其是增量编译时。

sudo apt install python3-colcon-common-extensions

2.3.3 第一个测试包

咱们先建一个最简单的包,验证整个流程:

cd ~/robot_ws/src
ros2 pkg create test_pkg --build-type ament_cmake
cd ~/robot_ws
colcon build

编译完成后,你会看到build、install、log三个目录。记得source一下:

source install/setup.bash
核心概念: 每次打开新终端,或者修改了代码重新编译后,都要source一下install/setup.bash。我习惯在.bashrc里加一行source ~/robot_ws/install/setup.bash,省得每次手动敲。

2.4 话题与服务基础

ROS2的核心通信机制就两个:话题(Topic)和服务(Service)。

你可以把话题想象成「广播电台」——发布者一直发,订阅者想听就听,双方不需要认识。服务则是「打电话」——你打过去,对方接,你问一句他答一句,一次性的。

2.4.1 话题实战

咱们用命令行感受一下:

# 终端1:启动一个发布者,每秒发一次"hello"
ros2 topic pub /chatter std_msgs/msg/String "data: 'Hello from robot'" --rate 1

# 终端2:订阅这个话题
ros2 topic echo /chatter

你会看到终端2不断收到消息。这就是话题通信。

我在项目中常用 ros2 topic list 查看所有话题,用 ros2 topic info /chatter 看发布者和订阅者数量。调试时特别好用。

2.4.2 服务实战

服务是一问一答的模式。ROS2内置了一个例子:

# 终端1:启动服务端
ros2 run examples_rclcpp_minimal_service service_main

# 终端2:调用服务
ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts "{a: 5, b: 3}"

你会收到返回结果 sum: 8。

经验之谈: 在MoveIt里,规划路径用的是「动作(Action)」——它是话题和服务的结合体。但底层通信还是基于话题和服务。所以,把这两个搞明白,后面学Action就轻松了。

2.5 本章知识体系

下面这张图总结了咱们这一章的核心内容:

ROS2基础与环境搭建 - 知识体系 环境搭建 Ubuntu 22.04 ROS2 Humble 桌面版 环境变量配置 编译工具 工作空间创建 Colcon编译 ament_cmake包 通信机制 话题(Topic) 服务(Service) 动作(Action) 实战验证 ros2 topic pub / ros2 service call 环境是地基 → 工具是脚手架 → 通信是钢筋 三者缺一不可,构成整个ROS2开发体系 下一章:我们将用这些基础搭建第一个机器人模型

2.6 常见问题与避坑

问题 原因 解决方法
colcon build报错找不到包 依赖没装全 rosdep install --from-paths src --ignore-src -r -y
ros2 topic echo没反应 话题名拼写错误 用ros2 topic list确认准确名称
source后还是找不到命令 bashrc没生效 手动执行source ~/.bashrc或重启终端
编译速度慢 没开并行编译 colcon build --parallel-workers 4
我曾经踩过的坑: 有一次我忘了source工作空间,直接运行自己写的节点,结果一直报「找不到可执行文件」。我以为是代码写错了,查了半小时,最后发现就是没source。从那以后,我每次编译完第一件事就是 source install/setup.bash。

2.7 本章小结

这一章咱们干了三件事:

  • 装好了ROS2 Humble,配好了环境
  • 建了工作空间,学会了Colcon编译
  • 动手试了话题和服务,感受了ROS2的通信方式

这些东西看着基础,但后面所有章节都建立在它们之上。尤其是话题和服务,你后面写MoveIt的规划请求、Nav2的导航指令,本质上都是在操作这些通信机制。

嗯,环境搭好了,下一章咱们开始让机器人动起来。