【ROS2入门】理解 ROS 2 Topics 话题

        大家好,我是虎哥,从今天开始,我将花一段时间,开始将自己从ROS1切换到ROS2,在上一篇中,我们一起了解ROS 2中节点的功能以及与之交互的工具, 这一篇,我们主要会围绕ROS中另外一个重要的概念“Topic ”,详细其具体的操作指令。

目录

一、ROS2中话题(Topic in ROS 2)

1 、启动模拟节点

2、 rqt_graph

3、 ros2 topic list

4 、ros2 topic echo

5、 ros2 topic info

6 、ros2 interface show

7 、ros2 topic pub

8 、ros2 topic hz

9、总结


一、ROS2中话题(Topic in ROS 2)

ROS 2将复杂系统分解为许多模块化节点。“Topic ”是ROS图的一个重要元素,充当节点交换消息的总线。

 节点可以向任意数量的主题发布数据,并同时订阅任意数量的话题“Topic ”。

 主题“Topic ”是数据在节点之间移动的重要方式之一,因此在系统的不同部分之间移动。

1 、启动模拟节点

到现在,你应该可以轻松地启动turtlesim。打开一个终端,执行如下命令:

ros2 run turtlesim turtlesim_node

打开一个新的终端,启动遥控节点:

ros2 run turtlesim turtle_teleop_key

2、 rqt_graph

在本教程中,我们将使用rqt_graph来可视化不断变化的节点和主题,以及它们之间的连接。Turtlesim教程告诉您如何安装rqt及其所有插件,包括rqt_graph。

sudo apt update
sudo apt install ros-eloquent-rqt*

启动

rqt_graph

 你还可以打开 rqt_graph 通过打开rqt 选择 Plugins > Introspection > Nodes Graph.

         您应该看到上面的节点和主题,以及围绕图形外围的两个操作(现在让我们忽略它们)。如果将鼠标悬停在中心的主题上,您将看到如上图所示的颜色高亮显示。

        该图描述了/turtlesim节点和/teolep_turtle节点如何在主题上相互通信。/teolep_turtle节点正在向/turtle1/cmd_vel主题发布数据(您输入的键击以移动海龟),/turtlesim节点订阅该主题以接收数据。

         rqt_graph的突出显示功能在检查具有以多种不同方式连接的多个节点和主题的更复杂系统时非常有用。rqt_graph是一个图形化的工具。现在我们来看一些用于主题的命令行工具。

3、 ros2 topic list

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

ros2 topic list

/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

ros2 topic list -t将返回相同的主题列表,这一次主题类型附加在每个主题后面的括号中:

ros2 topic list -t

nvidia@ubuntu:~$ ros2 topic list -t
/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]

主题"Topic"有名称和类型。这些属性,特别是类型,是节点在主题上移动时如何知道自己在谈论相同的信息的。

如果您想知道所有这些主题在rqt_graph中的位置,可以取消选中下面的所有框

 不过,目前暂时,请选中这些选项以避免混淆。

4 、ros2 topic echo

要查看主题上发布的数据,请使用:

ros2 topic echo <topic_name>

由于我们知道/teolep_turtle通过/turtle1/cmd_vel主题向/turtlesim发布数据,因此让我们使用echo来反思该主题:

ros2 topic echo /turtle1/cmd_vel

 现在,回到 rqt_graph and 取消选择 the Debug box.

 /_ros2cll_29047是由我们刚刚运行的echo创建的节点(数字会改变)。现在,您可以看到发布者正在通过cmd_vel主题发布数据,并且订阅了两个订阅者。

5、 ros2 topic info

主题不一定只有点对点的交流;它可以是一对多、多对一或多对多。另一种方法是运行:

ros2 topic info /turtle1/cmd_vel

会回复如下信息:

nvidia@ubuntu:~$ ros2 topic info /turtle1/cmd_vel
Type: geometry_msgs/msg/Twist
Publisher count: 1
Subscriber count: 1

6 、ros2 interface show

节点使用消息通过主题发送数据。发布者和订阅者必须发送和接收相同类型的消息才能进行通信。在运行ros2主题列表之后,我们前面看到的主题类型-t让我们知道每个主题可以发送什么类型的消息。

ros2 topic list -t

会回复带类型的话题:

nvidia@ubuntu:~$ ros2 topic list -t
/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]

cmd_vel主题的类型:

geometry_msgs/msg/Twist

这意味着在geometry_msgs包中有一个名为Twist的msg。

现在,我们可以在该类型上运行ros2 interface show<type>.msg,以了解其详细信息,特别是消息所需的数据结构。

ros2 interface show geometry_msgs/msg/Twist

会得到如下回复:

nvidia@ubuntu:~$ ros2 interface show geometry_msgs/msg/Twist
# This expresses velocity in free space broken into its linear and angular parts.
​
Vector3  linear
Vector3  angular

回忆一下,之前我们的ECHO话题:

nvidia@ubuntu:~$ ros2 topic echo /turtle1/cmd_vel
linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 2.0
---

linear 和angular 都是一个数组,每个数组有3个元素。

7 、ros2 topic pub

现在已经有了消息结构,可以使用以下命令行直接将数据发布到主题上:

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

“<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}}"

这个比起之前ROS1上还是直管了很多。

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

 回复内容为:

publisher: beginning loop
publishing #1: geometry_msgs.msg.Twist(linear=geometry_msgs.msg.Vector3(x=2.0, y=0.0, z=0.0), angular=geometry_msgs.msg.Vector3(x=0.0, y=0.0, z=1.8))

Turtlesim(以及通常用来模仿的真实机器人)需要稳定的命令流来连续操作。所以,为了让乌龟继续移动,你可以跑:

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}}"

 小乌龟会一直绕圈圈。这里的区别是删除了--once选项,添加了--rate 1选项,该选项告诉ros2主题pub以1Hz的稳定流发布命令。

您可以刷新rqt_graph,以图形方式查看正在发生的情况。你会看到ros 2主题PUB。。。节点(/ros2cli_29722)正在/turtle1/cmd_vel主题上发布,并由ros2主题echo接收。。。节点(/ros2cli_29884)和/turtlesim节点。

 最后,您可以对姿势主题运行echo并重新检查rqt_graph:

ros2 topic echo /turtle1/pose

 在这种情况下,/turtlesim现在发布到pose主题,并订阅了一个新的echo节点。

8 、ros2 topic hz

在此过程中的最后可以使用以下方法报告数据发布的速度:

ros2 topic hz /turtle1/pose

它将返回/turtlesim节点向pose主题发布数据的速率数据。

average rate: 56.477
    min: 0.004s max: 0.135s std dev: 0.01506s window: 65

可以再看看turtle1/cmd_vel

ros2 topic hz turtle1/cmd_vel

和我们之前写的一致,1HZ。

9、总结

        结束前,此时,将有许多节点正在运行。不要忘记通过关闭终端窗口或在每个终端中输入“Ctrl+C”来停止它们。节点通过主题发布信息,这允许任何数量的其他节点订阅和访问该信息。在本教程中,您使用rqt_graph和命令行工具检查了主题上多个节点之间的连接。现在,您应该对ROS 2系统中的数据如何移动有了很好的了解。

以上就是我今天要分享的内容。纠错,疑问,交流: 911946883@qq.com

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: "ROS2入门21讲"是一套图文教程,以简单易懂的方式介绍ROS2的基本概念和操作。通过这套教程,读者可以了解Ros2的工作原理,学习如何使用ROS2搭建机器人系统。教程分为21个部分,每个部分讲解一个话题,包括ROS2的体系结构,节点,Topic,服务等。对于初学者来说,这套教程是学习ROS2的良好入门材料。在学习过程中,读者可以循序渐进地学习相关知识,通过实际操作,了解ROS2的核心技术。教程还提供了大量的示例代码和操作指南,帮助读者更好地理解ROS2的操作过程。此外,教程也提供了一些高级内容的介绍,如如何自动部署ROS2应用,如何实现ROS2的多机通信等。总体而言,ROS2入门21讲图文教程是一套非常实用的教程,适合初学ROS2的读者使用。学习这套教程可以让读者了解ROS2在机器人系统中的应用,从而更好地掌握相关技能。 ### 回答2: 如今,ROS成为了机器人领域调试、开发和测试的标准,ROS 2是其最新版本,它主要带来了更快的性能、更好的可靠性和更好的可扩展性等特性。 为了帮助大家更快、更好地学习ROS 2,本着开放、分享、合作的精神,一位名为vxy10的作者为我们制作了《ROS 2入门21讲图文教程》。 该教程分为多个章节,涵盖了ROS 2的基础知识、常用工具的使用以及一些实例案例的讲解等内容。 首先,作者详细阐述了ROS 2的基础概念,例如节点、话题、服务、参数、行为等,为读者提供了一个清晰的整体认识。然后,课程讲解了ROS 2常用的工具和函数,包括Rviz、rostopicrosnode、rqt等,为新手提供了一个快速入门的方式。接着,课程分别讲解了一些实例案例,例如如何使用 ROS 2进行控制机器人、如何使用ROS 2进行机器人的对话等,为读者提供了一个更加深入的了解。 本教程不仅提供了详尽的代码示例,还有丰富精美的图例,能够帮助读者更好地理解各种概念和示例。此外,每个章节都配有习题和答案,帮助读者巩固所学知识,提高学习效率。 总之,《ROS 2入门21讲图文教程》具有系统性、实用性和互动性等特点,对于想要学习ROS 2的读者来说,是一份非常宝贵的资源。 ### 回答3: ROS2入门21讲图文教程是一篇非常详细的教程,旨在帮助初学者了解ROS2的基本知识和使用方法。这个教程分为21个章节,每个章节都覆盖了ROS2的不同方面和主题。 在第一章中,教程简要介绍了ROS2的概念和优点,让读者了解ROS2的用途和处理能力。第二章讲解了ROS2的安装和设置,包括环境变量的配置和ROS2节点的启动方式。第三章介绍了ROS2的工具,包括rqt图形界面,rviz可视化环境等,这些工具是ROS2开发的关键组成部分。第四章到第十二章讲解了ROS2的核心概念,包括消息传递机制、文件结构、包和节点等,这些都是ROS2开发的重要知识点。第十三章到第十五章讲解了ROS2服务,包括服务器和客户端的创建和使用。第十六章到第十九章讲解了ROS2参数服务器和节点名称,涉及到ROS2开发中的重要概念和工具。最后两章讲解了ROS2的调试方式和使用ROS2与OpenCV进行通信的方法。 整个教程详细、生动、易于理解,其中配图和代码示范也让读者更好地理解和操作ROS2。对于初学者来说,这个教程是入门ROS2的一份非常好的材料,不仅涵盖了大部分基础知识和技能,而且通过大量实例的演示,让读者能够更好地掌握ROS2的使用方法。所以,这个教程是初学ROS2的开发者们不可多得的宝贵资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器人虎哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值