Wiki
Jazzy版本
约 9 分钟阅读
本教程面向 Ubuntu 24.04 和 ROS 2 Jazzy。通过完整实例、运行现象、执行顺序和源码阅读,学习硬件接口、控制器、物理仿真与设备通信。
1.学习路线
运行官方 RRBot
→ 自己创建双关节学习工程
→ GenericSystem 与自编模拟硬件
→ 接口、生命周期、控制周期与轨迹
→ Harmonic 机械臂与差速底盘
→ 自编控制器与管理器源码
→ Asio 虚拟串口与模拟下位机
→ 根据实际设备完成实物适配
工作区从创建目录、功能包和文件开始,随着实践逐步完善。前半部分不需要真实机器人;实物阶段按具体设备协议实现,不把模拟协议直接当作设备驱动。
2.环境与写法约定
普通用户使用 Ubuntu Bash 终端,系统安装使用 sudo,工作区构建和程序运行不提权。~ 是当前用户主目录。每个新终端 source 系统 Jazzy 和当前使用的一个工作区。
代码以 C++17 为基础,自编回调优先用 std::bind,官方源码保留原写法。每个例子讲清目标、文件位置、必要完整代码、编译运行、预期现象、关键函数及常见问题。
仿真统一采用 Gazebo Harmonic 与 gz_ros2_control。图形桌面中可运行 RViz 和 Gazebo 窗口,无界面方式可通过接口、Topic、时钟和世界位姿检查后台链路。
3.章节目录
- 环境准备与源码地图
- ros2_control整体工作过程
- 运行第一个RRBot实例
- 从零创建学习工作区
- URDF与控制接口
- YAML与spawner启动过程
- 从零编写模拟硬件插件
- 状态接口与命令接口源码
- 硬件与控制器生命周期
- read-update-write控制周期
- 状态广播与机器人显示
- 命令转发与控制模式
- Joint-Trajectory-Controller
- Harmonic机械臂物理仿真
- DiffBot与差速底盘控制
- Harmonic差速底盘仿真
- 多接口与硬件类型
- 从零编写控制器
- 管理器与资源管理源码
- 实时循环与异步通信
- 虚拟串口与模拟下位机
- 单执行器实物适配
- 完整机器人与进阶实例
- 综合工程与系统排错
4.三个目录分别做什么
| 路径 | 用途 |
|---|---|
| ~/ros2_control_jazzy_demos_ws | 固定提交的官方实例 |
| ~/ros2_control_jazzy_ws | 自己逐步编写的学习工程 |
| ~/ros2_control_jazzy_reference | 框架与控制器源码阅读 |
不要在同一终端叠加不相关的机器人工作区。同一 ROS domain 一次只运行一个本教程机器人,避免管理器和状态发布者相互干扰。
5.源码参考版本
| 仓库 | 标签或提交 |
|---|---|
| ros2_control | 4.48.1 / b7f1a5d420443c7a079f4c81e80d5e39759acf4c |
| ros2_controllers | 4.42.1 / aacd842600a09d556b983ac3d53a0983e9ebcbb1 |
| realtime_tools | 3.13.0 / 459776c99f1f80606f7b9616496166ccaf207cf8 |
| gz_ros2_control | 1.2.20 / 89ca76ed20842377f879c711c756d444c5b7c20b |
| ros2_control_demos | 34933be69fc76c33b5889f4d8993eb0f3a92e20f |
这些版本用于对应具体源码与配置。Jazzy 的子包会随维护更新;类型或参数不符时,先核对实际包版本、头文件和共享库路径,再检查代码。主线硬件插件采用框架自动创建接口及 HardwareComponentInterfaceParams 的写法。
6.各阶段验收
| 阶段 | 应观察到什么 |
|---|---|
| 环境与官方实例 | 包可找到,模型与控制器可启动 |
| 自建模拟硬件 | 接口创建正常,反馈向目标收敛 |
| 生命周期与切换 | 状态明确,命令资源按预期借用与释放 |
| 轨迹 Action | 目标接受,按容差完成或给出可解释结果 |
| 自编控制器 | 合法目标生效,非法目标被拒绝 |
| Harmonic 机械臂 | 模型生成、时钟前进、关节反馈变化 |
| Harmonic 底盘 | 轮子与车体运动,里程计与世界位姿可对照 |
| 虚拟串口 | 命令、反馈与超时链路可观察 |
| 实物适配 | 身份、单位、方向、模式、故障与停止逐项确认 |
RViz 是显示工具,教学模型不是物理动力学,反馈里程计不是世界真值。示例输出说明现象,实际数值会受参数、执行时长和调度影响。设备专用实现需要实际硬件独立验收。