跳到正文
XiaoGao 的个人博客

NO.15 · 机器人

ROS 2 Humble 学习记录:现代机器人开发工具链

ROS 2 Humble 学习笔记,覆盖节点与功能包、话题、服务、参数、Launch、TF、rqt/RViz2/ros2 bag 工具链,以及 URDF 建模与 Gazebo 仿真的入门路径。

发布 DATE
字数 WORDS
1,106
阅读 READ
3 分钟

ROS 2 是机器人开发的新一代基础设施,解决了 ROS 1 在实时性、安全性和多机通信上的诸多局限。这份 165 页的学习记录从节点与功能包讲起,覆盖完整通信机制与工具链,最后延伸到 URDF 建模与 Gazebo 仿真。

学习路线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ROS 2 基础
├── 机器人、ROS 2 本质、ROS 1 与 ROS 2 对比
├── 系统架构、发行版、通信机制和调试工具
└── Linux、VS Code、Git、Python、C++ 和环境变量
↓
节点与功能包
├── Python 节点和 C++ 节点
├── rclpy、rclcpp、日志和节点生命周期
├── ament_python、ament_cmake 和 colcon 工作空间
└── 面向对象、多线程和回调函数
↓
ROS 2 通信
├── Topic 发布与订阅
├── Service 客户端与服务端
├── 自定义消息、服务接口和参数
└── Launch 多节点启动与配置
↓
机器人工具链
├── TF 静态与动态坐标变换
├── rqt、RViz2 和 ros2 bag
├── URDF、Xacro 和机器人模型可视化
└── Gazebo 仿真基础

核心概念

概念 作用 学习方向
Node 执行具体任务的运行单元 Python/C++ 节点、日志、节点查询
Topic 面向持续数据流的异步通信 速度、位姿、系统状态、文本数据
Service 面向请求和响应的一次性通信 海龟生成、人脸检测、巡逻控制
Action 可反馈、可取消的长时间任务 通信体系的扩展方向
Parameter 节点运行时可配置的数据 声明、读取、更新和 YAML 加载
Interface 描述通信数据结构 .msg、.srv 和接口生成
Launch 组织多个节点和运行参数 *.launch.py 多节点启动
TF 管理机器人中的坐标系关系 静态 TF、动态 TF、TF 查询

内容概览

节点与功能包

  • 分别用 Python(rclpy)和 C++(rclcpp)编写最小节点,理解初始化与日志;
  • 用 ament_python 和 ament_cmake 组织功能包,理解 package.xml、setup.py 与 CMakeLists.txt 的职责;
  • 使用 colcon build 构建工作空间并加载 install/setup.bash;
  • Python 和 C++ 中的多线程与回调函数实践。

话题与服务

  • 用 geometry_msgs/msg/Twist 控制 Turtlesim 前进、旋转、画圆,订阅位姿实现闭环控制;
  • 趣味实践:通过话题传输小说文本并用 espeak-ng 转语音,用 psutil 获取系统状态共享数据,用 Qt 显示订阅到的数据;
  • 自定义消息与服务接口:Python 实现人脸检测服务、C++ 实现巡逻海龟服务;
  • 参数声明、参数事件、YAML 配置加载,Launch 文件启动多节点并传递参数。

工具链

  • TF 坐标树:Python 发布机械臂底座到相机的静态 TF,C++ 发布地图坐标系的静态与动态 TF 并查询关系;
  • rqt / rqt_tf_tree 检查节点、话题和 TF 树,RViz2 显示坐标变换与机器人状态;
  • ros2 bag record 记录话题数据并回放测试。

仿真入门

  • 创建 ROS 2 描述功能包,使用 URDF 描述机器人连杆、关节与结构;
  • urdf_to_graphviz 生成模型结构图,RViz2 加载显示机器人模型;
  • 使用 Xacro 简化和复用 URDF,建立 Gazebo 仿真基础。

常用命令速查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 环境加载
source /opt/ros/humble/setup.bash
colcon build && source install/setup.bash

# 节点与话题
ros2 node list
ros2 topic echo /turtle1/pose
ros2 interface show geometry_msgs/msg/Twist

# 服务与参数
ros2 service list -t
ros2 param set /turtlesim background_r 255

# 工具
rqt && rviz2
ros2 bag record /turtle1/cmd_vel

工程注意事项

  • 修改 package.xml、setup.py 或 CMakeLists.txt 后,应重新执行 colcon build 并重新 source install/setup.bash;
  • Topic 的名称、消息类型、QoS 配置需要保持一致;
  • 自定义 .msg、.srv 接口变更后,应重新生成接口并检查所有依赖节点;
  • TF 查询依赖正确的父子坐标系、时间戳和 TF 发布器;
  • 多线程回调需要明确共享数据、线程退出和资源同步策略。

推荐实践顺序

  1. 安装 ROS 2 后运行 Turtlesim、键盘控制和 rqt,确认基础环境可用;
  2. 分别用 Python 和 C++ 编写最小节点,理解 rclpy 与 rclcpp;
  3. 创建两类功能包,通过 Turtlesim 学习 Topic 的发布、订阅与闭环控制;
  4. 使用自定义消息和服务接口,理解接口生成与服务端/客户端;
  5. 学习参数、Launch、TF、RViz2 和 ros2 bag;
  6. 最后用 URDF、Xacro 和 Gazebo 建立建模与仿真基础。

仓库

    ↑↓ 选择↵ 打开>theme · >random · >top · >archive