Wiki
完整机器人与进阶实例
Existing English translations were reused. 23 current source blocks remain in Simplified Chinese, without triggering paid translation.
单执行器跑通以后,才扩展为完整机器人。框架接口可以复用,设备层仍要按实际结构设计。
1.示例 1:从一个执行器扩展为双关节
先把固定数组改成与 HardwareInfo 一致的预分配存储,再验证每个关节的名称、方向、范围和设备地址。完成所有反馈校验后,再统一发布整组快照。
逻辑 joint1 → 设备地址 A → 参数、方向、零点 A
逻辑 joint2 → 设备地址 B → 参数、方向、零点 B
映射必须显式存在,不能依赖串口先收到谁就把谁视为第一个关节。多设备反馈不同时到达时,快照还应记录每个设备的时效和有效性。
1.1.什么情况下使用一个 System
如果下位机一次收发整台机器人的关节数据,一个 System 通常更符合通信边界。如果每个执行器独立通信、独立启停,则需要结合 Actuator 的生命周期和故障隔离方式设计。
2.示例 2:从单轮扩展为差速底盘
沿用差速底盘物理仿真的控制器配置语义:左、右轮 velocity 命令,position/velocity 反馈,单位为输出轮轴 rad 和 rad/s。
先分别验证两个轮子的正方向,再验证同号命令对应前进;随后标定轮半径和有效轮距。真实底盘中,结构误差和打滑可能让理想模型参数不足以得到准确里程计。
open_loop: false 表示使用反馈计算里程计,但编码器里程计仍可能漂移。后续定位融合属于另一个学习阶段,不在本教程中假装已经完成。
3.官方进阶实例阅读地图
| 实例 | 阅读目标 | 应先具备什么 |
|---|---|---|
| example_4 / 5 | 集成与外部传感器 | 状态接口、Sensor 生命周期 |
| example_6 / 14 | 独立执行器与附加传感器 | 组件边界与数据对应关系 |
| example_7 | 六自由度工程组织 | 轨迹控制与多关节配置 |
| example_8 | transmission | 电机侧与关节侧变量及传动换算 |
| example_10 | GPIO | 自定义接口语义、广播与控制 |
| example_11 | 车辆转向 | 车辆运动学和转向控制器 |
| example_12 | 控制器串联 | reference 接口与链式生命周期 |
| example_13 | 一个管理器中的多机器人 | 名称前缀、硬件生命周期 |
| example_15 | 多个管理器 | namespace、服务路径和资源隔离 |
这些源码随 demos 仓库一同下载,环境准备章节只选择构建了基础实例。学习表中的进阶实例时,需要按需安装依赖、构建对应包,并逐项检查运行结果。
4.示例 3:只构建当前学习的进阶实例
以传动实例为例,在 source 系统 Humble 的新终端中执行:
cd ~/ros2_control_demos_ws
rosdep install --from-paths src \
--ignore-src -r -y --rosdistro humble
colcon build --symlink-install --packages-up-to ros2_control_demo_example_8 \
--cmake-args -DBUILD_TESTING=OFF
source install/setup.bash
接下来先查看包中实际安装的 launch 文件,再选择文件名:
ls $(ros2 pkg prefix ros2_control_demo_example_8)/share/ros2_control_demo_example_8/launch
# 选择上面实际存在的启动文件后,再使用 ros2 launch 包名 文件名 --show-args。
不要把某个其它发行版的命令直接搬过来。先阅读当前固定提交中该实例的 doc/userdoc.rst,确认依赖与使用方法。
5.多机器人最常见的命名问题
Topic namespace、关节名称前缀、TF frame 名称、硬件组件名称是不同维度。把节点放到 namespace 下面,不会自动给 URDF 中所有关节与 frame 改名。
6.对应底层源码
阅读 ros2_control_demos/example_8、ros2_control_demos/example_12、ros2_control_demos/example_15。把每个例子与已有工程比较,记录“新增了哪一种接口或管理边界”,再决定是否引入自己的项目。
返回 Humble 总览 · 上一篇:单执行器实物接入 · 下一篇:综合工程与系统排错