2、ROS2基础与环境搭建:ROS2 Humble安装、工作空间配置、Colcon构建系统速览
好,咱们正式开始动手了。这一章说白了就是搭台子——把ROS2 Humble装好,把工作空间建起来,再搞明白Colcon是怎么把代码变成可执行文件的。别小看这一步,我见过太多人后面跑不起来,回头一查,全是环境没搞对。
2.1 为什么选ROS2 Humble?
ROS2的发行版不少,Foxy、Galactic、Humble、Iron……为什么我推荐Humble?
Humble是2022年5月发布的LTS版本,官方支持到2027年。你想想看,一个机器人项目从开发到落地,少说也得一两年。选LTS版本,意味着你不用中途被迫升级,踩一堆兼容性的坑。我在2023年初帮一个客户做AGV调度系统,他们一开始用了Galactic,结果2022年底Galactic EOL了,依赖的包全得换,折腾了整整两周。从那以后,我个人的习惯就是——非LTS不碰。
| 发行版 | 发布时间 | 支持周期 | 推荐场景 |
|---|---|---|---|
| Foxy Fitzroy | 2020-06 | 2023-05 (EOL) | 已过时,不推荐 |
| Galactic Geochelone | 2021-05 | 2022-11 (EOL) | 已过时,不推荐 |
| Humble Hawksbill | 2022-05 | 2027-05 (LTS) | 当前首选,稳定可靠 |
| Iron Irwini | 2023-05 | 2024-11 (非LTS) | 尝鲜可用,生产慎用 |
核心结论:咱们这门课全部基于ROS2 Humble。如果你用的是Ubuntu 22.04,那正好;如果是20.04,建议直接升级系统,别在旧版上硬凑。
2.2 安装ROS2 Humble
安装过程其实不复杂,但有几个细节容易翻车。我按步骤来,你跟着走就行。
2.2.1 设置软件源
先把ROS2的官方源加进去。Ubuntu默认的源里没有ROS2,得手动配。
# 1. 确保系统支持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. 添加ROS2 GPG密钥
sudo apt install curl gnupg lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
# 3. 添加软件源
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
注意:如果你在墙内,ros.key可能下载失败。我曾经在客户现场遇到过,网络策略限制了raw.githubusercontent.com。解决办法是用代理,或者从国内镜像站(比如清华TUNA)下载。别硬等,超时就换源。
2.2.2 安装ROS2 Humble桌面版
桌面版包含了Rviz2、Gazebo、各种可视化工具,咱们做仿真联调,这些一个都不能少。
sudo apt update
sudo apt upgrade
sudo apt install ros-humble-desktop
嗯,这里要注意——ros-humble-desktop这个包比较大,大概2-3GB,下载时间取决于你的网速。我建议你找个网络好的时间段,或者提前把包下好。别等到上课前十分钟才开始装,那会急死人的。
2.2.3 配置环境变量
装完之后,每次打开终端都要source一下ROS2的环境。我建议你直接写进.bashrc,省得每次手动敲。
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证一下是否装好了:
ros2 --version
如果看到类似ros2 humble的输出,恭喜你,第一步走通了。
小技巧:如果你同时装了ROS1和ROS2,建议在.bashrc里用别名区分,比如alias ros1='source /opt/ros/noetic/setup.bash',避免环境冲突。我吃过这个亏,两个版本混着source,编译时一堆莫名其妙的错误。
2.3 工作空间配置
工作空间(Workspace)是ROS2项目的组织方式。说白了,就是你把代码放在哪个文件夹里,怎么编译,怎么管理依赖。
2.3.1 创建工作空间
ROS2推荐使用colcon工作空间结构。咱们先建一个:
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
这个src目录就是放你所有功能包的地方。后面咱们写的MoveIt配置、Nav2配置,全都会放在这里。
2.3.2 工作空间结构速览
一个标准的colcon工作空间长这样:
ros2_ws/
├── src/ # 源代码目录
│ ├── package_1/
│ ├── package_2/
│ └── ...
├── build/ # 编译中间文件(自动生成)
├── install/ # 安装后的文件(自动生成)
└── log/ # 编译日志(自动生成)
你只需要关心src目录。其他三个是colcon自动生成的,不用手动创建,也别手贱去删——除非你想重新编译。
2.4 Colcon构建系统速览
ROS1时代用的是catkin_make,ROS2换成了colcon。为什么换?因为colcon更快、更干净、支持并行编译。我刚开始从ROS1切到ROS2时,还习惯性地敲catkin_make,结果报错说找不到命令。嗯,得改改肌肉记忆了。
2.4.1 安装Colcon
sudo apt install python3-colcon-common-extensions
2.4.2 常用Colcon命令
我列几个最常用的,你记一下,后面每节课都会用到。
| 命令 | 作用 | 说明 |
|---|---|---|
colcon build |
编译整个工作空间 | 最常用,默认编译所有包 |
colcon build --packages-select 包名 |
只编译指定包 | 改了一个包时,不用全量编译,省时间 |
colcon build --symlink-install |
使用符号链接安装 | 修改Python文件后不用重新编译,立刻生效 |
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release |
Release模式编译 | 性能优化,发布前用 |
我的习惯:开发阶段一直用colcon build --symlink-install。Python脚本改完就能跑,不用等编译,效率翻倍。等最后要部署了,再用Release模式编译一遍。
2.4.3 第一次编译测试
咱们的工作空间现在还是空的,但可以先跑一次编译,验证环境是否正常。
cd ~/ros2_ws
colcon build
如果一切正常,你会看到类似这样的输出:
Starting >>> (空,因为没有包)
Finished <<< (空,因为没有包)
Summary: 0 packages finished [0.2s]
没报错就行。接下来source一下install目录,让系统知道咱们的工作空间:
source install/setup.bash
同样,建议写进.bashrc:
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
避坑指南:我曾经遇到过一个问题——source了工作空间之后,ros2 run还是找不到包。查了半天,发现是install/setup.bash和/opt/ros/humble/setup.bash的source顺序反了。正确的顺序是:先source ROS2系统环境,再source工作空间。如果你把工作空间的source写在前面,系统环境会被覆盖,导致一些核心工具找不到。
2.5 本章知识体系总览
下面这张图把咱们这一章的核心逻辑串起来了。你可以把它当成一张地图,后面每学一个新东西,就往这张图上挂。
这张图你看明白了吗?从上到下,先装ROS2,再配工作空间,最后学会用Colcon。每一步都踩实了,后面咱们做MoveIt和Nav2的联合仿真,才能跑得顺畅。
最后说一句:环境搭建这事儿,看着简单,但最容易出幺蛾子。我建议你装完之后,重启一下电脑,再打开终端跑一遍ros2 run demo_nodes_cpp talker,如果能听到"Hello World"在刷屏,那说明环境完全OK。如果报错,别慌,回头检查一下.bashrc里的source顺序,八成是这个问题。