ROS机器人系统学习笔记(三)--------认识节点(Node)和话题(Topic)

    通过前两节的学习我们已经对ROS有了一个较为完善的理解,那么现在我们要对另外两个ROS基础的概念做一个剖析。

    在介绍今天的两个概念之前,我想给大家说一下ROS的大体的运行机制,让它不再显得那么神秘。

    从本质上来讲,ROS其实就是一个基于网络的数据流动控制器,它的核心roscore其实就相当于一个服务器(Server),主导着数据的流动,每一个程序都相当于一个客户(Client),客户之间需要通信,你可以联想生活中,人们的QQ通信,通信的时候,我们可以传图片,传文字,这些都是不同的消息。

这一段话便是ROS的真理,如果你能理解上面的一段话,那么理解ROS的节点和话题对你就不在话下。

一、话题(Topic)

    话题是ROS中一个比较好理解的一个概念,如果你使用过C++的话(没有用过也去学一下,很有用的。),你一定熟知一个概念----数据流,没错,Topic就和流很像,在每一个Topic中,流动着重要的数据,如果某一个程序(其实就是节点)想要了解关于这个话题的数据,就订阅它,然后,你就可以获取所感兴趣的数据据了。

在ROS中,有一些十分好用的命令可以在开发中帮助到你:

1、rostopic

    rostopic有很多的选项,如:

rostopic list 

    可以帮助你看到全局所有的Topic。

rostopic ping [topic]

    如果你用过ping这个命令就不难理解了,这个命令可以检测topic是否可达。

rostopic type [topic]

    这个命令十分有用,它可以让你看到这个Topic所发布的消息的类型。(你可以在这里尝试理解Message是什么。)

rostopic info [topic]

    这个命令可以详细显示这个话题的各种属性。

rostopic echo [topic]

    这又是一个十分重要的命令,这个命令可以使你在终端中打印Topic中的数据,十分方便于调试。

(注:以上命令中的 [topic] 都要换为相应的Topic,在Topic前不要忘记“/“。)


二、节点(Node)

    节点在ROS中就像我们平时使用的每一个程序一样,有着数据的输入和输出。在ROS中,我们可以使用命令来详细了解节点。

随便对一个节点使用命令rosnode info 即可查看节点的详细信息。

$ rosnode info /rosout

这样我们可以看到如下的结果:

------------------------------------------------------------------------
Node [/rosout]
Publications:
 * /rosout_agg [rosgraph_msgs/Log]

Subscriptions:
 * /rosout [unknown type]

Services:
 * /rosout/set_logger_level
 * /rosout/get_loggers

contacting node http://machine_name:54614/ ...
Pid: 5092

    上述的结果中描述了节点的发布的话题,以及话题中所包含信息的类型,还有这个节点所订阅(Subscribe)的话题(Topic),还包含着节点包含的服务。(至于什么是信息类型和服务,我们在以后会说明)

    这样,我们就可以深刻的理解ROS的节点,其实节点就是一个数据传输和处理的程序,你可以把ROS系统理解为一张巨大的网咯,在这个网络中我们有着众多的节点,网络中流动着数据。

你可能感兴趣的:(ROS)