ROS 2主题-topics-

举报
zhangrelay 发表于 2021/07/15 01:57:42 2021/07/15
【摘要】 前序:ROS 2节点-nodes- 视频教程(Linux):https://www.bilibili.com/video/BV16t4y197Br/ 本节详细介绍主题topic。 1. 如何理解主题topic: ROS 2将复杂的系统分解为许多模块化的节点。主题是ROS图(ROS graph)的重要元素,功能为节点交换消息的总线。节点可以将数据发布到任意数量的主题,与...

前序:ROS 2节点-nodes-

视频教程(Linux):https://www.bilibili.com/video/BV16t4y197Br/

本节详细介绍主题topic。

1. 如何理解主题topic:

ROS 2将复杂的系统分解为许多模块化的节点。主题是ROS图(ROS graph)的重要元素,功能为节点交换消息的总线。节点可以将数据发布到任意数量的主题,与此同时,可以实现对任意数量主题的订阅。主题是节点间数据交互的重要方式,同样也适用于系统各种不同模块之间的交互。

2. 主题topic有哪些命令功能:

使用如下命令:

ros2 topic -h

显示如下:

主要有:

  • bw:显示所查阅主题的带宽
  • delay:显示延迟
  • echo:输出主题消息
  • find:列出选定主题
  • hz:输出平均发布频率
  • info:显示主题消息
  • list:列出可使用的主题表
  • pub:发布消息到主题
  • type:输出主题类型

3. 如何掌握主题topic

如之前一节学习类似,先打开turtlesim和teleop节点:

ros2 run turtlesim turtlesim_node
 
ros2 run turtlesim turtle_teleop_key
 

rqt_graph工具:

3.1 命令工具

在新终端中运行该命令ros2 topic list将返回系统中当前活动的所有主题的列表:

更详细的功能:ros2 topic list -t 

返回相同的主题列表,这次主题类型显示在每个主题后面的括号中:

主题具有名称和类型。这些属性(尤其是类型)是节点用于交互相同信息的基础。

3.2 显示主题消息

要查看有关某个主题的发布数据,使用:

ros2 topic echo <topic_name>
 

例如:/turtle1/cmd_vel

ros2 topic echo /turtle1/cmd_vel
 

如果没有消息,该命令不会返回任何数据。

点击键盘方向左键。

3.3 显示主题信息

主题不必只是点对点的交互;它可以是一对多,多对一或多对多。

使用如下命令查阅主题状态信息:

ros2 topic info /turtle1/cmd_vel
 

 一个发布,两个订阅,思考分别为哪些?

3.4 订阅发布类型

节点使用消息通过主题发送和接收数据。发布者和订阅者必须发送和接收相同类型的消息才能进行通信。

上述主题对应的类似分别如下:

  • /parameter_events [rcl_interfaces/msg/ParameterEvent]
  • /rosout [rcl_interfaces/msg/Log]
  • /turtle1/cmd_vel [geometry_msgs/msg/Twist]
  • /turtle1/color_sensor [turtlesim/msg/Color]
  • /turtle1/pose [turtlesim/msg/Pose] 

其中,

geometry_msgs/msg/Twist
 

表示在在geometry_msgs包中有一个msg被称为Twist。

可以运行此类型以了解其详细信息,特别是消息期望的数据结构。

ros2 interface show <type>.msg

如:

ros2 interface show geometry_msgs/msg/Twist.msg
 

3.5 发布主题消息

知道消息结构后,可以使用以下命令直接从命令行将数据发布到主题上:

ros2 topic pub <topic_name> <msg_type> "<args>"
 

'<args>'参数是传递给主题的实际数据。

注意,windows使用"<args>"。

此参数需要以YAML语法输入。输入完整的命令,如下所示:

ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
 

--once 是一个可选参数,意思是“发布一条消息然后退出”。

更多参数:

ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
 

以1 Hz的频率发布速度指令。

改变不同的角速度,可以画出不同半径的圆形轨迹。

显示小乌龟目前的坐标信息:

ros2 topic echo /turtle1/pose
 

3.6 主题频率

查看主题消息发布的频率使用如下命令:

ros2 topic hz /turtle1/pose
 

频率约60hz左右,如下图所示:

 

4. 关闭节点

很多节点在运行。不要忘记通过关闭终端窗口或在每个终端中输入Ctrl+C停止它们。

 

这些内容基本于ROS1相似,部分将rostopic更新为ros2 topic。


 

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/103477891

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。