尊敬的客户,您好!我们是北京一家专注互联网技术服务公司,可以提供收录效果好,文章排名好的网站进行发文,发得多,各种关键词排名就多,流量越多越稳定,如果您有需要欢迎您前来资讯!可以随意添加图文和视频广告,助您的企业或者项目服务实现推广效果!如需合作欢迎请加微信
摘要:本文主要介绍ros2主题
环境:.04,ros2-foxy,
2.1.4 了解ros2主题(原文:)
>>教程>>了解 ros2 主题
您正在阅读 ros2 (Foxy) 旧版本的文档,但它仍受支持。要查看最新版本,请参阅版本链接 ( )
了解 ros2 主题
目标:使用和命令工具来理解ros2主题
课程级别:初学者
期间:
目录:
1. 背景
2. 预备知识
3.步骤
3.1 配置
3.2
3.3 ros2列表
3.4 ros2回显
3.5 ros2 信息
3.6 ros2显示
3.7 ros2 酒吧
3.8 ros2赫兹
3.9 以上
4. 总结
5. 后续步骤
1. 背景
ROS2将复杂的系统划分为许多模块化的节点,主题是ROS网络中至关重要的元素,充当着节点间信息交换的“航天飞机”的角色。
一个节点向多个主题发布消息,每个主题可以有多个订阅者。
(主题沟通方式,一对一,一对多,多对一,多对多)
主题是两个节点之间进行数据通信的重要方式,也可以用于系统不同组件之间的数据通信。
2. 预备知识
前面的课程提供了有关我们将在这里构建的节点的一些有用的背景信息。
照例,别忘了在新终端里打开配置文件(环境变量)(个人认为,如果ros2的环境变量已经写入启动脚本里了,就没必要再这么做了)。
3.步骤3.1配置
现在,你应该能够轻松启动乌龟模拟
打开一个新终端并运行以下命令:
ros2 run turtlesim turtlesim_node
打开另一个终端并运行:
ros2 run turtlesim turtle_teleop_key
回想一下上一课,这些节点的默认名称是 / 和 /
3.2
本课程在整个课程中使用节点和主题的可视化,并将两者联系起来。
本课程将教你如何安装 rqt 并使用其插件,包括
要运行,请在新终端中输入以下命令:
rqt_graph
您也可以使用 rqt 通过选择 >> 打开它
您应该看到上方的节点和主题,以及图表边缘的两个操作(左侧和右侧的大框)(暂时忽略它们)。如果将光标移到主题上,您将看到颜色变化,如上图所示。
该图描绘了节点/和节点/通过主题相互通信。节点/将数据(您按下按键来移动乌龟)发布到主题//,节点/订阅主题并获取数据。
当系统更加复杂,且有许多节点和主题以不同方式连接时,突出显示非常有用。
它是一个图形化的复习工具。现在让我们看看如何使用命令工具来复习主题。
3.3 ros2列表
在新终端中运行 ros2 list 命令以返回系统上当前活动的主题列表:
/parameter_events /rosout /turtle1/cmd_vel /turtle1/color_sensor /turtle1/pose
ros2 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]
主题有名称和类型,这些属性,尤其是类型,让节点知道如何通过主题传达同一类型的信息。
如果您想知道所有主题在哪里,您可以取消选中任何隐藏的框:
不过,现在让我们理清操作,以免看起来令人困惑。
3.4 ros2回显
要查看某个主题发布的数据,可以使用以下命令:
ros2 topic echo <topic_name>
由于节点之间是通过主题//来发送数据的,所以我们用echo来看一下这个主题的发布信息:
ros2 topic echo /turtle1/cmd_vel
操作后,此命令不会返回任何信息,因为它正在等待节点/发送某些东西
回到节点运行的终端,输入字母移动乌龟,然后查看运行echo的终端。每次输入字母移动时,你会发现位置信息被发布:
linear: x: 2.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0 ---
现在回到界面并取消选中该框:
/(后面的数字可能不一样)就是通过echo命令生成的节点,现在你可以发现发布者正在通过主题发布数据,同时有两个订阅者正在订阅。
3.5 ros2 信息
主题沟通不仅限于一对一,还可以是一对多,多对一,多对多。
查看主题的另一种方式是:
ros2 topic info /turtle1/cmd_vel
将返回:
Type: geometry_msgs/msg/Twist Publisher count: 1 Subscription count: 2
3.6 ros2显示
节点通过消息主题发送数据,发布者和订阅者只有发送和接收相同的消息类型才可以通信。
输入ros2 list -t命令,我们可以轻松查看主题类型,这样我们就可以知道每个主题传输的消息类型。回到主题,它有以下类型:
geometry_msgs/msg/Twist
这意味着它的类型是数据包下面的消息的类型。
现在我们可以使用该命令查看类型的详细信息,特别是消息数据结构:
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 查看消息类型,它具有相同的结构:
linear: x: 2.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0 ---
3.7 ros2 酒吧
现在您已经对消息结构有了基本的了解,您可以从命令行直接向主题发送数据:
ros2 topic pub <topic_name> <msg_type> ''
' '标签表示你将要发送到主题的数据。数据结构可以通过上一节的方法获取。
注意输入参数必须符合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 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}}"
这里的区别在于使用了-rate 1参数,而不是--once参数,前者表示ros2 pub发出命令的频率为1hz。
您可以更新以可视化更改。您应该看到 ros2 pub ...(node/) 将消息发布到主题 //,并且 ros2 echo ...(node/) 和 node/ 正在接收消息。
最后,您可以在更新时运行 echo 主题姿势:
ros2 topic echo /turtle1/pose
在这个例子中,/ 正在向主题 pose 发布一条消息,而一个新的 echo 节点正在订阅该主题。
3.8 ros2赫兹
作为此过程的最后思考,您可以使用以下命令来获取发布数据的速度:
ros2 topic hz /turtle1/pose
它将返回节点向主题姿势发送数据的速度:
average rate: 59.354 min: 0.005s max: 0.027s std dev: 0.00284s window: 58
在回归之前,您使用 ros2 pub --rate 1 将 /node 发布速率设置为 1hz。如果您使用 / 而不是 /pose 运行上述命令,您将看到统一的响应速率。
3.9 以上
此时,您应该有很多节点正在运行。不要忘记在每个终端上按 ctrl+c 来终止它们。
4. 总结
节点通过主题发布消息,其他节点通过订阅(主题)获取消息。在本课程中,您学习了如何通过命令行工具通过主题连接多个节点。现在,您应该对 ROS2 系统中的数据传输有了很好的了解。
5. 后续步骤
接下来,在了解 ROS2 服务课程中,您将了解 ROS 图中另一种类型的通信。
其他
主题是节点间信息交换的载体,通信可以是一对一、一对多、多对一。
我认为关键点:
ros2 topic list#查看话题 ros2 topic list -t#查看带有类型属性后缀的话题 ros2 topic echo <topic_name>#输出话题的内容 ros2 topic info <topic_name>##输出话题本身信息 ros2 interface show <type> #输出类型的信息结构 ros2 topic pub <topic_name> <msg_type> ''#给话题直接发布消息 ros2 topic hz <topic_name>#查看消息发布的速度
遇到了一个问题,小乌龟安装出现异常(键盘控制只能绕原点旋转,不能直线移动),导致里面的信息通讯的ros网络图复现失败。
我在等毕业证的十天里选修了这门课。室友问我,现在在线翻译这么厉害,为什么还在捣鼓它。我说我的目的是好好看看,搞懂它,自己试试。这是我能想到的最好的办法,能得到最好的结果,哪怕翻译得有点别扭,哈哈哈哈。
#####################
千里之行,始于足下
好记忆不如坏笔
如果觉得有所收获,请点赞、收藏。