导图社区 ROS架构
ROS基础及应用中关于ROS基本架构的一些知识点,用于处理ROS中的同步通信,采用客户端/服务器模型,常用于数据量较小但强逻辑处理的数据交换。
编辑于2023-06-06 16:59:23ROS架构
ROS架构设计
OS层
依托于Linux系统
中间层
基于TCPROS/UDPROS的通信系统
ROS通信系统基于TCP/UDP网络进行了再次封装
实现了多种通信机制的数据传输
进程内的通信方法——Nodelet
为多进程通信提供一种更优化的数据传输方式
适合对数据传输实时性方面有较高要求的应用
提供了大量机器人开发相关的库
应用层
ROS master
管理者,负责管理整个系统的正常运行
机器人应用功能包
包内模块以节点为单元运行,以ROS输入输出作为接口
从系统实现角度看
文件系统
程序文件
计算图
程序
开源社区
ROS资源
计算图
从计算图角度来看
ROS系统软件的功能模块
以节点为单位独立运行
可以分布于多个相同或不同的主机中
系统运行时通过端对端的拓扑结构进行连接
节点
一些执行运算任务的进程
一个系统由多个节点组成,也称为“软件模块“””
节点关系图
进程就是图中节点
端对端的连接关系就是节点之间的连线
子主题
可以使用rqt_graph命令显示ros计算图
消息
节点之间最重要的通信机制 基于发布/订阅模型的消息通信
每一个消息都是一种严格的数据结构
支持标准数据类型(整形、浮点型、布尔型)
支持嵌套结构和数组
根据需求由开发者自主定义
话题
消息以一种发布/订阅(Publish/Subscribe)的方式传递
一个节点可以针对一个给定的话题(Topic)发布消息,称之为Talker/发布者
节点也可以关注某个话题并订阅特定类型的数据 (订阅者/Listener)
系统中可以同时有多个节点发布或者订阅同一个话题的消息
服务
双向的同步传输模式称为服务
基于客户端/服务器(Client/Server)模型
包括两个部分的通信数据类型
一个用于请求
一个用于应答
节点管理器
ROS节点管理器(ROS Master)
通过远程过程调用(RPC)提供登记列表和对其他计算图表的查找功能
帮助ROS节点之间相互查找、建立联系
为系统提供参数服务器,管理全局参数
文件系统
功能包
ros的基本单元
包含ROS节点、库、配置文件等
文件结构
config
配置文件
include
头文件
scripts
python
src
C++
launch
msg
srv
action
自定义的动作指令
CMakeLists.txt
编译器编译功能包的规则
package.xml
功能包清单‘
package.xml
记录功能包基本信息
名称、版本号、信息描述、作者信息、许可信息
<build_depend></build_depend>标签定义了功能包中代码编译所依赖的其他功能包
<run_depend></run_depend>标签定义了功能包中可执行程序运行时所依赖的其他功能包
针对功能包的创建、编译、修改、运行设计了一系列命令
元功能包
组织多个用于同一目的的功能包
元功能包清单
类似功能包清单
只包含一个package.xml元功能包清单文件
是将多个功能包整合成为一个逻辑上独立的功能包
不同在于其可能包含运行时需要的依赖功能包或者声明一些引用的标签
如<export> <metapackage/> </export>
元功能包不需要<build_depend>标签声明,只需要使用<run_depend>标签声明运行时依赖的功能包
消息类型
消息是ROS节点之间发布/订阅的通信信息
可以使用ROS提供的消息类型
也可以使用.msg文件在功能包的msg文件夹下自定义所需要的消息类型
服务类型
定义了ROS客户端/服务器通信模型下的请求与应答数据类型
可以使用ROS系统提供的服务类型
也可以使用.srv文件在功能包的srv文件夹中进行定义
代码
用来放置功能包节点源代码的文件夹
开源社区
发行版(Dirtribution)
一系列带有版本号、可以直接安装的功能包
软件源
ROS依赖于共享网络上的开源代码
不同组织机构可以开发活着共享自己的机器人软件
ROS wiki
记录ROS信息文档的主要论坛
邮件列表
ROS Answers
Blog
ROS的通信机制
分布式通信机制
ros核心
话题通信机制
使用最为频繁
两个节点
发布者Talker
订阅者Listener
两个节点分别发布订阅同一个话题,启动顺序没有强制要求
RPC
远程过程调用协议
Remote Rrocedure call
七步建立通信
Talker 注册
通过1234端口使用RPC向ROS Master 注册发布者的信息
包含所发布信息的话题名
Listener注册
同样通过RPC向ROS Master注册订阅者的信息,包含需要订阅的话题名
ROS Mater 进行信息匹配
根据Listener订阅信息从注册列表中进行查找
如果没找到匹配的发布者,则等待发布者加
如果找到了,则通过RPC向Listener发送Talker的RPC地址信息
Listener发送连接请求
通过RPC向Talker发送连接请求
传输订阅的话题名、消息类型、通信协议(TCP/UDP)
Tlaker确认连接请求
包含自身的TCP地址信息
使用RPC
Listener尝试与Talker建立网络连接
Talker向Listener发送话题消息数据
使用TCP
ROS Master
在节点建立连接过程中起到重要作用,但不参与节点之间最终数据传输
在节点建立连接后,可以关掉ROS Master
节点间数据传输不会受影响
其他节点无法加入这两个节点之间的网络
服务通信机制
是一种带有应答的通信机制
与话题通信相比,减少了Listener和Talker之间的RPC通信
五步建立通信
Talker注册
Listener注册
ROS Master 进行信息匹配
建立网络连接
Talker向Listener发送服务应答数据
参数管理机制
参数类似于ROS中的全局变量
不涉及TCP/UDP的通信
三步建立通信
Talker设置变量
使用RPC向ROS Master 发送参数设置数据,包括参数名和参数值
Listener查询参数值
ROS Master 向Listener发送参数值
话题与服务的区别
话题
基于发布/订阅模型的异步通信模式
将信息的产生和使用双方解耦
常用于不断更新的,含有较少逻辑处理的数据通信
服务
用于处理ROS中的同步通信
采用客户端/服务器模型
常用于数据量较小但强逻辑处理的数据交换