Advertisement

ROS学习笔记五:理解ROS topics_rostopic hz 中min max

阅读量:

我们可以运行一个例程,然后通过键盘遥控操作turtle运行:

复制代码
    rosrun turtlesim_teleop_key

然后就可以通过方向键来启动小海龟运行了。下面让我们深入分析屏幕背后发生的程序逻辑和算法流程的具体执行过程。

ROS topics

上述程序中涉及两个Node:turtlesim_node与node turtle_teleop_key之间通过一个ROS topic实现了数据传输功能。其中,turtle_teleop_key node负责将关键进程发布到其指定的topic上,而turtlesim_node node则注册以接收来自同一topic的关键信息。此外,可以通过rqt_graph这一工具直观展示各个Node及其相关主题之间的运行状态及其关联情况。

使用rqt_graph

rqt_graph组件是rqt软件包的一部分,并负责创建系统中运行节点与主题之间的动态关系图。操作命令:

复制代码
    rosrun rqt_graph rqt_graph

进而能够观察到类似如下的关系图,在此基础之上可以看出节点turtle_teleop_key与节点turtlesim_node之间在turtle1/cmd_vel主题上展开通信过程。

这里写图片描述
使用rostopic

该功能使我们能够访问ROS主题的相关信息。使用rostopic -h可以列出所有可用的命令:

复制代码
    Commands:
    rostopic bw display bandwidth used by topic
    rostopic delay  display delay of topic from timestamp in header
    rostopic echo   print messages to screen
    rostopic find   find topics by type
    rostopic hz display publishing rate of topic    
    rostopic info   print information about active topic
    rostopic list   list active topics
    rostopic pub    publish data to topic
    rostopic type   print topic type
使用rostopic echo

rostopic echo显示发布在一个主题上的数据。

复制代码
    rostopic echo [topic]

当前可用命令可调用由turtle_teleop_key发布的command_velocity数据信息

复制代码
    rostopic echo /turtle1/cmd/vel

执行此命令后,在屏幕上将不会显示任何内容。这是因为该主题下尚未发布过任何数据。通过按下方向键操作可使turtle_teleop_key节点在此主题上发布数据;此时在当前窗口应会显示相关信息:

复制代码
     rostopic echo /turtle1/cmd\_vel 
    linear: 
     x: -2.0
     y: 0.0
     z: 0.0
    angular: 
     x: 0.0
     y: 0.0
     z: 0.0
    ---
    linear: 
     x: 0.0
     y: 0.0
     z: 0.0
    angular: 
     x: 0.0
     y: 0.0
     z: -2.0

回头再观察一下rqt_graph中的关系图时,发现了新增的一个订阅节点,并解释道:这个订阅节点主要用于展示topic数据。

通过命令列出节点:

复制代码
    rosnode list
    /rosout
    /rostopic_3763_1472092089570
    /rqt_gui_py_node_3827
    /teleop_turtle
    /turtlesim
使用rostopic list

rostopic list命令显示了当前被订阅和被发布的主题列表。

复制代码
    rostopic list
    /rosout
    /rosout_agg
    /statistics
    /turtle1/cmd_vel
    /turtle1/color_sensor
    /turtle1/pose

ROS Messages

利用不同节点间的ROS消息传递完成数据通信任务;确保各参与方使用的数据类型的统一性;由此可知,主题中的数据类型取决于其发布者的信息类别;该代码块用于展示特定主题的信息分类方式

使用rostopic type

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

目前我们已经明确了turtlesim所需的数据类型是什么。因此我们可以向我们的小海龟发送相应的指令。

rostopic continued

学习完ROS Messages之后,下面来学习一下rostopic和messages。

使用rostopic pub

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]'

实际上,在这种情况下,默认的速度参数之间确实只能用逗号分隔。该命令指示小海龟按照线速度2和角速度1.8进行移动轨迹的设计,默认运行时长为3秒,并在附图中进行了详细展示。

通过加入选项-r则可以一直向topic发布数据

复制代码
    rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0,0.0,0.0]' '[0.0,0.0,1]'

再查看rqt_graph的状态变化情况,在其中的rostopic pub节点持续与rostopic echo节点以及turtlesim节点进行了通信。

使用rostopic hz

rostopic hz返回数据发布的速率。

复制代码
    rostopic hz [topic]

利用该命令查看turtlesim发布/turtle1/pose的速度

复制代码
    rostopic hz /turtle1/pose
    subscribed to [/turtle1/pose]
    average rate: 62.502
    min: 0.016s max: 0.016s std dev: 0.00006s window: 60
    average rate: 62.501
    min: 0.016s max: 0.016s std dev: 0.00005s window: 123
    average rate: 62.498
    min: 0.016s max: 0.016s std dev: 0.00005s window: 185
使用rqt_plot

rqt_plot作为rqt软件包的一个组件存在,并且能够实现对发布至特定主题的数据进行实时呈现的能力

复制代码
    rosrun rqt_plot rqt_plot

在输入框中输入要绘制的主题名称,选择即可。

总结

本节内容较为丰富,在了解关于 Rosa 主题(topics)、节点(nodes)以及消息(messages)之间的关系之前,请首先掌握这一基本概念的核心要素。 Rosa 主题被视为在节点之间起到消息中转作用的重要基础设施,在这个过程中它起到了枢纽的作用地位。 消息被认为是节点用来接收和发送数据的主要载体,在 Rosa 系统中扮演着关键角色,并且与主题紧密相关联。 消息类型的统一性对于确保不同 Rosa 节点间的有效沟通至关重要——只有当两个 Rosa 节点试图建立联系时,并且其中一端会将消息发布到指定的主题上时——另一端会通过订阅该主题来获取消息——这种机制能够确保双方共享的信息具有相同的类型特征——而这些信息类型的确定性是由主题本身所决定的——为了更好地了解某个主题所涉及的具体数据格式与类型信息,请使用 Rosa 命令 rostopic type 来获取详细说明

全部评论 (0)

还没有任何评论哟~