第 2 章 命令行工具与 turtlesim
学习目标
- 用
ros2 run启动节点 - 用
ros2 node查看节点信息 - 用
ros2 topic查看和发布话题数据 - 用
ros2 service、ros2 action、ros2 param与服务/动作/参数交互 - 用
rqt_graph可视化节点图
1. 启动 turtlesim
turtlesim 是一个专门用来学习 ROS 2 的轻量模拟器,一只小乌龟可以在蓝色画布上游动并留下轨迹。启动它:
bash
ros2 run turtlesim turtlesim_node
ros2 run <功能包名> <可执行文件名> 是运行节点的基本命令。此时桌面上应该出现乌龟窗口。
再打开一个终端进入容器,启动键盘遥控器:
bash
docker exec -it ros2_learning bash
source /opt/ros/jazzy/setup.bash
ros2 run turtlesim turtle_teleop_key
在遥控器窗口里按方向键,乌龟就会游动。
提示:第一个终端要一直保持运行(turtlesim_node),所有"第二个终端"命令都指新开的这个终端。
2. 查看节点
在第二个终端里:
bash
ros2 node list
输出类似:
text
/teleop_turtle
/turtlesim
查看单个节点的详细信息:
bash
ros2 node info /turtlesim
输出会列出这个节点发布/订阅的话题、提供的服务等------这就是节点"接线图"的文字版。
3. 话题操作
列出当前所有话题:
bash
ros2 topic list
ros2 topic list -t # 连同消息类型一起显示
你会在输出中看到 /turtle1/cmd_vel(速度指令)和 /turtle1/pose(乌龟位姿)等话题。
实时查看话题数据(按 Ctrl+C 停止):
bash
ros2 topic echo /turtle1/pose
操作键盘让乌龟动一下,可以看到位姿数据不断刷新:
text
x: 5.544444561004639
y: 5.544444561004639
theta: 0.0
查看话题的详细信息(发布者、订阅者、消息类型):
bash
ros2 topic info -v /turtle1/cmd_vel
统计消息发布频率:
bash
ros2 topic hz /turtle1/pose
直接向话题发布数据(不需要写任何代码):
bash
ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0}, angular: {z: 1.0}}"
这条命令让乌龟一边前进一边转弯。命令里 {linear: {x: 2.0}, angular: {z: 1.0}} 是 Twist 消息的字段值(线速度 2 m/s、角速度 1 rad/s)。
4. 服务操作
列出所有服务:
bash
ros2 service list
查看服务类型:
bash
ros2 service type /spawn
调用服务:在 (2, 2) 位置生成一只新乌龟:
bash
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2}"
调用服务清空轨迹:
bash
ros2 service call /clear std_srvs/srv/Empty "{}"
注意服务的调用方式是:ros2 service call <服务名> <类型> "<参数>"。
5. 动作操作
列出所有动作:
bash
ros2 action list
ros2 action list -t # 连同类型
调用动作让乌龟原地旋转 90 度(约 1.57 弧度),可以观察到进度反馈:
bash
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}"
6. 参数操作
查看节点的参数:
bash
ros2 param list /turtlesim
读取参数:
bash
ros2 param get /turtlesim background_b
修改参数(把背景改成红色系):
bash
ros2 param set /turtlesim background_r 200
设置后乌龟窗口背景立即变化------参数让程序运行中可以调配置。
7. 用 rqt_graph 可视化
装好工具后(如缺失可执行 sudo apt install -y ros-jazzy-rqt-graph):
bash
rqt_graph
会弹出一个窗口,以图形方式显示节点、话题、服务的连接关系。绿色椭圆是节点,彩色连线是话题/服务,把鼠标放上去可以看到消息类型。这是理解 ROS 2 架构最好的工具之一。
8. 本章小结(常用命令速查)
| 目的 | 命令 |
|---|---|
| 运行节点 | ros2 run <包名> <可执行名> |
| 列出节点 | ros2 node list |
| 节点详情 | ros2 node info <节点名> |
| 列出话题 | ros2 topic list -t |
| 查看话题内容 | ros2 topic echo <话题> |
| 手动发布 | ros2 topic pub <话题> <类型> "{...}" |
| 调用服务 | ros2 service call <服务名> <类型> "{...}" |
| 发送动作 | ros2 action send_goal <动作名> <类型> "{...}" |
| 查看/设置参数 | ros2 param list/get/set <节点名> ... |
| 可视化 | rqt_graph |
常见问题
| 现象 | 原因与解决办法 |
|---|---|
ros2 node list 只有 / |
ROS 环境未加载或节点不在同一个 DDS 域;先 source /opt/ros/jazzy/setup.bash,并确认两个终端在同一个容器里 |
| 键盘遥控没反应 | 光标要先点击遥控器终端窗口;另外确认 turtlesim_node 还开着 |
package 'turtlesim' not found |
执行 sudo apt install -y ros-jazzy-turtlesim |
找不到命令 rqt_graph |
执行 sudo apt install -y ros-jazzy-rqt-graph |
练习题
- 用
ros2 service call /spawn生成两只乌龟,说说生成后节点列表和话题列表有什么变化。 - 用一条
ros2 topic pub命令让乌龟画一个圆,再用/clear清空后画一个反向的圆。 - 打开
rqt_graph,观察按下键盘时哪两个节点之间出现了数据流动。