ROS2 安装与环境搭建
二、安装与环境搭建
ROS2 与 Ubuntu 版本强绑定,选错组合会遇到大量依赖问题。常见的对应关系是:Ubuntu 22.04 配 Humble,Ubuntu 24.04 配 Jazzy,更早的 Foxy 已经结束支持。具体对应表以 ROS 官方文档为准,不要凭记忆选发行版。
安装步骤
- 准备一台 Ubuntu 机器(物理机或虚拟机均可,虚拟机建议开启硬件加速的三维支持,否则仿真和可视化会非常卡)。
- 启用 universe 仓库并安装基础工具。
- 添加 ROS2 的 apt 源与密钥。
- 安装发行版:桌面版包含可视化与仿真演示,适合开发机;基础版体积小,适合部署到机器人上。
- 安装构建与依赖工具
colcon、rosdep。 - 把
source写进 shell 配置文件,避免每个终端都要手动执行。
sudo apt install software-properties-common curl
sudo add-apt-repository universe
sudo apt update && sudo apt install -y 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] \
http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" \
| sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt install -y ros-humble-desktop
sudo apt install -y python3-colcon-common-extensions python3-rosdep
sudo rosdep init
rosdep update
source /opt/ros/humble/setup.bash
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
上面把发行版写成 Humble,换发行版时把 humble 整体替换即可(源里同样要改)。
工作空间与构建
mkdir -p ~/ws/src
cd ~/ws
colcon build --symlink-install
source install/setup.bash
ros2 pkg list | head
--symlink-install 对 Python 包尤其有用:改源码不用重新构建,只改符号链接指向的文件即可生效。
多机通信与环境变量
| 环境变量 | 作用 | 说明 |
|---|---|---|
| ROS_DOMAIN_ID | 隔离域 | 同一个域才能互相发现;多台机器人同网段时用它隔离 |
| RMW_IMPLEMENTATION | 选择 DDS 实现 | 例如 rmw_cyclonedds_cpp、rmw_fastrtps_cpp;两端不一致也能通,但排查问题时要统一 |
| ROS_LOCALHOST_ONLY | 限制为仅本机通信 | 调试时避免干扰同网段的其它机器 |
| CYCLONEDDS_URI | DDS 详细配置 | 指定网卡、限制组播等 |
常见报错排查
| 报错 / 现象 | 原因 | 处理 |
|---|---|---|
| ros2: command not found | 没有 source 环境 | 执行 source /opt/ros/$ROS_DISTRO/setup.bash |
| Package 'xxx' not found | 构建后没有 source install/setup.bash | 每次构建后重新 source,注意顺序:先底层再上层 |
| 两台机器互相看不到话题 | 域 ID 不同、防火墙拦截、交换机禁组播、连的不是同一网段 | 统一 ROS_DOMAIN_ID,临时关闭防火墙,把两台机器接到同一交换机 |
| 话题存在但收不到数据 | QoS 不兼容(例如发布端 best_effort、订阅端 reliable) | 用 ros2 topic info -v 看两端 QoS,订阅时显式指定兼容的 QoS |
| TF 查询超时 | 变换链断裂、时间戳不匹配 | 用 ros2 run tf2_tools view_frames 导出变换树检查 |
| 仿真里时间不动 | 忘了设 use_sim_time | 所有相关节点统一设为 true,并确认 /clock 有发布 |

