ROS学习笔记(五)理解ROS Topics

1.Setup

1.1 运行一个roscore同时新开一个terminal

1.2 运行turtlesim节点

rosrun turtlesim turtlesim_node

1.3 turtle keyboard teleoperation

运行节点’turtle_teleop_key’

rosrun turtlesim turtle_teleop_key

然后你就可以用键盘控制这个乌龟了,注意,鼠标要点击一下最后运行的terminal确保新运行的node是active状态,不然乌龟是不会动的。

2.ROS 话题(Topics)
现在节点’turtlesim_node’和节点’turtle_teleop_key’在通过一个共同的topic通信,节点’turtle_teleop_key’收集我们敲击的按键信息,并把按键信息发布给topic,而节点’turtlesim_node’则是订阅了这个topic接收相关信息根据节点代码作出对应动作。这是一个很简单的节点通信过程。

2.1查看节点话题通信流程图
运行rqt_graph包里的 rqt_graph节点可以查看节点之间的通信流程图
要用这个节点的话,需要先下载这个rqt_graph包

sudo apt-get install ros-<distro>-rqt
sudo apt-get install ros-<distro>-rqt-common-plugins

< distro >代表你的ROS版本号
装好之后运行节点查看流程图
rosrun rqt_graph rqt_graph
输出下图(图像会有细微的差别,但都大同小异)
在这里插入图片描述
图像告诉我们有两个节点: /turtlesim/teleop_turtle,它们在通过话题 /turtle1/command_velocity通信。

到这里大家有没有一个直观的感受,我们可以暂时把package看成一个函数库,node看成这个库里面的功能函数,但节点和话题的魅力不止如此。

2.2 rostopic
rostopic工具方便我们得到话题的信息。通过rostopic -h打开帮助信息

2.3 介绍rostopic echo
rostopic echo可以用来查看topic所发布的数据,现在我使用这个命令看看。
运行rostopic echo /turtle1/cmd_vel,这时候选定之前节点‘turtle_teleop_key’那个terminal,然后控制乌龟走几步。这时rostopic echo 那个terminal实时输出了一些信息。这些信息就是我们刚刚在控制乌龟时topic所处理的速度信息。
在这里插入图片描述
这时候去到之前那个流程图窗口,刷新一下,会发现多了一个节点。这是因为我们在查看速度的时候实际上运行了一个这个新的节点订阅这个topic接受速度信息。

2.4 使用rostopic list
rostopic list输出详细的topic信息,包括相应的订阅节点和发布节点。命令行运行rostopic list -v后输出
在这里插入图片描述
这里大家可能会有一个问题,为啥刚刚的拓扑图只有一个topic,现在又多出了好几个topic,这是为什么?我的理解拓扑图可能只显示一部分可以自定义的简单的topic,那些系统底层的无法自定义的topic就没有显示出来,也没必要显示出来。简化输出。(但这只是本人猜测,需要查一下package的节点说明)
通过观察也可以发现’cmd_vel’这个topic在published topics和subscribed topic各出现了一次,而有的topic只出现了一次。因此可以发现topic可以同时被订阅或者发布,也可以只订阅或者发布(讲了个废话)。

3.ROS Messages
上面刚刚看到的topic发布的具体信息,其实也就是我们所说的ROS message。对于发布者(turtle_teleop_key) 和订阅者 (turtlesim_node)之间的通信,发布和订阅的信息格式必须是一致的。

3.1 rostopic type
可以使用rostopic type查看topic处理的信息的格式。rostopic type /turtle1/cmd_velrosmsg show geometry_msgs/Twist分别从不同层次查看了信息格式。自行运行看看效果

4 rostopic 一些用法
4.1 使用rostopic pub
我们可以用rostopic pub直接发送数据去topic,用法如下。

rostopic pub [topic] [msg_type] [args]

举个栗子,运行
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
发现小乌龟以2的线速度,1.8的角速度运动了一点。
这里面的-1代表只发送一条数据。
--的意思没怎么懂,原文直接copy过来(This option (double-dash) tells the option parser that none of the following arguments is an option. This is required in cases where your arguments have a leading dash -, like negative numbers.

–)

4.2 rostopic hz
输出topic发布数据的速率

rostopic hz [topic]

5.使用rqt_plot
画图工具

猜你喜欢

转载自blog.csdn.net/zhelijun/article/details/86091594