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 知识体系总览

下面这张图总结了本章的核心逻辑。你可以把它当作一个检查清单,看看自己有没有遗漏什么。

开发环境搭建流程 Ubuntu 22.04 LTS ROS2 Humble CycloneDDS 工作空间 (ros2_ws) 验证:talker / listener 基础系统 核心框架 通信中间件 项目组织 功能验证

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节点。记住,环境搭得越稳,后面写代码越顺。