ROS2机器人系统开发工程 - 第2节
2. 开发环境筑基
第二章 开发环境筑基:Ubuntu系统安装与配置、ROS2 Humble安装、DDS中间件选型与配置、开发环境验证
说实话,很多初学者一上来就急着写代码,结果环境没搭好,后面全是坑。我见过太多人花三天调一个编译错误,最后发现是系统版本不对。这一章,咱们就把地基打牢。
本章核心脉络:从裸机到可运行的ROS2开发环境,一共四步走。
2.1 Ubuntu 22.04 LTS 安装与基础配置
ROS2 Humble 官方推荐的是 Ubuntu 22.04 LTS。别问能不能用 20.04 或者 24.04——能是能,但你会遇到各种依赖版本不匹配的问题。我去年帮一个团队排查问题,折腾了两天,最后发现他们用的是 Ubuntu 20.04 配 Humble,有些包根本装不上。
2.1.1 系统安装要点
- 磁盘分区:建议至少留 60GB 给 Ubuntu。如果你要做仿真或者跑 SLAM,100GB 起步。我习惯把
/home单独分区,这样重装系统时数据还在。 - 网络配置:安装时连上网,勾选「安装第三方驱动」——尤其是 NVIDIA 显卡和 Wi-Fi 网卡。
- 双系统用户:先装 Windows 再装 Ubuntu,不然引导会出问题。嗯,这个坑我踩过。
2.1.2 换源与系统更新
装完系统第一件事:换国内源。不然你 apt install 一个包,等它下载完黄花菜都凉了。
# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 替换为清华源(Ubuntu 22.04)
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
# 更新
sudo apt update && sudo apt upgrade -y
我的习惯:装完系统先装 curl、git、vim、net-tools 这几个基础工具。后面装 ROS2 时很多依赖会用到。
2.2 ROS2 Humble 安装
ROS2 的安装方式有好几种,我推荐用 apt 安装——最稳,也最好维护。源码编译?除非你要改底层代码,否则别折腾自己。
2.2.1 设置软件源
# 添加 ROS2 GPG key
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
# 添加源(同样用清华镜像)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
2.2.2 安装 ROS2 Humble
这里有个选择:装桌面版还是基础版?
| 版本 | 包含内容 | 磁盘占用 | 推荐场景 |
|---|---|---|---|
ros-humble-desktop | ROS2 + RViz2 + 仿真工具 + 示例 | ~2.5GB | 开发机、带图形界面的电脑 |
ros-humble-ros-base | 仅核心通信库 + 命令行工具 | ~800MB | 嵌入式板卡、服务器、无屏设备 |
# 我一般装桌面版,调试时方便看可视化
sudo apt install ros-humble-desktop -y
# 装完后别忘了安装编译工具
sudo apt install python3-colcon-common-extensions -y
注意:安装过程中如果报依赖错误,多半是源的问题。检查一下 /etc/apt/sources.list.d/ros2.list 里的地址是否正确。我曾经遇到过 GPG key 过期的情况,重新下载一次就好了。
2.2.3 配置环境变量
每次打开终端都要 source 一下,太麻烦。直接写进 .bashrc:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证一下:
ros2 --version
# 应该输出类似:ros2 humble
2.3 DDS 中间件选型与配置
ROS2 和 ROS1 最大的区别之一,就是底层通信换成了 DDS。说白了,DDS 就是负责「谁说话、谁听、怎么传」的中间人。ROS2 Humble 默认用的是 Fast DDS(eProsima 出品),但你也可以换成 Cyclone DDS 或者 RTI Connext。
2.3.1 三种主流 DDS 对比
| DDS 实现 | 开源 | 性能 | 跨平台 | 我的评价 |
|---|---|---|---|---|
| Fast DDS | 是(Apache 2.0) | 中等 | Linux/Windows/macOS | 默认选择,够用,社区活跃 |
| Cyclone DDS | 是(Eclipse Public License) | 高(低延迟) | Linux/Windows | 我最近在项目中换成了它,延迟低了 30% |
| RTI Connext | 否(商业) | 极高 | 全平台 | 工业级,但贵,个人开发者不推荐 |
2.3.2 如何切换 DDS
假设你想用 Cyclone DDS:
# 安装 Cyclone DDS
sudo apt install ros-humble-rmw-cyclonedds-cpp
# 设置环境变量
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# 永久生效
echo "export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp" >> ~/.bashrc
避坑指南:切换 DDS 后,记得重启终端或者重新 source。我曾经在同一个终端里来回切换,结果两个 DDS 的节点互相找不到——说白了就是环境变量没刷新。
2.3.3 DDS 网络配置
多机通信时,DDS 默认用组播。如果你的网络环境不支持组播(比如某些公司内网),需要改成单播:
# 创建 Fast DDS 配置文件 fastdds.xml
<?xml version="1.0" encoding="UTF-8" ?>
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
<transport_descriptors>
<transport_descriptor>
<transport_id>UDPTransport</transport_id>
<type>UDPv4</type>
<interfaceWhiteList>
<address>192.168.1.100</address> <!-- 改成你的 IP -->
</interfaceWhiteList>
</transport_descriptor>
</transport_descriptors>
</profiles>
# 启动时指定配置文件
export FASTRTPS_DEFAULT_PROFILES_FILE=/path/to/fastdds.xml
2.4 开发环境验证
环境搭没搭好,跑一个 talker-listener 就知道了。这是 ROS2 的「Hello World」。
2.4.1 运行测试
# 终端1:启动 talker
ros2 run demo_nodes_cpp talker
# 终端2:启动 listener
ros2 run demo_nodes_py listener
如果终端2能收到「Hello World: N」的消息,恭喜你,环境没问题。
2.4.2 常用验证命令
ros2 node list— 查看当前所有节点ros2 topic list— 查看所有话题ros2 topic echo /chatter— 监听某个话题的数据ros2 doctor— 一键检查环境健康度(这个命令很实用,我经常用它排查问题)
常见问题:如果 talker 和 listener 在不同机器上,互相找不到——先检查防火墙。DDS 默认用 7400-7500 端口,记得放行。我有个项目就是被公司防火墙坑了,两台工控机死活连不上。
2.4.3 验证 DDS 通信
想知道当前用的是哪个 DDS?跑个节点看看日志:
ros2 run demo_nodes_cpp talker --ros-args --log-level debug
# 日志里会显示:RMW implementation: rmw_fastrtps_cpp
或者直接查环境变量:
echo $RMW_IMPLEMENTATION
# 如果没设置,默认是 Fast DDS
总结一下:这一章我们干了四件事——装系统、装 ROS2、选 DDS、跑通测试。每一步都有坑,但只要你按顺序来,基本不会出大问题。我个人建议:装完系统先做个快照,装完 ROS2 再做一次快照。后面写代码时万一搞崩了,恢复起来就是几分钟的事。