这个教程介绍ROS的主题,包括使用rostopic和rqt_plot命令行工具。
在一个新的终端中通过roecore来启动ROS:
$ roscore任何时候只能有一个roscore在运行。
这个教程我们任然使用turtlesim来做演示。在一个新终端中:
$ rosrun turtlesim turtlesim_node通过turtle_teleop_key节点使用键盘控制小乌龟
$ rosrun turtlesim turtle_teleop_key现在,我们就可以使用键盘来控制小乌龟了。 这背后是如何实现的?我们看下面:
上面我们使用rosrun运行了两个节点 turtlesim_node和turtle_teleop_key,它们通过主题传递传递信息。 turtle_teleop_key发布键盘信息到一个主题上,turtlesim_node订阅了该主题,我们使用rqt_graph来可视化的查看节点和它们用于通信的主题。
rqt_graph为在系统上运行的节点和主题等信息创建一个动态的图,rqt_graph是rqt包的一部分。可以通过如下方法安装:
$ sudo apt-get install ros-<distor>-rqt $ sudo apt-get install ros-<distor>-rqt-common-plugins在一个新的终端中:
$ rosrun rqt_graph rqt_graph你可以看到如下图: 其中椭圆形表示节点; 箭头表示主题,方向指向订阅者,另一端是发布者。
rostopic工具能过获得主题的信息。可以使用-h选项获得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 typerostopic echo显示发布到主题上的数据。
$ rostopic echo ROS_TOPIC这时,可以通过刷新rqt_graph可以查看新的图,会发现rostopic echo也订阅了该主题。
rostopic list返回一个当前所有被订阅和发布主题的列表。 可以通过-h选项详细的列出可用参数:
$ rostopic list -h 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节点通过主题通信时,在主题上发布或订阅主题上的消息。通信双方必须发布或订阅相同类型的消息,这就意味着,一个主题的类型是由发布到该主题上的消息类型决定的。发送到主题上的消息类型可以由rostopic type工具来查看。
例如:
$ rostopic type /turtle1/cmd_vel //返回: geometry_msgs/Twist可以使用rosmsg 工具来查看更详细的信息:
$ rosmsg show geometry_msgs/Twist //返回: geometry_msgs/Vector3 linear float64 x float64 y float64 z geometry_msgs/Vector3 angular float64 x float64 y float64 z上面我们已经学习了ROS的messages,下面我们结合messages使用rostopic。
rostopic pub 可以在主题上发布消息: 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]'rostopic hz报告主题上消息发布的频率:
rostopic hz [topic]rqt_plot显示主题上随时间变化的数据: 首先我们运行rqt_plot:
$ rosrun rqt_plot rqt_plot会有如下UI显示: