当前位置:网站首页>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
核心概念没变化
编程难度有上升
边栏推荐
- Database mysql all
- Inclusion exclusion principle acwing 890 Divisible number
- How to answer when you encounter a jet on CSDN?
- 2022-5-the fourth week daily
- Vant Weapp SwipeCell設置多個按鈕
- Financial risk control practice -- feature derivation based on time series
- Use the Paping tool to detect TCP port connectivity
- 扫盲-以太网MII接口类型大全-MII、RMII、SMII、GMII、RGMII、SGMII、XGMII、XAUI、RXAUI
- H5 module suspension drag effect
- [QT] QT multithreading development qthread
猜你喜欢
[algorithm post interview] interview questions of a small factory
Sum of two numbers, the numbers in the array are converted to decimal, added, and output inversely
2.Oracle-数据文件的添加及管理
1.手动创建Oracle数据库
2. Addition and management of Oracle data files
.net core踩坑实践
Adg5412fbruz-rl7 applies dual power analog switch and multiplexer IC
All English in the code
1. Create Oracle database manually
Qt项目中的日志库log4qt使用
随机推荐
La redirection de l'applet Wechat ne déclenche pas onload
Preemption of CFS scheduling
[tf] Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initial
时间很快,请多做有意义的事情
在新线程中使用Handler
MySQL (UDF authorization)
Dataframe (1): introduction and creation of dataframe
Design specification for mobile folding screen
The route of wechat applet jumps again without triggering onload
Orin installs CUDA environment
Inclusion exclusion principle acwing 890 Divisible number
.net core踩坑实践
Adg5412fbruz-rl7 applies dual power analog switch and multiplexer IC
6-2 sequence table operation set
Financial risk control practice -- feature derivation based on time series
使用paping工具进行tcp端口连通性检测
*P++, (*p) + +, * (p++) differences
UIO driven framework
【高德地图POI踩坑】AMap.PlaceSearch无法使用
Use the Paping tool to detect TCP port connectivity