Answers:
我回到电脑了!
就像我在此评论中所说,ROS通常不是强制性的。ROS是众多平台中的一个,而著名的原因是Willow Garage在某个时间点向编写最多ROS模块的人赠送了免费的机器人。也就是说,这不是最好的平台,当然也没有什么特别的地方。特别是,上述竞赛导致了许多低质量的模块,只是为了增加数量。
随着时间的流逝,ROS模块的质量越来越好,并且其中很多。因此,使用ROS,您可以受益于重复使用许多已完成的工作。您可以在此处阅读一些为什么要使用ROS的原因。
考虑到这一点,您还应该注意副作用。
使用ROS,您可以拥有许多通过网络相互通信的节点。有时这是很好且容易的,但是通常会导致消息接收的延迟发生巨大变化。结果,您必须具有较大的控制延迟才能确保所有消息均到达,这意味着您无法对事件做出快速反应,这又意味着您必须以较低的速度移动机器人,以免错过这些事件。
信不信由你,人们实际上是通过ROS来进行机器人控制的(MoveIt!是相关组件集的名称)。慢。不安全 但是容易!
即使没有分发,ROS也不是一个实时平台。这意味着您完全有Linux内核的酌处权来安排您认为合适的任务。对于某些应用程序可以,但对于其他应用程序则不能。因此,您需要查看自己的需求。您是否需要确保您的任务将在已知时间范围内完成?如果是这样,则需要一个实时系统。
要考虑的另一点是,虽然ROS是一种通用的通信协议,但实际上仅在托管环境中支持它。托管意味着代码在内核之上运行,而与独立运行相反,这意味着代码直接控制硬件(例如,在微控制器上)。
如果您的机器人应用程序在硬件附近运行,因此您需要在微控制器上运行的程序,那么ROS对您没有帮助。
最后但并非最不重要的一点是,为ROS开发会导致平台锁定。这意味着,如果将来出于某种原因而决定将您的工作基于另一个机器人平台,例如OROCOS,YARP等,那会很麻烦。
您还将被锁定在Linux上。毫无疑问,Linux是最好的,但是有一天您可能最终不得不支持另一种系统,例如QNX,VxWorks等,那里也会遇到问题。
如果您是为微控制器编写的,那么就不用考虑ROS了。如果您正在编写高级模块,我强烈建议您编写可移植的代码。例如,假设您开发了一个新传感器,并且想编写一个从该传感器获取数据的模块,该模块通过CAN总线连接到您的计算机。
在这种情况下,您可以做的是编写一个独立的库,该库具有可以与传感器配合使用并获取数据的功能。您甚至可以考虑在库中生成一个线程,该线程定期获取和排队数据。
有了此帮助程序库后,您就可以自由编写CLI,GUI,ROS模块,OROCOS模块,YARP模块,连接到Matlab或其他任何要用于与传感器交互的内容。
最后说明:我在这里所说的内容通常适用于所有机器人平台,而不仅仅是ROS。
“ ROS”是一个相对术语,APM运行专门为直升机控制而设计的完整自定义代码,在这种情况下,可能需要自定义ROS避免崩溃;而Navio +在Linux内核上运行,并且运行除自动驾驶仪之外的代码,并且仍然设法避免崩溃。与从头开始编写os相比,大多数ROS实际上是现有OS之上的一组功能。与任何东西一样,这取决于。
免责声明:这个答案在某种程度上是对Shahbaz职位的反应,因此具有亲ROS倾向。
我认为ROS不是强制性的,但它是一个很好的起点,值得花时间进行投资。它始于Willow Garage,但该公司消失了,ROS仍然存在,使用和发展。大部分ROS是完全开源的,并且也可以在商业上使用,因此,如果公司不再对ROS感兴趣,则ROS不会消失。当然,某些博士生随其论文发表的核心模块和最先进算法的实现之间的代码质量有所不同。
ROS在工业环境中的发展速度越来越快(如果在全球范围内有相当一部分不使用ROS的机器人创业公司,我会感到惊讶)。ROS工业联盟将进一步维护和开发一些算法,如果您看看成员,可以肯定地说ROS将成为行业标准:
http://rosindustrial.org/ric/current-members/
分布式使用ROS的方法有助于创建和维护新的程序包,尤其是在团队内部。消息和操作定义在定义接口方面有很大帮助,因此可以快速交换硬件和算法。它还有助于集成新的团队成员,因为新节点如果崩溃将使其他节点崩溃(只要它不会耗尽所有RAM ..),因此将部分工作的节点作为运行中的系统集成到系统中是相当安全的效果是有限的。通信使用可靠且快速的TCP(在本地计算机上),因此消息传递非常快(控制环路可能达到几百赫兹)。
非实时
ROS当前不是实时的,因为绝大多数算法都不需要实时。在大多数情况下,传感或规划没有实时限制(有多少人在建造自动驾驶高速汽车?)。如果最终控制回路实时运行就足够了,并且在许多情况下可以直接在电机上完成(最终位置通过CAN发送到该电机)。但是,实时是ROS2(https://github.com/ros2/ros2/wiki/Real-Time-Programming)的核心目标之一,因此即使您将来在整个系统中都需要使用ROS, 。
如果您真的想运行嵌入式程序,那么当然可以连接到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