【多喝热水系列】从零开始的ROS2之旅------Day9 初识话题通信:基本命令
欢迎来到"多喝热水"系列的Day9经过前8天的铺垫,我们已经对ROS2的核心概念(节点)有了初步认知,今天就带着这些知识,实操话题相关的命令,手把手拆解每一条命令的底层逻辑,真正做到"知其然也知其所以然"。
一、核心目标
今天我们的核心任务是掌握:
ros2 run turtlesim turtlesim_noderos2 node info /turtlesimros2 topic echo /turtle1/poseros2 topic info /turtle1/cmd_vel -vros2 interface show geometry_msgs/msg/Twistros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 1.0}}"ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist "{angular: {z: 1.0}}"
二、各代码运行和解释
1、ROS2中用于启动节点的核心指令,作用是"运行某个功能包下的指定节点",语法格式为ros2 run <功能包名> <节点名>。
bash
ros2 run turtlesim turtlesim_node

2、用于查询指定节点详细信息的指令,语法为 ros2 node info <节点路径/节点名>,节点的完整路径(此处节点名与路径一致),即我们上一步启动的小海龟节点。
bash
ros2 node info /turtlesim

截图信息解读:
从截图中能清晰看到节点的三大核心信息:
-
订阅的话题(Subscribed Topics):/turtle1/cmd_vel,这是小海龟接收运动控制指令的话题,后续我们会通过这个话题发布速度指令。
-
发布的话题(Published Topics):/turtle1/pose、/rosout 等,其中 /turtle1/pose 是核心,用于实时发布小海龟的姿态信息(位置、角度、速度等)。
3、上一步我们知道节点会发布 /turtle1/pose 话题,里面包含小海龟的实时姿态,用以下命令监听该话题的数据。
bash
ros2 topic echo /turtle1/pose

-
x/y:小海龟在仿真窗口中的坐标位置(窗口左上角为原点)。
-
theta:小海龟的朝向角度(以弧度为单位,0表示朝右,逆时针为正方向)。
-
linear_velocity/angular_velocity:小海龟的线速度(前+,后-)和角速度(逆+,顺-)。
4、查看某个话题的具体信息:例命令
bash
ros2 topic info /turtle1/cmd_vel -v
- ros2 topic info:查询指定话题基本信息的指令,默认只显示消息类型和发布/订阅者数量。
-
/turtle1/cmd_vel:要查询的话题名称,"cmd_vel"是"command velocity"的缩写,即"速度指令"话题。
-
-v:可选参数,全称"verbose"(详细模式),加上该参数后会显示更完整的信息,包括发布者/订阅者的节点路径。
5、查看 Twist 消息结构
bash
ros2 interface show geometry_msgs/msg/Twist

- ros2 interface show:查看指定消息/服务接口结构的指令,"interface"(接口)在这里指消息的格式定义。
- geometry_msgs/msg/Twist:消息的完整路径,"geometry_msgs"是几何相关消息的功能包,"msg"表示这是消息类型,"Twist"是消息名称。
- Twist 消息结构包含两部分,对应小海龟的两种运动形式:
-
Vector3 linear:线速度,包含 x、y、z 三个方向(turtlesim 是2D仿真,仅 x 方向有效,y、z 方向无响应)。
-
Vector3 angular:角速度,包含 x、y、z 三个方向(turtlesim 中仅 z 方向有效,控制小海龟绕自身中心旋转,x、y 方向无响应)。
这一步是关键!只有清楚消息结构,我们才能精准发布指令,避免无效参数。
6、发布线速度指令控制小海龟前进
bash
ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 1.0}}"

-
ros2 topic pub:向指定话题发布消息的指令,"pub"是"publish"(发布)的缩写,语法为 ros2 topic pub <话题名> <消息类型> <消息内容>。
-
/turtle1/cmd_vel:目标话题,即小海龟接收速度指令的话题。
-
geometry_msgs/msg/Twist:消息类型,与话题要求的类型一致。
-
"{linear: {x: 1.0}}":消息内容,采用JSON格式简写,仅设置线速度的 x 方向为1.0(单位:m/s),其他参数默认0。
7、发布角速度指令控制小海龟旋转
bash
ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist "{angular: {z: 1.0}}"

整体语法与发布线速度指令一致,仅消息内容不同:"{angular: {z: 1.0}}" 表示设置角速度的 z 方向为1.0(单位:rad/s),控制小海龟逆时针旋转,其他参数默认0。