2、ROS2开发环境搭建:Ubuntu系统安装、ROS2 Humble安装、colcon构建工具、工作空间创建、第一个ROS2节点
说实话,很多初学者在ROS2上栽跟头,不是代码写不对,而是环境没搭好。我见过太多人花了一整天装系统,结果卡在依赖冲突上,最后心态崩了。
这一章,咱们就把地基打牢。我会把每个步骤拆开揉碎,告诉你哪些坑可以绕过去。
2.1 为什么选Ubuntu 22.04 + ROS2 Humble?
ROS2的版本和Ubuntu是绑定的。Humble Hawksbill( humble 意为谦逊)是2022年的LTS版本,支持到2027年。我个人习惯用LTS版本,稳定,社区支持好,遇到问题搜一搜基本都有答案。
| ROS2 版本 | 对应 Ubuntu | 支持周期 | 推荐场景 |
|---|---|---|---|
| Humble | 22.04 LTS | 至 2027年 | 教学、工业、长期项目 |
| Iron Irwini | 22.04 / 24.04 | 至 2025年 | 尝鲜、新特性验证 |
| Rolling | 滚动更新 | 持续滚动 | 开发版,不推荐新手 |
核心结论: 咱们这门课全程使用 Ubuntu 22.04 + ROS2 Humble。如果你用虚拟机,记得给至少4GB内存和40GB硬盘。
2.2 Ubuntu 22.04 安装要点
安装过程我就不逐页截图了,网上教程一大堆。我只说几个关键点——这些是我踩过的坑。
- 语言选英文。 中文路径在终端里经常出幺蛾子,尤其是后面编译源码时,空格和中文目录会让colcon直接报错。
- 分区建议。 / 分区给30GB以上,/home 给剩余空间。如果你打算后面玩仿真或SLAM,建议总硬盘不低于80GB。
- 安装时联网。 勾选“安装第三方驱动”和“更新”,省得后面手动装显卡驱动。
⚠ 我曾经犯过的错: 装系统时选了中文,结果后面在.bashrc里写路径时,中文字符导致source命令死活不生效。折腾了两小时才发现是编码问题。所以,老老实实用英文系统。
2.3 安装ROS2 Humble
ROS2的安装方式有两种:apt安装(二进制包) 和 源码编译。咱们用apt,省时省力。
打开终端,逐条执行以下命令:
# 1. 设置编码
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源
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 $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 3. 安装ROS2 Humble桌面版(包含GUI工具)
sudo apt update
sudo apt install ros-humble-desktop
# 4. 安装开发工具(编译、测试等)
sudo apt install ros-dev-tools
💡 小提示: 安装过程可能持续10-20分钟,取决于网速。如果中途断网,重新执行 sudo apt install ros-humble-desktop 即可,它会继续下载未完成的部分。
安装完成后,验证一下:
# 打开一个新终端,先source环境
source /opt/ros/humble/setup.bash
# 运行一个C++ talker节点
ros2 run demo_nodes_cpp talker
如果看到类似 [INFO] [xxx] [talker]: Publishing: 'Hello World: 1' 的输出,说明安装成功。
🔑 关键操作: 每次打开新终端都要 source /opt/ros/humble/setup.bash。嫌麻烦?往下看,我教你一劳永逸的方法。
2.4 配置环境变量(一劳永逸)
把source命令加到 .bashrc 里,这样每次打开终端自动加载ROS2环境。
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证一下:
# 打印ROS2环境变量
printenv | grep ROS
你应该能看到 ROS_DISTRO=humble 之类的输出。嗯,到这里,ROS2环境就常住你的终端了。
2.5 colcon:ROS2的构建工具
在ROS1时代,我们用catkin_make。ROS2时代,官方推荐 colcon。说白了,colcon就是catkin的升级版,支持并行编译、混合语言包、更好的错误提示。
安装colcon(如果前面装了ros-dev-tools,这一步可以跳过):
sudo apt install python3-colcon-common-extensions
colcon的核心命令就几个,我列个表:
| 命令 | 作用 | 常用参数 |
|---|---|---|
colcon build |
编译工作空间所有包 | --packages-select 只编译指定包 |
colcon test |
运行测试 | --packages-select |
colcon list |
列出工作空间中的包 | 无 |
colcon clean |
清理编译产物 | --packages-select |
💡 我的习惯: 每次编译前先 colcon clean 一下,避免旧文件干扰。虽然会多花几秒,但能避免很多莫名其妙的编译错误。
2.6 创建工作空间
工作空间(workspace)就是你存放ROS2项目的根目录。我习惯叫它 ros2_ws。
# 创建目录结构
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
# 编译空工作空间(验证colcon是否正常)
colcon build
编译完成后,你会看到三个新目录:
- build:编译中间文件,不用管。
- install:编译产物,相当于ROS1的devel。
- log:日志文件,出错时来这里查。
别忘了source工作空间的环境:
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
⚠ 注意顺序: .bashrc 里先source ROS2系统环境,再source工作空间环境。如果顺序反了,系统会优先使用工作空间里的包,可能导致版本冲突。
2.7 第一个ROS2节点:Hello World
理论讲完了,咱们写个真正的节点。用Python,简单直观。
先创建功能包:
cd ~/ros2_ws/src
ros2 pkg create my_first_pkg --build-type ament_python --dependencies rclpy
这个命令会生成一个Python包,依赖 rclpy(ROS2的Python客户端库)。
编辑节点文件:
# 进入包目录
cd ~/ros2_ws/src/my_first_pkg/my_first_pkg
# 创建节点文件
touch hello_node.py
用你喜欢的编辑器打开 hello_node.py,写入以下代码:
import rclpy
from rclpy.node import Node
class HelloNode(Node):
def __init__(self):
super().__init__('hello_node')
self.get_logger().info('Hello, ROS2! 我的第一个节点启动啦!')
def main(args=None):
rclpy.init(args=args)
node = HelloNode()
rclpy.spin(node) # 保持节点运行
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
然后修改 setup.py,把入口点加进去:
# 在 setup.py 中找到 entry_points,修改为:
entry_points={
'console_scripts': [
'hello_node = my_first_pkg.hello_node:main',
],
},
编译并运行:
cd ~/ros2_ws
colcon build --packages-select my_first_pkg
source install/setup.bash
ros2 run my_first_pkg hello_node
你应该看到:
[INFO] [xxx] [hello_node]: Hello, ROS2! 我的第一个节点启动啦!
🎉 恭喜! 你写完了第一个ROS2节点。虽然它只是打印了一行日志,但背后的流程——创建包、写节点、编译、运行——是后面所有复杂项目的基础。
2.8 本章知识体系总览
下面这张图,把本章的核心逻辑串起来了。你可以把它当作一个检查清单:
这张图从左到右、从上到下,就是咱们搭建环境的完整路径。你跟着走一遍,后面写代码就不会再被环境问题卡住了。
💡 最后说一句: 环境搭建是最枯燥的部分,但也是最重要的。我当年第一次搭ROS1环境,折腾了整整两天。现在有了colcon和apt,已经简单太多了。别急,慢慢来,后面的话题通信才是真正有意思的部分。