我们是否需要为机器人研究/应用构建ROS?主要优势是什么?何时或在哪种情况下必须使用ROS?

评论

我会写一个答案,但我在电话上打字。通常,ROS不是强制性的。我个人认为,依靠ROS甚至是不好的。无论您拥有什么组件,都可以用它制作一个可移植的库,然后使用它编写一个ROS模块。当ROS死亡或您的要求发生变化时,您将不胜感激。

#1 楼

我回到计算机上!

就像我在此评论中所说,ROS通常不是强制性的。 ROS是众多平台中的一个,而著名的原因是Willow Garage在某个时间点向编写最多ROS模块的人赠送了免费的机器人。也就是说,这不是最好的平台,当然也没有什么特别之处。特别是,上述竞赛导致了许多劣质模块的出现,只是为了使数字更高。

随着时间的流逝,ROS模块的质量越来越好,而且还有很多。因此,使用ROS,您将受益于重复使用许多已完成的工作。您可以在此处阅读一些为什么要使用ROS的原因。
请记住,还应注意副作用。

分布式控制

有了ROS,您就有许多通过网络相互通信的节点。有时这是很好且容易的,但通常会导致消息接收的延迟变化很大。结果,您必须具有较大的控制延迟才能确保所有消息均到达,这意味着您无法对事件做出快速反应,这又意味着您必须以较低的速度移动机器人,以免错过这些事件。

信不信由你,人们实际上是通过ROS(MoveIt!是相关组件集的名称)来进行机器人控制的。慢。不安全但是容易!

非实时

即使不分发,ROS也不是实时平台。这意味着您完全有Linux内核的酌处权来安排您认为合适的任务。对于某些应用程序可以,但对于其他应用程序则不能。因此,您需要查看自己的需求。您是否需要确保您的任务将在已知时间范围内完成?如果是这样,则需要一个实时系统。

托管的运行时环境

需要考虑的另一点是,尽管ROS是一种通用的通信协议,但它实际上仅在托管环境中受支持。托管表示代码在内核之上运行,而独立运行则意味着代码直接控制硬件(例如,在微控制器上)。

如果您的机器人应用程序在硬件附近运行,并且因此,您需要在微控制器上运行的程序,ROS对您没有帮助。

平台锁定

最后但并非最不重要的一点是,为ROS开发结果平台锁定。这意味着,如果将来由于某种原因而决定将工作基于另一种机器人平台(例如OROCOS,YARP等),那将是非常麻烦的。

您也将某种程度上锁定到Linux。毫无疑问,Linux是最好的Linux,但是有一天您可能最终不得不支持另一种系统,例如QNX,VxWorks等,在那里也会遇到问题。


如果您在为微控制器编写程序,然后忘记ROS。如果您正在编写高级模块,我强烈建议您编写可移植的代码。例如,假设您已经开发了一个新传感器,并且想编写一个从该传感器获取数据的模块,该模块通过CAN总线连接到您的计算机。

您可以做什么?一种情况是编写一个独立的库,该库具有可以与传感器配合使用并获取数据的功能。您甚至可以考虑在该库中生成一个定期获取和排队数据的线程。

一旦有了此帮助器库,就可以自由编写CLI,GUI,ROS模块,OROCOS模块,YARP模块,连接到Matlab或与传感器进行交互的任何其他方式。

最后一点:我在这里所说的内容通常适用于所有机器人平台,而不仅仅是ROS。 />

评论


$ \ begingroup $
评论不用于扩展讨论;此对话已移至聊天。
$ \ endgroup $
– Mark Booth♦
17年1月2日,12:47

#2 楼

“ ROS”是一个相对术语,APM运行专门为直升机控制而设计的完整自定义代码,在这种情况下,可能需要自定义ROS避免崩溃;而Navio +在Linux内核上运行,并且运行除自动驾驶仪之外的代码,并且仍然设法避免崩溃。与从头开始编写os相比,大多数ROS实际上是现有OS之上的一组功能。与任何东西一样,这取决于。

评论


$ \ begingroup $
他在谈论的是RobotOperatingsystem,而不是RealtimeOperatingSystem ...
$ \ endgroup $
– FooTheBar
16 Dec 19'在8:42

#3 楼

免责声明:
这个答案在某种程度上是对Shahbaz职位的反应,因此具有亲ROS偏见。

我认为ROS不是强制性的,但这是一个很好的起点,值得花时间进行投资。它始于Willow Garage,但该公司消失了,
ROS仍然存在,使用和发展。大部分ROS是完全开源的,并且可以在商业上使用,因此,如果公司不再对ROS感兴趣,则ROS不会消失。
某些博士生随其论文发表的核心模块和最先进算法的实现之间的代码质量当然有所不同。

ROS在工业环境中的发展速度越来越快(如果全世界范围内有相当一部分不使用ROS的机器人创业公司感到惊讶,我会感到惊讶)。
ROS工业联盟将进一步维护和开发某些算法,如果您查看成员,则可以很好地预测ROS将成为行业标准:

http://rosindustrial.org/ric/current-members/

分布式使用ROS的方法有助于创建和维护新的程序包,尤其是在团队内部。消息和操作定义在定义接口方面有很大帮助,因此可以快速交换硬件和算法。它还有助于整合新的团队成员,因为新节点如果崩溃将使其他节点崩溃(只要它不会耗尽所有RAM ..),因此将部分工作的节点作为运行中的系统集成到运行系统中是相当安全的效果是有限的。通信使用可靠且快速的TCP(在本地计算机上),因此消息传递非常快(控制环路可能达到数百Hz)。

非实时

ROS当前不是实时的,因为绝大多数算法都不需要实时。在大多数情况下,传感或规划没有实时限制(有多少人在建造自动驾驶高速汽车?)。如果最终控制回路实时运行就足够了,并且在许多情况下可以直接在电动机上完成(例如,通过CAN将最终位置发送到电动机)。但是,实时是ROS2的核心目标之一(https://github.com/ros2/ros2/wiki/Real-Time-Programming),因此即使您将来在整个系统中都需要使用ROS,也可以满足ROS2的要求。

如果您真的想运行嵌入式的程序,那么当然有到arduino的连接,以便您可以在arduino上直接写ROS消息,然后通过串行连接发送。

目前在Windows上运行ROS颇为痛苦,但是随着Windows逐渐接近Linux(甚至开始出现类似bash的东西),这只是时间问题。 (但是谁又想用Windows运行机器人?)

硬件接口和算法:

我认为这确实是ROS的强项。许多商用机器人已经带有ROS接口,或者有人已经花了一些时间来实现该接口。大多数商业手臂可以在MoveIt中使用,因此使应用程序与特定手臂一起运行的大部分工作可以与其他硬件一起重用。

社区:

ROS的另一个优势。新算法可以很快获得ROS接口,很多人遇到的问题与您相同,因此您会找到可以帮助您的人。

http://download.ros.org/downloads/metrics /metrics-report-2016-07.pdf

评论


$ \ begingroup $
我最后要看的是20年前的一切都围绕着ROS构建,意识到,哎呀,我们需要机器人以人类可比的速度工作,但是我们不能,因为20年前,我们以为反正有多少人在建造自动驾驶汽车?
$ \ endgroup $
– Shahbaz
16/12/19在23:06



$ \ begingroup $
我想我必须在这一方面支持@Shahbaz。并不是说ROS没有它的位置,而是您不应该使用ROS来代替良好的编码实践。您制作的ROS协议应从接口库派生,而不是相反。
$ \ endgroup $
–卡盘
16 Dec 20'在1:32