1、ROS的三个概念级别
文件系统级别(filesystem level),计算图级别(computation graph level)和社区级别(community level)。
1.1、文件系统级别
ros的内部结构、文件结构和所需的核心文件都在这一层中,一般的文件夹结构是:
工作空间文件夹(workspace)->源文件空间文件夹(src)、编译空间文件夹(build)和开发空间文件夹(devel);
源文件空间文件夹再进一步放置功能包。
1.2、计算图级别
主要中进程中节点之间的通信,ROS创建了一个连接所有进程的网络,通过这个网络节点之间完成交互,获取其他节点发布的消息。围绕计算图级别和节点有这些内容:节点、节点管理器、参数服务器、消息、服务、主题(话题)、消息记录包。
节点:是ROS系统的核心,节点是用C++或Python编写的程序,用来执行任务或者进程。ros中的节点表示一个发送和接收消息的软件模块。
节点管理器:用来管理节点的器件。roscore是一个向节点提供连接信息,以便节点间可以互相传递信息的服务程序。每个节点都会在启动时候连接到roscore进行注册该节点发布和订阅的消息。所以roscore不可缺少的。在ros的一个节点启动时候,会出现一个名为ROS_MASTER_URI的环境变量。这个环境变量包含了一个格式为http://hostname:11311/的字符串。
消息:节点之间通过消息进行通信,这些消息包含一个节点发送给其他节点的信息数据,消息类型有ROS标准类型和基于标准信息开发的自定义类型两种。
主题(话题):之节点发布的消息的去处,节点每一条消息都要发布到主题,一个节点a发布消息数据,就说该节点a向主题发布消息。其他节点可以订阅节点a发布的主题,以此来接受a的消息。所以节点之间的通信,是主题之间的发布和订阅实现的。所以使用rqt_graph工具会看到节点之间的通信机制:节点(主题)节点。蓝色和绿色为节点,中间的/turtle1/cmd_vel是主题。
在查看消息类型的时候,可以使用工具:rostopic type topicname;查看类型的内部结构可以使用:rosmsg show typename。节点通过主题与另外一个节点通信是间接实现的,然而直接与节点通信不能使用主题实现,需要使用服务。
服务:名称唯一,由用户开发,节点不提供标准服务,如果你想获得某个节点的请求和应答,即直接与某个节点交互,只能使用服务。只有节点有提供服务,这样才能进行请求和获取应答。一个节点无法提供某个服务时候,通过使用ROS客户端编写代码就可以与它通信。查看一个节点提供的服务可使用命令工具:rosnode info nodename,输出信息中,services部分就是该节点具有的服务。
直接与服务交互,可使用命令行工具:rosservice call servicename ,例如:rosservice call /clear,这个时候小海龟的运动轨迹就会被清除。
1.3、开源社区级:主要是指ROS资源的获取和分享。通过独立的网络社区,我们可以共享和获取知识、算法和代码。
请回答一下几个问题:
1、ros的节点使用通俗易懂的语言描述?
2、ros中的边代表什么?
3、ros中的三个概念级别,并且表达每个概念级别的具体内容?
…