2. 开发环境搭建:Ubuntu 22.04 + ROS2 Humble安装,DDS中间件配置,工作空间创建
说实话,很多初学者把大量时间花在调代码上,结果发现环境没搭对,白白浪费好几天。我当年刚接触ROS2时也踩过这个坑——装了个Ubuntu 20.04配ROS2 Foxy,后来发现好多新包不支持,又得重装。所以这一章,咱们一步到位,把地基打牢。
核心要点:Ubuntu 22.04 + ROS2 Humble 是目前最稳定的组合之一。DDS中间件选CycloneDDS,性能好,配置简单。
2.1 为什么选这个组合?
你可能会问:Ubuntu 22.04 和 ROS2 Humble 到底好在哪?
其实很简单。ROS2 Humble 是长期支持版本(LTS),支持到2027年。Ubuntu 22.04 也是LTS。两个LTS配在一起,省心。我在项目里用过Galactic和Foxy,但Humble的包管理最成熟,第三方库支持也最全。
| 组件 | 版本 | 说明 |
|---|---|---|
| 操作系统 | Ubuntu 22.04 LTS | 稳定,社区活跃 |
| ROS2 | Humble Hawksbill | 2022年发布,支持到2027年 |
| DDS中间件 | CycloneDDS | 轻量,实时性好 |
2.2 安装Ubuntu 22.04
如果你已经有Ubuntu 22.04,直接跳过这步。没有的话,我建议用双系统或者虚拟机。我个人习惯用VMware Workstation,分配4核CPU、8GB内存、60GB硬盘,跑ROS2完全够用。
小技巧:安装时选「最小安装」,省掉LibreOffice那些用不上的软件。装完第一件事:sudo apt update && sudo apt upgrade -y。
2.3 安装ROS2 Humble
嗯,这里要注意。ROS2的安装方式有两种:apt包管理器和源码编译。我建议用apt,省时省力。源码编译适合需要定制化的人,但咱们做运动控制,没必要折腾。
打开终端,一行一行来:
# 设置locale
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
# 添加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
# 安装ROS2 Humble桌面版
sudo apt update
sudo apt install ros-humble-desktop -y
# 安装开发工具
sudo apt install ros-dev-tools -y
装完之后,记得配置环境变量。我习惯把它加到 ~/.bashrc 里:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
注意:如果你同时装了ROS1和ROS2,千万别把两个setup.bash都source了,会冲突。我曾经因为这个查了一下午bug,最后发现是环境变量打架。
2.4 DDS中间件配置
ROS2默认用Fast DDS,但我个人更推荐CycloneDDS。为什么?因为它在嵌入式设备上表现更好,延迟更低。做机器人运动控制时,实时性就是命根子。
安装CycloneDDS很简单:
sudo apt install ros-humble-rmw-cyclonedds-cpp -y
然后设置环境变量,让ROS2使用它:
echo "export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp" >> ~/.bashrc
source ~/.bashrc
验证一下是否生效:
printenv | grep RMW
如果输出 RMW_IMPLEMENTATION=rmw_cyclonedds_cpp,就说明配置成功了。
避坑指南:我曾经在树莓派上遇到过DDS节点发现不了的问题。后来发现是防火墙没关。如果你也遇到类似情况,试试 sudo ufw disable。
2.5 工作空间创建
工作空间(workspace)是ROS2项目的根目录。我习惯用 ~/ros2_ws 这个名字。创建步骤:
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
第一次build会生成 build、install、log 三个文件夹。别慌,这是正常的。以后每次修改代码后,在 ~/ros2_ws 目录下重新 colcon build 就行。
为了方便,我建议把工作空间的setup脚本也加到bashrc里:
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
2.6 验证安装
装完了,怎么知道对不对?跑个小例子试试:
打开第一个终端,启动一个发布者节点:
ros2 run demo_nodes_cpp talker
打开第二个终端,启动一个订阅者节点:
ros2 run demo_nodes_py listener
如果看到 I heard: [Hello World] 这样的输出,恭喜你,环境搭好了。
重要:如果没看到输出,先检查DDS配置。用 ros2 doctor 命令诊断一下,它会告诉你哪里有问题。
2.7 知识体系总览
下面这张图总结了本章的核心逻辑。你可以把它当作一个检查清单,看看自己有没有遗漏什么。
2.8 常见问题
- colcon build 报错:检查Python版本,ROS2 Humble需要Python 3.10以上。
- 找不到包:确认
source /opt/ros/humble/setup.bash已经执行。 - DDS节点发现慢:试试设置
export CYCLONEDDS_URI=file:///path/to/config.xml,配置域ID。
重要提醒:如果你用的是虚拟机,网络模式要选「桥接」而不是「NAT」。NAT模式下DDS节点可能互相发现不了。我因为这个折腾过一整天,最后发现是网络模式的问题。
好了,环境搭好了,下一章咱们就开始写第一个ROS2节点。记住,环境搭得越稳,后面写代码越顺。