第二章 开发环境筑基:Ubuntu系统安装与配置、ROS2 Humble安装、DDS中间件选型与配置、开发环境验证

说实话,很多初学者一上来就急着写代码,结果环境没搭好,后面全是坑。我见过太多人花三天调一个编译错误,最后发现是系统版本不对。这一章,咱们就把地基打牢。

本章核心脉络:从裸机到可运行的ROS2开发环境,一共四步走。

① 系统安装 Ubuntu 22.04 LTS 磁盘分区 / 驱动 / 源 ② ROS2安装 Humble Hawksbill apt源 / 依赖 / 测试 ③ DDS配置 Fast DDS / Cyclone DDS 选型 / 调优 / 防火墙 ④ 验证 talker-listener 环境检查 ⚠️ 顺序不能乱:系统 → ROS2 → DDS → 验证 每个环节都有坑,咱们一个一个踩过去 💡 我个人习惯:装完系统先做快照,后面翻车了能秒回

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-desktopROS2 + 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 再做一次快照。后面写代码时万一搞崩了,恢复起来就是几分钟的事。