• ROS学习笔记6-理解主题


    本文来源于:http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics

    1. ROS主题
      假设turtlesim节点已经运行,打开一个新终端,使用如下命令运行键盘控制节点
      $ rosrun turtlesim turtle_teleop_key
      

      则终端会弹出来如下窗口:

       表示从键盘读取输入来控制小海龟移动。
      将焦点选中到该窗口,即可使用键盘上的方向键来移动小 海龟。

       下来我们来分析一下在这背后,发生了什么。

    2. 理解ROS主题(Topic)
      上面有两个节点:turtlesim和turtle_teleop_key,他们通过ROS主题来进行通信。其中,turtle_teleop_key将键盘点击信息发布到消息中,turtlesim节点通过订阅该主题来接收键盘点击信息。
      1.  使用rqt_graph
        ROS提供了可视化工具,rqt_graph来查看ROS系统中运行了什么东西。该工具属于rqt_graph包,我们可以通过如下命令安装该包。
        $ sudo apt-get install ros-<distro>-rqt
        $ sudo apt-get install ros-<distro>-rqt-common-plugins
        

        其中,distro为ROS发行版本,本教程中使用kinetic版本。
        然后在新终端中运行:

        $ rosrun rqt_graph rqt_graph
        

         则会出现如下界面:

         如果将鼠标放在/turtle1/cmd_vel上,则界面中两个椭圆会颜色会发生如下变化:

         其中,变为红色的主题(Topics),蓝色和绿色的为节点(Nodes),其中蓝色为该主题的发布节点,绿色为该主题的订阅节点。

      2. rostopic
        ROS提供了rostopic命令来查看主题相关的信息。
        rostopic有一些子命令,可以使用rostopic -h查看,如下所示:
      3.  rostopic echo
        其中,rostopic echo命令可以打印主题消息。语法如下:

        rostopic echo [topic]
        

        例如我们之前用rqt_graph查看到一个主题:/turtle1/cmd_vel,我们可以用如下命令来查看该中主题中的消息:

         如上图所示,运行了

        rostopic echo /turtle1/cmd_vel
        

         之后,将焦点中选中到键盘节点的窗口,点击方向键,则可以打印出该主题的消息内容。
        现在如果再运行rqt_graph,则显示如下:

         可以看出来多了一个节点来订阅/turtle1/cmd_vel主题,该节点即为rostopic echo节点。

      4. rostopic list
        rostopic list命令可以列出当前订阅或发布的主题,用法如下:

        若使用-v选项,则会列出来当前订阅和发布主题的完整信息。

      5. rostopic type
        节点之前通过订阅和发布主题来进行通信,而发送和接收的数据需要是同一类型的消息,通信的内容形式即为消息(Message)。
        这些消息的类型可以通过rostopic type命令查看,该命令用法为:
        rostopic type [topic]
        

        例如,我们可以查看/turtle1/cmd_vel中的消息类型:

        该主题的消息类型为:geometry_msgs/Twist。
        可以使用如下命令查看该消息类型的数据成员:

        spy@spy-pc:~$ 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
        

         可以看出来该消息类型包含两个向量Vector3类型的结构体,分别表示速度和角速度。

      6. rostopic pub
        rostopic pub命令可以直接发布ros主题的消息。该命令用法如下:
        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]'
        

         该命令表示发布类型为geometry_msgs/Twist的消息到/turtle1/cmd_vel主题,该消息参数为:'[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'表示速度为向前2.0,角速度为1.8,-1表示只发布一次消息。
        这组参数使用的是YAML语法,关于该语法的更多信息请参考YAML command line documentation.

        两个短杠--表示,后面的均是参数,不是选项,以防止解析器解析错误,例如含有符号的参数,如不加区分,解析器可能会按照选项来解析。
        在该命令下,小乌龟移动界面如下图所示:

         可以看出,小乌龟大约 移动了1/4段圆弧。

        为了使小乌龟持续移动,我们需要持续发布该消息,需要加入持续发布消息的频率参数,该参数可以使用-r选项指定,例如使用如下语句:
        rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
        

        就可以让乌龟持续转圈:

         再使用rqt_graph查看主题:

         可以看出来多了一个节点来发布/turtle1/cmd_vel主题到/turtlesim节点的。

      7. 消息数据的可视化
        1.  rostopic hz
          rostopic hz命令可以查看一个主题的发布频率,例如:
          rostopic hz /turtle1/pose
          subscribed to [/turtle1/pose]
          average rate: 62.485
          	min: 0.004s max: 0.028s std dev: 0.00250s window: 63
          average rate: 62.495
          	min: 0.004s max: 0.028s std dev: 0.00180s window: 125
          average rate: 62.489
          	min: 0.004s max: 0.028s std dev: 0.00149s window: 188
          average rate: 62.495
          	min: 0.002s max: 0.029s std dev: 0.00181s window: 250
          average rate: 62.500
          	min: 0.002s max: 0.029s std dev: 0.00175s window: 313
          average rate: 62.501
          	min: 0.002s max: 0.029s std dev: 0.00190s window: 375
          average rate: 62.501
          	min: 0.002s max: 0.029s std dev: 0.00176s window: 438
          average rate: 62.501
          	min: 0.002s max: 0.029s std dev: 0.00166s window: 501
          average rate: 62.501
          	min: 0.002s max: 0.029s std dev: 0.00165s window: 563
          average rate: 62.502
          	min: 0.002s max: 0.029s std dev: 0.00175s window: 626
          average rate: 62.498
          	min: 0.002s max: 0.029s std dev: 0.00178s window: 688
          average rate: 62.501
          	min: 0.002s max: 0.029s std dev: 0.00171s window: 751
          average rate: 62.498
          	min: 0.002s max: 0.029s std dev: 0.00165s window: 813
          average rate: 62.501
          	min: 0.002s max: 0.029s std dev: 0.00159s window: 876
          average rate: 62.500
          	min: 0.002s max: 0.029s std dev: 0.00158s window: 938
          average rate: 62.499
          	min: 0.002s max: 0.029s std dev: 0.00153s window: 1001
          average rate: 62.499
          	min: 0.002s max: 0.029s std dev: 0.00149s window: 1064
          average rate: 62.500
          	min: 0.002s max: 0.029s std dev: 0.00147s window: 1126
          average rate: 62.499
          	min: 0.001s max: 0.032s std dev: 0.00161s window: 1189
          average rate: 62.499
          	min: 0.001s max: 0.032s std dev: 0.00162s window: 1251
          average rate: 62.499
          	min: 0.001s max: 0.032s std dev: 0.00159s window: 1314
          average rate: 62.501
          	min: 0.001s max: 0.032s std dev: 0.00155s window: 1376
          average rate: 62.500
          	min: 0.001s max: 0.032s std dev: 0.00152s window: 1439
          average rate: 62.500
          	min: 0.001s max: 0.032s std dev: 0.00149s window: 1501
          average rate: 62.500
          	min: 0.001s max: 0.032s std dev: 0.00147s window: 1564
          average rate: 62.500
          	min: 0.001s max: 0.032s std dev: 0.00145s window: 1627
          average rate: 62.499
          	min: 0.001s max: 0.032s std dev: 0.00142s window: 1689
          average rate: 62.500
          	min: 0.001s max: 0.032s std dev: 0.00140s window: 1752
          average rate: 62.444
          	min: 0.001s max: 0.041s std dev: 0.00155s window: 1813
          

          可以看出,turtlesim节点发布的/turtle1/pose主题频率约为62Hz,并且给出了统计特性,最大值,最小值和方差。

        2. rqt_plot
          该命令会把消息数据绘图:
          rosrun rqt_plot rqt_plot
          

           会弹出rqt_plot的界面,然后在界面中Topic后面的文本框中输入主题名,例如输入:/turtle1/pose然后就会显示/turtle1/pose主题中的消息数据曲线。


            
  • 相关阅读:
    [note]抽象类和接口的相同点和不同点
    百度竞价门再跟踪:违规医疗广告数量仍大幅增加
    获取拼音的第一个字母的方法
    一个分页存储过程
    正则表达式(Regular Expressions)
    四个故事
    Oracle 常用
    我很喜欢的一个[帖子]:从现在起,我开始还债。
    DataGrid 中的 HyperLinkColumn (可以携带多个Get参数)
    100 statements in English.
  • 原文地址:https://www.cnblogs.com/spyplus/p/11518480.html
Copyright © 2020-2023  润新知