ROS机器人操作系统

ROS(Robot Operating System)从2007年诞生至今,成为了适用于机器人的开源操作系统,经历过两个主要版本ROS1和ROS2。虽然被叫做操作系统,但是ROS跟Windows和Linux等操作系统不一样,本质只是一个中间件,不具备原生调度硬件的能力,更不满足实时性要求。

ROS优势

ROS机器人操作系统作为一个专为机器人软件开发而设计的软件平台,具有很多优势:

(1) 模块化

采用模块化的设计理念,将复杂的机器人软件分解为多个相互独立且可复用的模块,这些模块被称为节点。每个节点都是一个独立的进程,可以执行一些特定的功能,节点之间可以通过话题或服务来进行异步或同步的数据传输。开发者可以根据自己的需求,选择合适的节点来组合成一个完整的机器人应用,方便了代码维护更新以及模块之间的测试调试。

(2) 跨平台

支持Linux、Windows、Mac OS等主流的操作系统,以及ARM、x86、x64等常见的硬件架构,还可以支持多种机器人平台和应用功能,比如导航、视觉、语音、控制等。

(3) 开源

遵循开源协议可以免费获取和使用,鼓励用户贡献代码和反馈问题。这样不断地完善和改进,能够吸引更多的机器人研究者和开发者加入到ROS机器人操作系统的社区中来。

(4) 可扩展

具有很强的可扩展性,可以通过安装不同的包来增加新的功能和支持新的设备。包是最基本的组织单元,包含了相关的节点、库函数、配置文件、数据文件等。开发者可以根据自己的需求,选择合适的包安装到自己的工作空间中,或者创建自己的包来实现想要的功能。目前已经有了数千个可用的包,涵盖了各种各样的领域和主题。

ROS核心功能

ROS具有操作系统应有的服务,包括硬件抽象、底层设备控制、常用函数的实现、进程间消息传递以及包管理。

(1) 硬件抽象

提供了一种统一的方式来表示和访问不同类型和品牌的硬件设备,如传感器、执行器、摄像头等,这种方式被称为驱动(Driver)。它是一个特殊类型的节点,可以将硬件设备产生或接收的数据转换为标准化的消息格式,并通过话题或服务来发布或订阅。开发者不需要关心硬件设备的具体细节和差异,只需要使用相应的驱动节点就可以实现与硬件设备的交互。

(2) 底层设备控制

提供用于控制底层设备的库函数和工具,如串口通信、I2C通信、PWM控制等。可以帮助开发者实现对硬件设备的低级别控制,如发送或接收数据、设置或读取参数、调节或测量信号等。

(3) 常用函数的实现

提供用于实现常用功能的库函数和工具,如数学运算、线性代数、几何变换、图像处理、声音处理等。可以帮助开发者实现一些基本的或高级的功能,如计算矩阵、旋转向量、转换坐标系、滤波图像、合成语音等。

(4) 进程间消息传递

提供用于实现进程间通信的机制,它基于发布-订阅模式,使用话题或服务来传递数据。这种机制可以实现节点间的松耦合连接,同时也保证了数据的可靠性和实时性。

(5) 包管理

提供用于管理包的工具,被称为rosdep,rosdep可以自动检测和安装包所需的依赖项,包括其他包、库函数、系统软件等,可以避免开发者手动安装和配置依赖项,从而节省时间和精力。

ROS系统组成

(1) 节点Node

节点是ROS机器人操作系统中最基本的运行单元,它是一个独立的进程,可以执行一些特定的功能。节点可以使用不同的编程语言编写,如C++、Python、Java等,节点之间可以通过话题或服务来进行数据传输。

(2) 话题Topic

话题是一种用于实现异步通信的方式,它是一个命名的数据流,可以携带任意类型的消息。一个或多个节点可以发布数据到一个或多个节点订阅的话题上,话题之间可以使用不同的传输协议,如TCPROS或UDPROS。

(3) 服务Service

服务是一种用于实现同步通信的方式,它是一个命名的请求-响应对,可以携带任意类型的消息。一个节点可以请求数据或执行操作,而另一个节点可以提供数据或执行操作,服务之间只使用TCPROS协议。

(4) 动作Action

动作是一种用于实现长时间运行任务的方式,它是一个命名的目标-结果对,可以携带任意类型的消息。一个节点可以发送一个目标给另一个节点,并等待结果返回。同时另一个节点可以在执行任务过程中发送反馈给第一个节点,动作之间使用TCPROS协议。

(5) 参数服务器Parameter Server

参数服务器是一种用于存储和共享全局变量的方式,它是一个键值对数据库,可以存储任意类型的值。任何节点都可以读取或写入参数服务器中的值,参数服务器使用XML-RPC协议。

ROS系统工具

ROS机器人操作系统提供了一些用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数

(1) ROS Master

用于实现节点注册和发现的服务,它是一个单点故障,如果崩溃或丢失连接,整个系统将无法正常工作,ROS Master使用XML-RPC协议。

(2) roscore

用于启动ROS Master和其他基本节点的命令,它是运行任何ROS应用之前必须执行的命令。

(3) roslaunch

用于启动多个节点和设置参数的命令,它可以使用XML格式的配置文件来描述要启动的节点和参数。

(4) rostopic

用于查看和操作话题的命令,可以显示话题的列表、类型、大小、频率等信息,也可以发布或订阅话题上的数据。

(5) rosservice

用于查看和操作服务的命令,可以显示服务的列表、类型、定义等信息,也可以调用或提供服务上的数据。

(6) rosnode

用于查看和操作节点的命令,可以显示节点的列表、信息、连接等信息,也可以杀死或清理节点。

ROS1与ROS2

ROS系统有ROS1和ROS2两个版本。

(1)系统架构进行了颠覆性的变化

ROS1中所有节点都需要在节点管理器ROS Master的管理下进行工作,一旦Master出现问题,系统就面临宕机的风险,ROS2实现了真正的分布式,不再有Master这个角色,借助一种全新的通信框架DDS,为所有节点的通信提供可靠保障。

(2)软件API进行了重新设计

ROS1原有的接口已经无法满足需求,ROS2结合C++最新标准和Python3语言特性,设计了更具通用性的API,虽然导致原有ROS1的代码无法直接在ROS2中运行,但是尽量保留了类似的使用方法,同时提供了大量移植的说明。

(3)编译系统进行了升级

ROS1中使用的rosbuild和catkin问题诸多,尤其是针对代码较多的大项目以及Python编写的项目,编译、链接经常会出错,ROS2对这些问题也进行了优化,重新优化后的编译系统叫做ament和colcon

系统架构图

图片

在ROS1中,ROS通信依赖底层的TCP和UDP协议,而在ROS2中,通信协议更换成了更加复杂但也更加完善的DDS系统。

ROS1主要安装在Linux上,ROS2的可选项就很多了,Linux、windows、MacOS、RTOS都可以。

ROS2的DDS机制

ROS1基于TCP/UDP的通信系统,有延迟、丢数据、无法加密等问题。

ROS2采用了新的通信框架DDS(Data Distribution Service),提供了更高效、更可靠、更安全的通信质量。

图片

DDS其实是物联网中广泛应用的一种通信协议。DDS是一个国际标准,能够实现该标准的软件系统并不是唯一的,每个厂家都可以根据场景和性能需要设计不同的DDS方案。

ROS2设计了一个ROS Middleware,指定一个标准的接口,比如如何发数据,如何收数据,数据的各种属性如何配置,都定义好了,如果厂家想要接入ROS社区,就得按照这个标准写一个适配的接口,把自家的DDS给移植过来。

DDS是一个基于发布-订阅模式的中间件标准,它定义了一种分布式数据共享服务,可以实现不同设备和应用之间的数据交换,DDS具有以下一些特点:

(1)分布式

DDS没有中心化的管理者或代理,而是由每个参与者自主地发现和协商通信。可以避免单点故障和性能瓶颈,也提高了可扩展性和容错性。

(2)实时

DDS可以根据不同的应用需求,提供不同级别的传输质量选项,如可靠性、持久性、延迟等,保证数据在规定的时间内到达目标,满足实时性要求。

(3)安全

DDS支持多种安全机制,如加密、认证、授权等,可以保护数据在传输过程中不被窃听或篡改,并防止未经授权的访问或修改。

Fast-DDS平台

Fast-DDS平台基于DDS标准的开源实现,具有高性能、低延迟、高可扩展性等特点,是ROS2机器人操作系统默认使用的DDS实现。

Fast-DDS平台支持多种操作系统和硬件平台,如Linux、Windows、Mac OS、ARM、x86等,也支持多种编程语言和接口,如C++、Python、Java、C#等,还提供一些高级功能和工具,如安全插件、监控控制台、测试套件等。

Fast-DDS平台可以实现高效的数据传输和管理,满足不同的应用场景和需求;可以根据数据的类型、大小、频率等特征,自动选择最合适的传输协议和配置参数,如UDP、TCP、SHM等;可以根据网络的拓扑结构和状态,自动调整数据的路由和分发,以提高数据的可靠性和实时性;可以根据数据的重要性和敏感性,自动应用不同级别的安全策略,如加密、认证、授权等。

Fast-DDS平台是ROS2机器人操作系统的核心组件之一,为ROS2机器人操作系统提供稳定、高效、安全的通信基础。

基于ROS2的平台扩展案例

ROS2机器人操作系统作为一个开放和灵活的软件平台,可以与其他技术或平台进行集成和协作,以提供更多的功能和支持。以下是一些基于ROS2机器人操作系统的新兴技术或平台:

(1)微软Azure云服务

提供各种云计算服务的平台,如虚拟机、存储、数据库、分析、人工智能等。微软Azure云服务与ROS2机器人操作系统进行了深度集成,提供了一个名为Azure IoT Hub for ROS2的服务,它可以实现ROS2节点与云端服务之间的双向通信,提供了一些管理和监控功能,开发者可以利用云端资源来增强ROS2机器人应用的性能和功能。

(2)英特尔OpenVINO工具套件

提供各种视觉处理功能的平台,如图像分类、目标检测、人脸识别、姿态估计等。英特尔OpenVINO工具套件与ROS2机器人操作系统进行了兼容和优化,提供了一个名为ros2_openvino_toolkit的包,可以实现ROS2节点与OpenVINO模型之间的无缝集成,提供了一些示例和教程,开发者可以利用OpenVINO模型来增强ROS2机器人应用的视觉处理能力。

(3)亚马逊AWS RoboMaker

提供各种机器人开发服务的平台,如仿真、测试、部署、监控等。亚马逊AWS RoboMaker与ROS2机器人操作系统进行了完全支持,提供了一个名为AWS RoboMaker ROS2 Extension的服务,可以实现ROS2节点与AWS服务之间的简单连接,提供了一些工具和库函数,开发者可以利用AWS服务来增强ROS2机器人应用的开发和运行效率。 

ROS在智能汽车上应用

(1)智能驾驶用到的很多算法都能在ROS生态中找到已经成熟的代码

例如建立地图的算法,使用激光雷达或GPS定位算法,沿着地图规划路径算法,避开障碍物的算法,摄像头视觉处理算法等等,这些机器人导航所需的算法在ROS上是现成的,几乎都可以直接适用于智能驾驶汽车。

(2)ROS自带一套图形工具,可以方便地记录和可视化传感器捕获的数据,并以全面的方式表示车辆的状态。此外,它还提供了一种简单的方法来实现定制化的可视化需求。

(3)ROS2和AUTOSAR Adaptive都是中间件,AUTOSAR Adaptive中的通讯管理模块就加入了DDS的部分,并对DDS相应的功能安全和网络安全都作了定义和描述。

ROS机器人操作系统是一个非常强大和灵活的机器人软件平台,它可以为机器人软件开发提供一个统一和标准的解决方案,同时也可以与其他技术或平台进行集成和协作,以提供更多的功能和支持。

ROS有着丰富的辅助开发工具,包括可视化工具Rviz,仿真工具gazebo。

ROS有着庞大的开发者基础,支持的功能包也涵盖优化,控制,导航,视觉,AI等领域。

欢迎关注公众号“我想我思”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值