【多喝热水系列】从零开始的ROS2之旅——Day9 初识话题通信:基本命令

【多喝热水系列】从零开始的ROS2之旅------Day9 初识话题通信:基本命令

欢迎来到"多喝热水"系列的Day9经过前8天的铺垫,我们已经对ROS2的核心概念(节点)有了初步认知,今天就带着这些知识,实操话题相关的命令,手把手拆解每一条命令的底层逻辑,真正做到"知其然也知其所以然"。

一、核心目标

今天我们的核心任务是掌握:

  • ros2 run turtlesim turtlesim_node
  • ros2 node info /turtlesim
  • ros2 topic echo /turtle1/pose
  • ros2 topic info /turtle1/cmd_vel -v
  • ros2 interface show geometry_msgs/msg/Twist
  • ros2 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

截图信息解读:

从截图中能清晰看到节点的三大核心信息:

  1. 订阅的话题(Subscribed Topics):/turtle1/cmd_vel,这是小海龟接收运动控制指令的话题,后续我们会通过这个话题发布速度指令。

  2. 发布的话题(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 消息结构包含两部分,对应小海龟的两种运动形式:
  1. Vector3 linear:线速度,包含 x、y、z 三个方向(turtlesim 是2D仿真,仅 x 方向有效,y、z 方向无响应)。

  2. 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。

相关推荐
zm-v-159304339863 小时前
Python 数据挖掘从入门到精通:回归 / 分类 / 聚类 / 关联分析完整教程
python·数据挖掘·回归
仰泳的熊猫5 小时前
题目2570:蓝桥杯2020年第十一届省赛真题-成绩分析
数据结构·c++·算法·蓝桥杯
qq_417695058 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水8 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
Thera7779 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
yy我不解释9 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(一)
python·ai作画·音视频·comfyui
君义_noip10 小时前
信息学奥赛一本通 1952:【10NOIP普及组】三国游戏 | 洛谷 P1199 [NOIP 2010 普及组] 三国游戏
c++·信息学奥赛·csp-s
紫丁香10 小时前
AutoGen详解一
后端·python·flask
左左右右左右摇晃10 小时前
计算机网络笔记整理
笔记·计算机网络
不吃西红柿的8510 小时前
[职场] 内容运营求职简历范文 #笔记#职场发展
笔记·职场和发展·内容运营