跳到正文
XiaoGao 的个人博客

NO.14 · 机器人

ROS 机器人开发入门:话题、服务与 TF 坐标变换

ROS 1 机器人开发入门笔记,从 catkin 工作空间、话题发布订阅、服务通信、自定义消息,到参数服务器、Launch 启动文件与 TF 坐标变换的编程实现。

发布 DATE
字数 WORDS
920
阅读 READ
3 分钟

机器人软件的核心是”很多个程序如何协作”,ROS 给出了标准答案。这份笔记按照入门课程的 14 讲整理:从 ROS 基础概念与工作空间开始,深入话题、服务两大通信机制,最后到达参数服务器、Launch 文件和 TF 坐标变换,配套可运行的 Turtlesim 示例源码。

学习路线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ROS 基础
├── ROS 的定位、组成和通信思想
├── ROS 环境安装与工作空间配置
└── ROS 常用术语与命令
↓
catkin 工程
├── 创建工作空间
├── 创建功能包
├── 编译与环境加载
└── package.xml 与 CMakeLists.txt
↓
ROS 通信
├── Topic 发布与订阅
├── Service 客户端与服务端
├── 自定义消息
└── 自定义服务
↓
系统能力
├── 参数服务器
├── Launch 启动文件
├── TF 坐标变换
└── RViz 等可视化工具

内容概览

基础篇(001-004 讲)

  • 理解 ROS 的定位:硬件抽象、节点间通信与机器人软件生态;
  • 搭建环境,创建工作空间与功能包,掌握 catkin_make 编译与环境加载流程;
  • 熟悉节点、话题、服务、参数、消息五个基本概念,以及 rosnode、rostopic、rosservice 等常用命令。

通信篇(005-010 讲)

  • 话题通信:使用 rospy.Publisher 向 /turtle1/cmd_vel 发布 geometry_msgs/Twist 控制海龟运动,用 rospy.Subscriber 订阅 /turtle1/pose 输出位姿;
  • 自定义消息:定义 Person.msg(姓名、年龄、性别)并生成接口;
  • 服务通信:编写服务端与客户端,调用 Turtlesim 的 /spawn 服务创建海龟,实现 /show_person 自定义服务。

系统能力篇(011-014 讲)

  • 参数服务器:读取和设置 /turtlesim/background_r/g/b,调用 /clear 服务刷新背景;
  • Launch 文件:用一个 Launch 文件同时启动 Turtlesim 和键盘控制节点,组织多节点与参数;
  • TF 坐标变换:广播 world 到海龟坐标系的变换,监听 turtle1、turtle2 的坐标关系,计算速度指令实现跟随控制;
  • 可视化工具:用 rqt_graph 观察节点与话题连接,用 RViz 查看 TF 和机器人状态。

三个示例功能包

功能包 作用 主要依赖
beginner_hiwonder 基础 Topic、Service、自定义消息和服务示例 rospy、std_msgs、message_generation
parameter_hiwonder 参数服务器的读取、设置和服务调用 rospy、std_msgs
tf_hiwonder Turtlesim 场景中的 TF 广播、监听和跟随 rospy、tf、turtlesim

常用命令速查

命令 用途
roscore 启动 ROS Master 和基础运行环境
rosnode list / info 查看节点信息
rostopic list / echo 查看话题和消息内容
rosservice list / call 查看和调用服务
rosparam get / set 读写参数服务器
rosrun / roslaunch 运行单个节点 / 按 Launch 文件启动
rqt_graph / rviz 可视化通信关系和传感器数据

工程注意事项

  • 节点、话题、服务和参数名称需要保持一致,名称错误会导致通信失败;
  • 自定义消息或服务修改后,需要重新执行 catkin_make 并重新加载 devel/setup.bash;
  • 启动客户端前确认服务端已注册,启动订阅器前确认发布器正在运行;
  • TF 示例依赖正确的坐标系名称和时间戳,坐标异常时应优先检查 TF 树和节点日志。

学习建议

  1. 先运行标准消息的发布器和订阅器,再阅读自定义消息 Person.msg;
  2. 对比 Topic 的持续发布模式与 Service 的请求响应模式;
  3. 使用参数服务器修改 Turtlesim 配置,理解节点与参数服务器的关系;
  4. 每个示例都记录节点名称、话题名称、服务名称、消息类型和启动顺序。

仓库

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