美文网首页
ROS 计算图级,理解ROS 节点、话题

ROS 计算图级,理解ROS 节点、话题

作者: 李庆雪 | 来源:发表于2017-06-09 14:20 被阅读0次
    1. ROS 基本概念:

    计算图级-------是 ROS 处理数据的一种点对点的网络形式。程序运行时,所有进程及它们所进行的数据处理,将会通过一种点对点的网络形式表现出来,即通过节点、节点管理器、话题、服务等来进行表现。
    ROS 中的基本计算图级概念包括:节点、节点管理器、参数服务器、消息、服务、话题和包。这些概念以各种形式来提供数据。

    • 1.1 节点( Node )
      一个节点就是 ROS 功能包中的一个可执行文件,节点之间可以通过 ROS 客户端库(如roscpp 、 rospy )相互通信。一个机器人控制系统由许多节点组成,这些节点各司其职,如,一个节点控制激光距离传感器,一个节点控制轮子的马达,一个节点执行定位,一个节点执行路径规划,一个节点提供系统的整个视图 ......
    • 1.2 节点管理器( Master )
      节点管理器是 ROS 名称服务,能够帮助节点找到彼此。节点通过与节点管理器通信来报告他们的注册信息。值得注意的是,当这些节点和节点管理器通信时,它们可以接受其他注册节点的信息,并能保持通信正常。当这些注册信息改变时,节点管理器也会回调这些节点。所以,没有节点管理器,节点将不能相互找到,也不能进行消息交换或者调用服务。
    • 1.3 参数管理器( Parameter Server )
      是节点管理器的一部分。其允许数据通过在一个中心位置的关键词来存储。
    • 1.4 消息( Message )
      消息是一种 ROS 数据类型,节点之间通过消息来互相通信。
    • 1.5 话题( Topic )
      话题是用于识别消息的名称,节点可以发布消息到话题,也可以订阅话题以接收消息。一个话题可能对应有许多节点作为话题发布者和话题订阅者,当然,一个节点可以发布和订阅许多话题。一个节点对某一类型的数据感兴趣,它只需订阅相关话题即可。一般来说。话题发布者和话题订阅者不知道对方的存在。发布者将信息发布在一个全局的工作区内,当订阅者发现该信息是它所订阅的,就可以接收到这个信息。
    • 1.6 服务( Service )
      我们可以看出,发布 / 订阅模式是一种多对多的传输方式,显然这种传输方式不适用于请求 / 回复的交互方式。请求 / 回复交互方式经常被用于分布式系统中。请求服务通过 Service 来进行, Service 被定义为一对消息结构:一个用于请求,一个用于回复。一个客户通过发送请求信息并等待响应来使用服务。( ROS中的请求 / 回复交互方式好像是一个远程程序调用。)
    • 1.7 消息记录包( Bag )
      消息记录包是一种用于保存和回放 ROS 消息数据的格式。消息记录包是检索传感器数据的重要机制,这些数据虽然很难收集,但是对于发展和测试算法很有必要。
    2. 基本命令: roscore, rosnode, rosrun

    ros 命令的说明及参数可以通过 < 命令 > -h (或 --help )来查看
    例如:rosnode -h

    • 2.1 roscore
      在运行所有有关具体操作的 ROS 程序之前首先要运行该命令,然后打开新标签页运行其他 ROS 程序。
      roscore
    • 2.2 rosnode
      显示当前运行的 ROS 节点信息。
      列出活跃的节点:
    rosnode list
    rosnode info 命令返回的是关于一个特定节点的信息:
    rosnode info /rosout
    
    • 2.3 rosrun
      rosrun可以运行 package 中的可执行文件 , 不需要知道可执行文件的位置
      用法: rosrun [package_name] [node_name]
      运行 turtlesim 包中的节点 turtlesim_node :
      rosrun turtlesim turtlesim_node
      通过命令来改变节点名称为 my_turtle :
      rosrun turtlesim turtlesim_node __name:=my_turtle
      在新标签页中运行命令:
      rosrun turtlesim turtle_teleop_key
      需要注意的是,应选中 turtle_teleop_key 所在的终端窗口,即最后打开的新标签页,以确保键盘输入能够被捕获。
      在新的标签页用rosnode list命令查看此时运行的 ROS 节点 :
      rosnode list
      可以看到,除了节点 turtlesim ,现在又多出了节点 teleop_turtle 。
      可以用 rosnode ping 命令来测试节点:
      rosnode ping my_turtle
      总结:
    roscore= ros+core : master (provides name service for ROS) + rosout(stdout/stderr) +parameter server (parameter server will be introducedlater)
    rosnode = ros+node : ROS tool to get information about a node
    rosrun = ros+run : runs a node from a given package
    
    3. ROS Topic

    用键盘控制小海龟运动这一过程的通信机制是怎样的呢?其实,这两个节点是通过一个 ROS 话题( Topic )来相互通信的, turtle_teleop_key 在这个话题上发布键盘输入的的消息,而 turtlesim 则订阅该话题以接收该消息。下面通过 rqt 功能包和 rostopic 命令来查看相关信息:

    • 3.1 rqt 功能包
      通过 rqt_graph 来查看当前系统的运行情况。在新的标签页运行如下命令:
      rosrun rqt_graph rqt_graph

    如图所示,节点 turtlesim_node 和节点 turtle_teleop_key 正通过一个名为 /turtle1/cmd_vel 的话题来相互通信。
    除了使用 rqt_graph ,还可以用 rqt_plot 来实时显示一个发布到某个话题上的数据变化图形。这里我们将
    使用 rqt_plot 命令来绘制正在发布到 /turtle1/pose 话题上的数据变化图形。首先,在一个新终端中运行rqt_plot命令。
    rosrun rqt_plot rqt_plot
    在弹出的新窗口左上角的一个文本框里面可以添加需要绘制的话题。在里面输入/turtle1/pose/x 后按enter 键或点击 “ +”号按钮,并对/turtle1/pose/y 重复相同的过程。就会在图形中看到 turtle 的 x-y 位置坐标图。
    • 3.2 rostopic
      使用 rostopic 命令工具能获取有关 ROS 话题的信息。
      运行下面命令查看 rostopic 子命令:
      rostopic -h
      1, rostopic echo :显示某个话题上发布的数据。
      用法:rostopic echo [topic]
      rostopic echo /turtle1/cmd_vel
      此时终端没有任何数据,切换到 turtle_teleop_key 节点运行时所在的终端窗口,通过键盘方向键控制小海龟移动,然后再切换回原来的终端窗口。此时出现发布到话题上的数据。

    2, rostopic list :能够列出所有当前订阅和发布的话题。
    先看一下 rostopic list 子命令需要哪些参数。运行命令:
    rostopic list -h
    使用 verbose 选项,以列出相关话题的详细信息。运行命令:
    rostopic list -v
    显示了有关所发布和订阅的话题的详细信息,其中方括号中表示的是话题的类型。
    3,rostopic type :用来查看所发布话题的消息类型。
    用法: rostopic type [topic]运行如下命令:
    rostopic type /turtle1/cmd_vel
    上面的 geometry_msgs/Twist 即为话题 /turtle1/cmd_vel 的消息类型,这在执行命令 rostopic list -v 时
    也有所体现。
    下面用 rosmsg 命令来查看消息的详细情况:
    rosmsg show geometry_msgs/Twist

    4, 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]'```
    以上命令会发送一条消息给 turtlesim ( -1 表示命令只发布一次),这样小海龟就会以 2.0 大小的线速度和 1.8 大小的角速度开始移动。要想保持这个运动, turtle 需要一个 1Hz 稳定频率的命令流来保持移动状态。
    使用 `rostopic pub -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 来查看当前系统的运行情况,即在新的标签页,运行:
    `rosrun rqt_graph rqt_graph`
    ![](https://img.haomeiwen.com/i3846387/a746e2a910fe981b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    由上图可以看出, rostopic pub 发布消息到话题 /turtle1/cmd_vel , rostopic echo 从该话题接收消息输出到终端,所以此时我们可以在新的终端用 rostopic echo 命令查看不断发布到话题的数据。
    5, rostopic hz :命令可以用来查看数据发布的频率。
    用法: rostopic hz [topic]
    之前我们用 rostopic pub -r 命令发布一个 1HZ 的稳定命令流,现在我们用 rostopic hz 命令查看一下 :
    `rostopic hz /turtle1/cmd_vel`
    

    相关文章

      网友评论

          本文标题:ROS 计算图级,理解ROS 节点、话题

          本文链接:https://www.haomeiwen.com/subject/fcwxqxtx.html