ROS系统框架

ROS 是 Robot Operating System 的缩写,即 机器人操作系统。 

ROS实际上是一个面向机器人硬件场景的系统框架,可运行在Linux内核以及其他兼容POSIX接口的操作系统内核之上。   

作为一个操作系统的系统框架,ROS提供了一系列面向机器人场景应用的系统级服务,抽象了底层复杂的异构硬件资源,还提供了应用之间交互以及应用与服务之间交互的IPC机制

层次架构图如图:
 

ROS  可以分为 基础设施层通信层应用层

基础设施层 包括ROS中的Python、C++等运行环境、 ROS文件系统 与 ROS包管理机制等。

在基础设施层 之上运行了ROS的通信层,提供基础的ROS IPC 机制以及ROS数据分发服务(Data Distribution Service, DDS)等。

ROS 应用层是基于一个个节点所构成的计算图,这些节点可以使用ROS的通信层直接进行相互调用,或者通过对一些 话题(topic)  发布消息 或者 订阅消息 以进行间接通信。

ROS节点与计算图

ROS采用计算 图的形式 来组织各种服务。 每个服务构成一个节点,每个节点执行一个具体的计算处理(包括机器人中所需的感知、融合、规划与控制等)。

运行在ROS上的应用可以被表示成一个“图” 的关系结构,不同的节点表示不同的应用(它们既可以是信息接收者,也可以是信息发布者)。 ROS上常见的应用包括:接收、发布、处理来自传感器(sensor)的数据, 以及对处理过程进行控制的节点与计划节点等。

与微内核设计的思想类似,ROS同样将其系统框架分解为多个服务,不同的服务之间通过ROS提供的IPC进行通信。 这种 解耦式的架构 使得ROS易于部署,甚至可以部署在一个分布式系统上。

服务与动作

ROS每个组件的设计是 服务为中心 的: 一个服务接收一个请求,执行该请求,然后回复。  一个节点 可以向另一个提供服务的节点发送请求,然后等待一个结果。 服务的模型是一次性的同步通信,即当服务的请求和回复完成后,连接会被断开; 进行下一次交互必须再次建立连接。   一个节点还可以提供 动作(Action)。  动作和服务类似,主要的区别在于动作的假设是服务端处理请求的时间会很长,并且可能需要在处理的过程中就获取一些中途的返回值。 在实际的使用中,一般通过动作来让机器人执行相对复杂的任务。

话题

话题 的 方式是ROS中比较新的处理方式,是一类  单向的异步通信机制。 话题机制将通信的双方称为 发布者(publisher) 和 订阅者(subscriber)。 发布者节点首先需要向主节点(一个特殊的全局节点)注册一个话题, 之后该发布者会以消息的形式发布关于该话题的新内容。  在话题模式下,发布者和订阅者是多对多的关系,即单个节点可以成为多个话题的发布者,也可以成为多个话题的订阅者。

数据分发服务

ROS2.0引入了 数据分发服务(Data Distribution Service, DDS) 以支持实时性。  从架构的角度, DDS可以被看作一个系统中间件,处于ROS应用层和ROS基础设施层之间。  DDS提供了上面介绍的ROS基本通信接口和语义, 如话题方式的发布者和订阅者模型或服务类型的IPC等。   之所以将DDS分离出来,是为了对性能有重要影响的通信进行加速。 不同的硬件厂商可以针对自己的机器人环境实现DDS的中间件,只要最终这些DDS的实现能够满足对应的协议接口即可。这些DDS的实现是针对特定硬件进行的,因此可以进行针对性的优化。 

DDS内部可以利用共享内存的方式来传递本地数据。 在ROS2.0中, ROS会将数据交接给DDS层。 在DDS层,具体的DDS实现可以使用一些如共享内存的方式,在建立了连接的不同节点之间共享数据。 在传输后,可以直接将序列化后的数据放在共享区域中,这样可以极大地提升传输性能。

计算图架构与 ROS IPC

ROS系统框架的设计将计算任务组件化与服务化,形成独立的ROS节点; 各个节点通过ROS IPC(如话题、 服务、 动作等方式 )进行通信。  DDS的引入能够在支持多种通信方式的情况下,尽可能地优化底层通信性能。

ROS的官方文档地址:  ROS 2 Documentation — ROS 2 Documentation: Kilted documentation

### ROS系统框架结构及组成部分 #### 一、ROS文件系统级概述 ROS的文件系统级定义了其源代码在硬盘上的组织形式。这种层次化的架构旨在有效管理大量的节点、消息、服务、工具和库文件。其中,包(Package)是最基本的单元,用于封装节点、依赖库、数据集、配置文件等内容[^1]。 #### 二、ROS的核心部分(Main) ROS的核心部分由Willow Garage公司及其贡献者设计并维护,提供了分布式计算的基础工具以及整个系统的运行环境。这部分主要包括以下组件: - **roscore**: 这是ROS系统的心脏,负责初始化通信基础设施,包括参数服务器、主节点(master node),以及其他必要的进程。 - **rosmaster**: 提供名称注册和服务发现功能,使得各个节点能够相互定位并与之通信。 - **rosservice/rossrv**: 支持基于请求-响应模式的服务调用机制。 - **rospy/rosnode/rostime等客户端库**: 不同编程语言下的API接口集合,方便开发者创建自定义节点[^3]。 #### 三、ROS的扩展部分(Universe) 除了核心模块外,还有大量来自全球各地社区开发者的额外资源统称为“宇宙”(Universe),它们补充和完善了官方版本的功能。这些外部贡献可能涉及特定领域应用插件或是实验性质的新特性实现。 #### 四、ROS2体系框架简介 相较于传统版ROS, 新一代平台——即ROS2,在继承原有优点基础上进行了多项改进优化。它不仅重新审视了整体构架设计思路,还特别强调跨平台兼容性和实时性能表现等方面的能力提升。具体而言,可以从以下几个方面理解其变化与发展方向: - 微观层面关注单个进程内部工作机制细节调整; - 宏观视角下考虑大规模集群部署场景需求满足情况分析[^2]。 ```python import rospy from std_msgs.msg import String def talker(): pub = rospy.Publisher('chatter', String, queue_size=10) rospy.init_node('talker', anonymous=True) rate = rospy.Rate(10) # 10hz while not rospy.is_shutdown(): hello_str = "hello world %s" % rospy.get_time() rospy.loginfo(hello_str) pub.publish(hello_str) rate.sleep() if __name__ == '__main__': try: talker() except rospy.ROSInterruptException: pass ``` 以上是一个简单的Python脚本例子展示如何利用`rospy`库构建一个发布字符串消息到主题`'chatter'`中的节点实例。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值