Wiki
环境准备与源码地图
本套教程只使用 ROS 2 Humble。先准备能重复运行的环境,再开始读源码;学习工作区由你自己创建。
1.本节目标
先分清三件事:Ubuntu 22.04 提供操作系统环境;工作区保存你编写的包;源码阅读目录保存框架实现。安装软件包,不等于获得它完整的 .cpp 源码。
以下操作默认使用普通用户和 Bash 终端。软件安装与系统配置需要 sudo,创建工作区、构建和运行 ROS 程序不需要提权。
2.示例 1:准备 ROS 2 Humble 并检查版本
先查看系统版本和字符编码:
lsb_release -ds
locale
系统应为 Ubuntu 22.04,语言环境应支持 UTF-8。如果尚未安装 ROS 2 Humble,先按 ROS 2 Humble 的 Ubuntu 安装说明 配置语言环境和 ROS 2 软件源。完成软件源配置及该说明中的系统更新步骤后,安装桌面版:
sudo apt-get update
sudo apt-get install -y ros-humble-desktop
已经安装 Humble 的用户可以直接检查环境:
source /opt/ros/humble/setup.bash
printenv ROS_DISTRO
ros2 --help
ROS_DISTRO 应输出 humble。如果 setup.bash 不存在,先完成 Humble 安装;如果版本不符,打开新终端并检查是否自动加载了其它 ROS 发行版。
3.示例 2:安装基础开发与控制依赖
sudo apt-get update
sudo apt-get install -y build-essential cmake \
ros-humble-ros2-control ros-humble-ros2-controllers \
ros-humble-xacro ros-humble-robot-state-publisher \
ros-humble-rviz2 ros-humble-joint-state-publisher-gui \
python3-colcon-common-extensions python3-rosdep git ripgrep
安装后检查编译工具和框架包的位置:
g++ --version
cmake --version
ros2 pkg prefix controller_manager
编译器需要支持 C++17,不要求固定的补丁版本。最后一条应返回包的安装前缀;如果仍找不到包,先确认安装成功,并在当前终端重新 source Humble。
Fortress 依赖放在机械臂物理仿真,串口依赖放在虚拟串口与模拟下位机,按学习进度安装。
4.示例 3:由你创建官方实例工作区
本套教程使用两个工作区:~/ros2_control_demos_ws 运行官方实例;~/ros2_control_humble_ws 从从零创建学习工作区开始保存你亲手编写的包。它们都是你学习时执行命令创建的。
mkdir -p ~/ros2_control_demos_ws/src
cd ~/ros2_control_demos_ws/src
git clone --branch humble https://github.com/ros-controls/ros2_control_demos.git
cd ros2_control_demos
git checkout c273b1316cce043c252c593dc6a232ea57174690
cd ~/ros2_control_demos_ws
rosdep update --rosdistro humble
rosdep install --from-paths src --ignore-src -r -y --rosdistro humble
source /opt/ros/humble/setup.bash
colcon build --symlink-install --packages-up-to \
ros2_control_demo_example_1 ros2_control_demo_example_2 \
ros2_control_demo_example_3 ros2_control_demo_example_9 \
--cmake-args -DBUILD_TESTING=OFF
source install/setup.bash
如果提示 rosdep 尚未初始化,先执行一次 sudo rosdep init,再执行 rosdep update。不要重复初始化已经存在的配置。
这里用 --packages-up-to,会包含工作区内的依赖包。当前 demos 中有 ros2_control_demo_test_utils,只选择 example_1 而遗漏依赖会导致构建失败;即使关闭测试,也应让 colcon 正确解析依赖。
5.示例 4:下载供阅读的框架源码
阅读目录与 src 分开,避免 colcon 无意间编译整套框架并覆盖发行包。
mkdir -p ~/ros2_control_humble_reference
cd ~/ros2_control_humble_reference
git clone --depth 1 --branch 2.54.3 https://github.com/ros-controls/ros2_control.git
git clone --depth 1 --branch 2.54.1 https://github.com/ros-controls/ros2_controllers.git
git clone --depth 1 --branch 2.15.1 https://github.com/ros-controls/realtime_tools.git
git clone --depth 1 --branch 4.9.0 https://github.com/ros-controls/control_msgs.git
git clone --depth 1 --branch 0.7.21 https://github.com/ros-controls/gz_ros2_control.git
| 仓库 | 本教程采用版本 | 首先阅读的位置 |
|---|---|---|
| ros2_control | 2.54.3 | controller_manager、hardware_interface、controller_interface |
| ros2_controllers | 2.54.1 | forward_command_controller、joint_trajectory_controller、diff_drive_controller |
| realtime_tools | 2.15.1 | realtime_buffer.hpp |
| control_msgs | 4.9.0 | control_msgs/action/FollowJointTrajectory.action |
| gz_ros2_control | 0.7.21 | gz_ros2_control/src、gz_ros2_control_demos |
这些标签用于对应教程中的源码讲解。Humble 安装包可能具有不同的补丁版本;如果 API 或参数不同,先检查安装版本,再对照匹配的标签。
dpkg-query -W ros-humble-ros2-control ros-humble-ros2-controllers \
ros-humble-realtime-tools ros-humble-control-msgs
ros2 pkg prefix hardware_interface
6.新终端的统一约定
每个终端都要 source。运行官方例子时 source demos 工作区;运行自编工程时 source learning 工作区。不要在 .bashrc 中同时叠加不相关的机器人工作区。一个 ROS domain 中一次只运行一个本教程机器人,避免多个 /controller_manager 和 /joint_states 相互干扰。
本教程不要求设置特定的 ROS_DOMAIN_ID。相关终端应使用一致的 domain 配置;若需要隔离多台机器人或多组实验,再为各组选择不同的 domain,并在同组终端中保持一致。
7.本节总结
source 决定当前终端能找到哪一套包;colcon build 产生安装空间;pluginlib 从安装空间查找插件。下载了源码却没有构建、安装和 source,系统不会自动使用它。