ros机器人编程(「ROS2 foxy」 EP16: 机器人编程之topic - 命令行演示)

在之前的系列中,我们了解了ros2里node及可视化界面工具rqt的使用。默认大家已经根据我在头条号"DG数据圈"中的教程,搭建好了ROS2开发环境「ROS2 foxy」 EP3: CLI Tools - 配置机器人操作系统环境。 https://www.toutiao.com/article/7088564348058075683/

在上一节中,我们打开了模拟器界面,激活了键盘控制,也展示了图像化node的工具: 「ROS2 foxy」 EP14: 机器人编程之nodes与rqt - 命令行演示 https://www.toutiao.com/article/7103072978652561959/?log_from=f6e29fae61a188_1653828137215

这一节,我们具体看看topic是如何工作的。简而言之,可以把它理解为ROS2里面不同node之间传递的消息。



ROS2: Topic消息的传递

1) 列出已有的topic

我们可以通过以下的指令来显示当前ROS2环境中的topics:

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]

2) 查看消息类型的结构

以/turtle1/cmd_vel [geometry_msgs/msg/Twist] 为例,之前在头条号"DG数据圈"中有讲过,键盘控制与模拟界面之间,是通过这个消息通讯的, []中代表的是消息类型。你可以通过以下指令查看此类消息的结构, 比如:

ros2 interface show geometry_msgs/msg/Twist

结果是, 它是关于速度在自由空间上的描述,包括线性及角度。

# This expresses velocity in free space broken into its linear and angular parts. Vector3 linear Vector3 angular

3)查看topic的信息

你也可以查看该topic的信息:

ros2 topic info /turtle1/cmd_vel

结果是:

Type: geometry_msgs/msg/Twist Publisher count: 1 Subscription count: 1

4)列出topic消息的值

我们可以在一个terminal中,输入以下指令,监听发送到模拟海龟的topic值:

ros2 topic echo /turtle1/cmd_vel

这时并不会有输出结果,因为键盘还没有发出指令。

我们点击那个键盘控制的terminal,然后按相应按钮控制海龟移动,这时,被接收到的topic就会被显示出来了,比如:

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

5)发送topic,让海龟画一个圆。

如果你还记得我在头条号"DG数据圈"之前发表的系列文章,「ROS2 foxy」 EP11: 两行指令,让模拟机器人画了一个圆,https://www.toutiao.com/article/7093248111711158821/?log_from=0a92c04b3debc8_1653829738446

ros机器人

在那一节中,我们就是通过发送一个topic,让海龟画了一个圆。

6) 最后,通过使用rqt,选择Nodes/Topics (active), 并反选hide里面的选择框,我们会看到以下很详细的nodes与message的关系图。



ROS2: rqt,nodes与topics



参考资料:

https://docs.ros.org/en/foxy/Tutorials.html

您可以还会对下面的文章感兴趣:

使用微信扫描二维码后

点击右上角发送给好友