理解ROS的Topics
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解ROS的Topics相关的知识,希望对你有一定的参考价值。
1. 设置
(1) 运行roscore
(2) 在新的terminal运行turtlesim
$ rosrun turtlesim turtlesim_node
(3) 用键盘遥控turtle
$ rosrun turtlesim turtle_teleop_key
2. ROS Topics
2.1 turtle_teleop_key node 发布(publish) Topic,turtlesim_node node 订阅(subscribe) Topic,两者相互通信。
2.2 使用rqt_graph
(1)rqt_graph是rqt package的一部分,创建系统运行的动态图(dynamic graph)。
(2)rqt package的安装:
$ sudo apt-get install ros-<distro>-rqt $ sudo apt-get install ros-<distro>-rqt-common-plugins
(3)运行
$ rosrun rqt_graph rqt_graph
(4)结果
蓝色和绿色是Nodes,红色是Topic
2.3 介绍rostopic
(1)通过rostopic可以得到有关ROS topics的有关信息
$ rostopic bw echo find hz info list pub type
(2)通过help查询子命令
$ 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.4 使用rostopic echo可以显示top发布的数据
$ rostopic echo /turtle1/cmd_vel
若没看到东西说明没有数据发布,选中turtle_teleop_key的terminal,按键盘上的键盘键控制即可。
linear: x: 2.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0 --- linear: x: 2.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0 ---
此时再看rqt_graph,按左上角refresh键,这时会显示新的node
2.5 使用rostopic list 显示所有发布和被订阅的topics
(1)查看需要什么argument
$ rostopic list -h
(2)得到以下结果
Usage: rostopic list [/topic] Options: -h, --help show this help message and exit -b BAGFILE, --bag=BAGFILE list topics in .bag file -v, --verbose list full details about each topic -p list only publishers -s list only subscribers
(3)如需要详细信息verbose,输入
$ rostopic list -v
得到以下结果
Published topics: * /turtle1/color_sensor [turtlesim/Color] 1 publisher * /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher * /rosout [rosgraph_msgs/Log] 2 publishers * /rosout_agg [rosgraph_msgs/Log] 1 publisher * /turtle1/pose [turtlesim/Pose] 1 publisher Subscribed topics: * /turtle1/cmd_vel [geometry_msgs/Twist] 1 subscriber * /rosout [rosgraph_msgs/Log] 1 subscriber
3. ROS Message
3.1 关于topic的节点间通信通过发送节点间的ROS Message实现,发布者和订阅者需要发送和接受相同类型的message,topic type由message type定义,发送topic的message类型可通过rostopic type确定。
3.2 rostopic type使用方法
rostopic type [topic]
如:
$ rostopic type /turtle1/cmd_vel
得到:
geometry_msgs/Twist
3.3 使用rosmsg可以得到message的详细信息:
geometry_msgs/Vector3 linear float64 x float64 y float64 z geometry_msgs/Vector3 angular float64 x float64 y float64 z
4. 伴有message的rostopic
4.1 使用rostopic pub
用法:
rostopic pub [topibc] [msg_type] [args]
比如:
$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- ‘[2.0, 0.0, 0.0]‘ ‘[0.0, 0.0, 1.8]‘
解释:
rostopic pub:发布message关于指定的topic
-1: 只发布一条message然后退出
/turtle1/cmd_vel: 要发布的topic的名字
geometry_msgs/Twist: message的类型
--: 告诉选项解析器后面的东西不是可选的,有负数时一定要有这项
‘[2.0, 0.0, 0.0]‘ ‘[0.0, 0.0, 1.8]‘ :第一行向量是线性值,第二行是角度值,详见YAML syntax
乌龟停止了运动,因为需要steady stream of commands at 1Hz来保持运动。
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- ‘[2.0, 0.0, 0.0]‘ ‘[0.0, 0.0, -1.8]‘
在速度topic上发布了速度命令,速率为1Hz
这是再在rqt_graph上按左上角的refresh:
查看被发布的数据:
rostopic echo /turtle1/pose
4.2 使用rostopic hz来指导数据发布的速率:
用法:
rostopic hz [topic]
比如:
$ rostopic hz /turtle1/pose
结果:
subscribed to [/turtle1/pose] average rate: 59.354 min: 0.005s max: 0.027s std dev: 0.00284s window: 58 average rate: 59.459 min: 0.005s max: 0.027s std dev: 0.00271s window: 118 average rate: 59.539 min: 0.004s max: 0.030s std dev: 0.00339s window: 177 average rate: 59.492 min: 0.004s max: 0.030s std dev: 0.00380s window: 237 average rate: 59.463 min: 0.004s max: 0.030s std dev: 0.00380s window: 290
我们可以通过得到更深的信息:
$ rostopic type /turtle1/cmd_vel | rosmsg show
5. 使用rqt_plot绘制发布的数据
$ rosrun rqt_plot rqt_plot
/turtle1/pose/x
/turtle1/pose/y
/turtle1/pose/theta
以上是关于理解ROS的Topics的主要内容,如果未能解决你的问题,请参考以下文章