【ROS2指南-4】理解ROS2话题

这篇具有很好参考价值的文章主要介绍了【ROS2指南-4】理解ROS2话题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目标:使用 rqt_graph 和命令行工具来反思 ROS 2 主题。

教程级别:初学者

时间: 20分钟

内容

  • 背景

  • 先决条件

  • 任务

    • 1 设置

    • 2 rqt_graph

    • 3 ros2主题列表

    • 4 ros2主题回显

    • 5 ros2 主题信息

    • 6 ros2界面展示

    • 7 ros2主题发布

    • 8 ros2 主题赫兹

    • 9 清理

  • 概括

  • 下一步

背景

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

【ROS2指南-4】理解ROS2话题

一个节点可以向任意数量的主题发布数据,同时订阅任意数量的主题。

【ROS2指南-4】理解ROS2话题

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

先决条件

上一教程提供了一些关于此处构建的节点的有用背景信息。

任务

1 设置

到目前为止,您应该可以轻松启动 turtlesim。

打开一个新的终端并运行:

ros2 run turtlesim turtlesim_node

打开另一个终端并运行:

ros2 run turtlesim turtle_teleop_key

回想一下之前的教程,这些节点的名称默认为/turtlesim/teleop_turtle

2 rqt_graph

在整个教程中,我们将使用rqt_graph可视化不断变化的节点和主题,以及它们之间的联系。

turtlesim教程告诉您如何安装 rqt 及其所有插件,包括rqt_graph.

要运行 rqt_graph,请打开一个新终端并输入命令:

rqt_graph

您还可以通过打开 rqt 并选择Plugins > Introspection > Nodes Graph来打开 rqt_graph 。

【ROS2指南-4】理解ROS2话题

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

该图描述了/turtlesim节点和/teleop_turtle节点如何通过主题相互通信。该/teleop_turtle节点将数据(您输入的用于移动海龟的击键)发布到主题/turtle1/cmd_vel,并且该/turtlesim节点订阅该主题以接收数据。

rqt_graph 的突出显示功能在检查具有许多节点和以许多不同方式连接的主题的更复杂系统时非常有用。

rqt_graph 是一个图形自省工具。现在我们将了解一些用于自省主题的命令行工具。

3 ros2主题列表

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

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

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]

主题有名称和类型。这些属性,尤其是类型,是节点如何知道它们在讨论主题时谈论的是相同的信息。

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

【ROS2指南-4】理解ROS2话题

不过现在,请选中这些选项以避免混淆。

4 ros2主题回显

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

ros2 topic echo <topic_name>

由于我们知道将/teleop_turtle数据发布到主题/turtlesim之上/turtle1/cmd_vel,让我们使用echo该主题进行反思:

ros2 topic echo /turtle1/cmd_vel

起初,此命令不会返回任何数据。那是因为它正在等待/teleop_turtle发布一些东西。

返回正在运行的终端turtle_teleop_key并使用箭头移动乌龟。echo同时观察你正在运行的终端,你会看到你所做的每一个动作都发布了位置数据:

linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
  ---

现在返回 rqt_graph 并取消选中Debug框。

【ROS2指南-4】理解ROS2话题

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

5 ros2 主题信息

话题不必只是点对点的交流;它可以是一对多、多对一或多对多。

另一种看待这个问题的方法是运行:

ros2 topic info /turtle1/cmd_vel

将返回:

Topic: /turtle1/cmd_vel
Publisher count: 1
Subscription count: 2

6 ros2界面展示

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

我们之前在运行后看到的主题类型让我们知道每个主题可以发送什么类型的消息。回想一下,该主题具有以下类型:ros2 topic list -t cmd_vel

geometry_msgs/msg/Twist

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

现在我们可以运行这个类型来了解它的细节,特别是消息期望的数据结构。

ros2 interface show <type>.msg

ros2 msg show geometry_msgs/msg/Twist
This expresses velocity in free space broken into its linear and angular parts.

    Vector3  linear
    Vector3  angular

这告诉您该/turtlesim节点正在等待一条消息,其中包含两个向量linearangular,每个向量包含三个元素。如果您还记得我们看到的通过命令/teleop_turtle传递给的数据,它具有相同的结构:/turtlesim echo

linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
  ---

7 ros2主题发布

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

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

--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))

你会看到你的乌龟像这样移动:

【ROS2指南-4】理解ROS2话题

乌龟(通常是它要模拟的真实机器人)需要稳定的命令流才能连续运行。所以,为了让海龟继续移动,你可以运行:

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和添加了选项,它告诉以 1 Hz 的稳定流发布命令

--rate 1ros2 topic pub

【ROS2指南-4】理解ROS2话题

您可以刷新 rqt_graph 以图形方式查看发生了什么。您将看到节点 ( ) 正在通过主题发布,并且现在正在被节点( ) 和节点接收。ros 2 topic pub .../_ros2cli_30358/turtle1/cmd_velros2 topic echo .../_ros2cli_26646/turtlesim

【ROS2指南-4】理解ROS2话题

echo最后,您可以在主题上运行pose并重新检查 rqt_graph:

ros2 topic echo /turtle1/pose

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

8 ros2 主题赫兹

对于此过程的最后一次反省,您可以使用以下方法报告数据发布的速度:

ros2 topic hz /turtle1/pose

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

average rate: 59.354
  min: 0.005s max: 0.027s std dev: 0.00284s window: 58

回想一下,您使用 将发布的速率设置turtle1/cmd_vel为稳定的 1 Hz 。如果您使用而不是运行上述命令,您将看到反映该速率的平均值。ros2 topic pub --rate 1turtle1/cmd_velturtle1/pose

9 清理

此时,您将有很多节点在运行。不要忘记进入Ctrl+C每个终端来阻止他们。

概括

节点通过主题发布信息,这允许任意数量的其他节点订阅和访问该信息。在本教程中,您使用 rqt_graph 和命令行工具检查了主题上多个节点之间的连接。您现在应该对数据如何在 ROS 2 系统中移动有了很好的了解。

下一步

接下来,您将通过教程了解 ROS 2 服务了解ROS 图中的另一种通信类型文章来源地址https://www.toymoban.com/news/detail-418032.html

到了这里,关于【ROS2指南-4】理解ROS2话题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ROS2学习笔记三:话题Topic

    目录 前言 1 话题简介 2 常用指令 3 RCLCPP实现实现话题 3.1 创建工作空间 3.2 代码编写 3.2.1 发布端编写 3.2.2 发布端编写 ROS2中的一个重要概念是话题(Topic)。话题是一种通过发布者和订阅者之间进行异步通信的机制。发布者(Publisher)将消息发布到特定的话题上,而订阅者(

    2024年01月20日
    浏览(33)
  • 【ROS2机器人入门到实战】话题之RCLCPP实现

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 本节我们学习使用ROS2的RCLCPP客户端库来实现话题通信。 RCLCPP为

    2024年02月07日
    浏览(40)
  • 【ROS2指南-19】使用Launch启动/监控多个节点

    ROS 2 中的启动系统负责帮助用户描述他们系统的配置,然后按照描述执行。系统的配置包括要运行的程序、运行它们的位置、传递给它们的参数以及 ROS 特定约定,这些约定通过为它们提供不同的配置,使得在整个系统中重用组件变得容易。它还负责监视已启动流程的状态,

    2023年04月15日
    浏览(58)
  • 【ROS2指南-11】创建ROS2功能包

    目标: 使用 CMake 或 Python 创建一个新包,并运行其可执行文件。 教程级别: 初学者 时间: 15分钟 内容 背景 1 什么是 ROS 2 包? 2 什么构成了 ROS 2 包? 3 工作区中的包 先决条件 任务 1 创建一个包 2 构建一个包 3 获取安装文件 4 使用包 5 检查包装内容 6 自定义 package.xml 概括

    2024年02月04日
    浏览(31)
  • ubutu下ros2实现小车仿真建模与目标检测

    1.安装ros2 这里使用小鱼的一键安装,根据自己的喜好安装,博主用的是ros2的foxy版本 2.下载代码(这里使用的是古月居的代码) https://book.guyuehome.com/ 可以结合古月居的B站视频来自己一步一步操作,里面有讲解基础理论与一些环境的配置 https://www.bilibili.com/video/BV16B4y1Q7jQ?p=1

    2024年02月04日
    浏览(31)
  • 从ROS1到ROS2无人机编程实战指南

    亲爱的读者们,我今天非常荣幸地向大家推荐一本本人的全新力作——《从ROS1到ROS2无人机编程实战指南》。这本书站在初学者的角度,从入门到进阶,再到实战,循序渐进,是学习ROS1和ROS2的最佳选择。如今已在全国范围内上市,购书即可享受次日达的快捷服务! 本书的创

    2024年02月10日
    浏览(35)
  • 【ROS2指南-8】入门Launch启动脚本

    目标: 创建launch文件以运行复杂的 ROS 2 系统。 教程级别: 初学者 时间: 10分钟 内容 背景 先决条件 任务 1 设置 2 编写启动文件 3 ros2发射 4 使用 rqt_graph 反省系统 概括 下一步 在到目前为止的教程中,您一直在为您运行的每个新节点打开新终端。随着越来越多的节点同时运

    2024年02月15日
    浏览(56)
  • 【手把手做ROS2机器人系统开发二】熟悉ROS2基本命令

    目录 【手把手做ROS2机器人系统开发二】熟悉ROS2基本命令 一、上讲回顾 二、ROS2核心命令讲解 1、daemon-各种守护进程相关的子命令 2、node-各种节点进程相关的子命令  3、pkg-各种包进程相关的子命令  4、run运行特定软件包的可行性文件 5、topic各种话题进程相关的子命令 6、

    2024年02月14日
    浏览(33)
  • 【ROS2指南-14】创建自定义的消息和服务

    目标: 自定义接口文件( .msg 和 .srv )并将它们与 Python 和 C++ 节点一起使用。 教程级别: 初学者 时间: 20分钟 内容 背景 先决条件 任务 1 创建一个新包 2 创建自定义定义 3个CMakeLists.txt 4个package.xml 5 构建tutorial_interfaces包 6 确认 msg 和 srv 创建 7 测试新接口 概括 下一步 在之

    2023年04月12日
    浏览(25)
  • 【ROS2指南-9】Bag的record和play操作

    目标: 记录在某个话题上发布的数据,以便您可以随时回放和检查它。 教程级别: 初学者 时间: 10分钟 内容 背景 先决条件 任务 1 设置 2 选择一个主题 3 ros2包记录 4 ros2 包信息 5 ros2包玩 概括 下一步 相关内容 ros2 bag 是一个命令行工具,用于记录系统中主题发布的数据。它

    2024年02月08日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包