当前位置:网站首页>ROS2——ROS2对比ROS1(二)

ROS2——ROS2对比ROS1(二)

2022-07-05 06:35:00 我与nano

ROS2机器人操作系统


前言

在这里插入图片描述

一、ROS1的局限性

ROS最早的设计目标就是开发这样一款PR2家庭服务机器人,这款机器人绝大部分时间都是独立工作,为了让他具备充足的能力:

它搭载了工作站级别的计算平台和各种先进的通信设备,不用担忧算力不够,有足够的实力支持各种复杂的实时运算和处理;
由于是单兵作战,通信绝大部分都自己内部完成,那就可以用有线连接,保证了良好的网络连接,没有丢数据或者黑客入侵的风险;
这台机器人最终虽然小批量生产,但是由于高昂的成本和售价,也只能用于学术研究。
在这里插入图片描述
随着ROS的普及,应用ROS的机器人类型已经和PR2机器人有了天翻地覆的问题,也并不具备PR2这样的条件,那原本针对PR2设计的软件框架,就会出现一些问题,比如:

要在资源有限的嵌入式系统中运行;
要在有干扰的地方保证通信的可靠性;
要做成产品走向市场,甚至用在自动驾驶汽车和航天机器人上。
类似的问题不断涌现,致使更加适合各种机器人应用的新一代ROS诞生了,也就是——ROS2。

二、全新的ROS2

ROS2怀揣变革智能机器人时代的历史使命,在设计之初,就考虑到要满足各种各样机器人应用的需求。
在这里插入图片描述
多机器人系统:未来机器人一定不会是独立的个体,机器人和机器人之间也需要通信和协作,ROS2为多机器人系统的应用提供了标准方法和通信机制。

跨平台:机器人应用场景不同,使用的控制平台也会有很大差异,比如自动驾驶汽车中的算力性能肯定比AMR机器人强很多,为了让所有机器人都可以运行ROS2,ROS2可以跨平台运行于Linux、Windows、MacOS、RTOS,甚至是没有任何系统的微控制器(MCU)上,这样我们就不用纠结自己的控制器能不能用ROS了。

实时性:机器人运动控制和很多行为策略要求机器人具备实时性,比如机器人要可靠得在100ms内发现前方的行人,或者稳定的在1ms周期内完成运动学、动力学的解算,ROS2为类似这样的实时性需求提供了基本保障。

网络连接:无论在怎样的网络环境下,ROS2都可以尽量保障机器人大量数据的完整性和安全性,比如在wifi信号不好的时候数据也要尽力发送过去,在有黑客入侵风险的场景下要对数据进行加密解密。

产品化:,大量机器人已经走向我们的生活,未来还会越来越多,ROS2不仅可以用于机器人研发阶段,还可以直接搭载在产品中,走向消费市场,这对ROS2的稳定性、强壮性也提除了巨大挑战。

项目管理:机器人开发是一个复杂的系统工程,设计、开发、调试、测试、部署等全流程的项目管理工具和机制,也会在ROS2中体现,更方便我们去开发一款机器人。

要满足这些需求,ROS2的设计和开发工作并不简单,相对手机这样标准化的产品,Android系统也可以尽量做到标准化,但是机器人课时千差万别,如何能够适合尽量多的机器人,这可能远比开发一个手机系统或者电脑系统更加复杂。
ROS开发者面对的选择有两个,第一个是在ROS1的架构之上,进行修改和优化,类似一个盖好的房子,我们把它打成毛坯房,重新装修翻新一下,但肯定会受制于原本建筑的格局,长远来看并不是最佳选择,他们最终选择了第二种方案,那就是推倒重来。

所以ROS2是一个全新的机器人操作系统,在借鉴ROS1成功经验的基础上,对系统架构和软件代码全部进行了重新设计和实现。与ROS1相比,体现在以下几点:
在这里插入图片描述

三、ROS2 vs ROS1

在这里插入图片描述
在这张图中,左侧是ROS1,右侧是ROS2,大家注意看两者最明显的变化,那就是Master。
在ROS1中,应用层里Master这个节点管理器的角色至关重要,所有节点都得听它指挥,类似是一个公司的CEO,有且只有一个,如果这个CEO突然消失,公司肯定会成一团乱麻。ROS2把这个最不稳定的角色请走了,节点可以通过另外一套discovery——自发现机制,找到彼此,从而建立稳定的通信连接。
中间层是ROS封装好的标准通信接口,我们写程序的时候,会频繁和这些通信接口打交道,比如发布一个图像的数据,接收一个雷达的信息,客户端库会再调用底层复杂的驱动和通信协议,让我们的开发变得更加简单明了。
在ROS1中,ROS通信依赖底层的TCP和UDP协议,而在ROS2中,通信协议更换成了更加复杂但也更加完善的DDS系统。
如果是在进程内需要进行大量数据的通信,ROS1和ROS2都提供了基于共享内存的通信方法,只不过名字不太一样而已。
最下边是系统层,也就是可以将ROS安装在哪些操作系统上,ROS1主要安装在Linux上,ROS2的可选项就很多了,Linux、windows、MacOS、RTOS都可以。

ROS2相比ROS1最大的变化,除了省略了Master之外,应该就是通信系统的变化了。ROS1中基于TCP/UDP的通信系统,频繁诟病于延迟、丢数据、无法加密等问题,ROS2中的DDS在通信层面的功能就丰富多了。

DDS其实是物联网中广泛应用的一种通信协议,类似于我们常听说的5G通信一样,DDS是一个国际标准,能够实现该标准的软件系统并不是唯一的,所以我们可以选择多个厂家提供的DDS系统,比如这里的OpenSplice、FastRTPS,还有更多厂家提供的,每一家的性能不同,适用的场景也不同。
在这里插入图片描述
在这里插入图片描述

四、操作方式

在这里插入图片描述
总体而言,ROS2会用到更多面向对象的实现方法和语言特性,从编程语言的角度来讲,难度确实会提高一些,不过当我们迈过这道坎之后,就会发现我们写的程序会更具备可读性和可移植性,也会更接接近真实企业中机器人软件开发的过程。
在这里插入图片描述
ROS1中的命令行相对分散,每一个功能都是一个独立的命令,比如rosrun启动某一个节点,rostopic控制话题相关的功能。

ROS2对命令行做了大幅度的集成,所有命令都集成在一个ros2的主命令中,比如ros2 run,表示启动某一个节点,ros2 topic表示话题相关的功能。

总结

节点干掉了Master
通信换成了DDS
核心概念没变化
编程难度有上升

原网站

版权声明
本文为[我与nano]所创,转载请带上原文链接,感谢
https://qichenxi.blog.csdn.net/article/details/125556823