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

1.Setup

1.1 打开一个terminal,运行一个roscore

1.2 新开一个terminal运行turtlesim节点

rosrun turtlesim turtlesim_node

1.3 新开一个terminal,运行turtle keyboard 监听节点

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通信。

2.2 rostopic

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

rostopic bw     display bandwidth used by topic
rostopic echo   print messages to screen
rostopic hz     display publishing rate of topic    
rostopic list   print information about active topics
rostopic pub    publish data to topic
rostopic type   print topic type

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分别从不同层次查看了信息格式。我们先运行rostopic type /turtle1/cmd_vel 查看topic的类型(即该topic发布的message type是在哪个文件里定义的),得到输出:

geometry_msgs/Twist

然后运行rosmsg show geometry_msgs/Twist查看message的具体定义,得到输出:

geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

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.

–)

打印话题信息

rostopic echi [topic]

4.2 rostopic hz

输出topic发布数据的速率

rostopic hz [topic]

5.使用rqt_plot

rosrun rqt_plot rqt_plot

启动画图工具 ,在画图工具中选择对应的话题in信息可以把数据画出来,这里不再赘述。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值