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基础与环境搭建 · 知识体系 目标:搭建可运行的ROS2开发环境 ROS2 Humble安装 工作空间配置 Colcon构建系统 设置软件源 + 添加GPG密钥 安装 ros-humble-desktop 配置环境变量到 .bashrc 创建 src / build / install / log 理解目录结构(只关心src) source install/setup.bash 安装 colcon-common-extensions colcon build 常用参数 --symlink-install 开发模式 验证:ros2 --version + colcon build 提示:三个模块缺一不可,任何一个环节出错都会导致后续联调失败

这张图你看明白了吗?从上到下,先装ROS2,再配工作空间,最后学会用Colcon。每一步都踩实了,后面咱们做MoveIt和Nav2的联合仿真,才能跑得顺畅。

最后说一句:环境搭建这事儿,看着简单,但最容易出幺蛾子。我建议你装完之后,重启一下电脑,再打开终端跑一遍ros2 run demo_nodes_cpp talker,如果能听到"Hello World"在刷屏,那说明环境完全OK。如果报错,别慌,回头检查一下.bashrc里的source顺序,八成是这个问题。