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

这篇具有很好参考价值的文章主要介绍了【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图的一个重要元素,充当节点交换消息的总线。

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

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

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

 主题“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

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

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

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

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

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

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

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

3、 ros2 topic list

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

ros2 topic list

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

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

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

ros2 topic list -t

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

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中的位置,可以取消选中下面的所有框

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

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

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

4 、ros2 topic echo

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

ros2 topic echo <topic_name>

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

ros2 topic echo /turtle1/cmd_vel

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

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

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

 /_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是可选参数,表示“发布一条消息然后退出”。

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

 回复内容为:

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

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

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

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

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

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

ros2 topic echo /turtle1/pose

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

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

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

8 、ros2 topic hz

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

ros2 topic hz /turtle1/pose

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

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

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

【ROS2入门】理解 ROS 2 Topics 话题和我们之前写的一致,1HZ。

9、总结

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

以上就是我今天要分享的内容。纠错,疑问,交流: 911946883@qq.com文章来源地址https://www.toymoban.com/news/detail-400455.html

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

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

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

相关文章

  • 2 ROS2话题通讯基础(1)

    其他ROS2学习笔记: ROS2学习笔记 代码仓库:Github连接地址 欢迎各位互相学习交流 话题通信是一种单向通信模型,一方发布数据,一方订阅数据,适用于连续不间断的通讯场景,如小车SLAM导航过程中的位姿信息等等。话题是一个通讯的管道,ROS2的话题发布方和接收方无论是

    2024年02月02日
    浏览(39)
  • ROS2学习笔记三:话题Topic

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

    2024年01月20日
    浏览(42)
  • 【ROS2指南-7】理解ROS2的Action

    目标: 理解并学习ROS 2 中的Action通信方式。 教程级别: 初学者 时间: 15分钟 内容 背景 先决条件 任务 1 设置 2 使用动作 3 ros2节点信息 4 ros2 动作列表 5 ros2 动作信息 6 ros2界面展示 7 ros2 动作 send_goal 概括 下一步 相关内容 动作是 ROS 2 中的一种通信类型,用于长时间运行的任

    2023年04月16日
    浏览(45)
  • 【ROS2机器人入门到实战】ROS2服务入门

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 大家好,帅鱼又蹬蹬蹬的游回来了。本节小鱼将要带大家一起了解

    2024年02月07日
    浏览(55)
  • 【ros2】ros2环境安装与基础入门

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍ros2环境安装与基础入门。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 ROS 2 (Robot Operating System 2)是一个开源的机器人操作系统,它是ROS(Robot

    2024年02月09日
    浏览(42)
  • 【ROS2机器人入门到实战】2.ROS与ROS2对比

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 经过上一节的学习,相信你已经对ROS和ROS2的发展有了一定的了解

    2024年02月04日
    浏览(44)
  • 【ROS2机器人入门到实战】ROS2接口介绍

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 本节小鱼将会带你学习认识一个新的概念,叫做interface,即接口。

    2024年02月05日
    浏览(48)
  • 【ROS2机器人入门到实战】ROS2节点介绍

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn ROS2中每一个节点也是只负责一个单独的模块化的功能(比如一个

    2024年02月06日
    浏览(49)
  • ROS2入门与实践--1(ROS2的安装与环境测试)

    对于VMware虚拟机的安装教程请看这篇文章:VMware虚拟机安装 对于20.04版本的Ubuntu操作系统安装教程请看这篇文章:Ubuntu-20.04系统安装 对于22.04版本的Ubuntu操作系统安装教程请看这篇文章:Ubuntu-22.04系统安装 1.在ROS2官方的文档中,安装ROS2之前需要首先检查操作系统语言环境 官

    2024年02月15日
    浏览(47)
  • 【ROS2机器人入门到实战】3.动手安装ROS2

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 到了这一节,终于可以开始安装ROS2了。安装ROS2本来是一件比较麻

    2024年02月13日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包