原文地址:http://pulurobotics.fi/blog/pulurobotics-blog-1/post/why-don-t-we-use-ros-7
ROS或机器人操作系统作为机器人研究和开发的全面解决方案已经大量销售。 所以,我们总是被问到是否使用ROS; 当我们告诉人们“不”的时候,许多人点头表示同意,而其他人则想知道为什么不这样做。 由于这个问题对机器人研发工作的未来有些复杂和相当关键,所以我们想深入研究一下我们的推理。
We don't need to use ROS
我们在2017年2月开始为自己的实际需要开发机器人技术,没有任何机器人技术经验,因此也不知道应该如何去做。 我在设计电子和嵌入式软件方面经验丰富,包括电力电子,电动车牵引和图像传感器,但从未涉足机器人领域。
当然,在我开发我们改变游戏规则(主要是降价)集成电子设计的同时,我们也看到了ROS。 “每个人都在使用它,所以它必须是好的。” 但事情不仅仅是“好”或“坏” 锤子是钉子的优秀工具,但不是螺丝钉。 其他人使用ROS的事实表明,它解决了他们的问题(或者他们认为是这样)。 但是,我们相信它回答了我们的吗?
我试图为我的硬件写一个ROS驱动程序。如果学习曲线变得更容易,事情可能会有所不同,但没有什么结果,让我们质疑是否需要这个。
在分析了这种情况之后,我们写下了ROS是什么,以及我们的需求是什么,而且几乎没有什么共同之处。
ROS将现有的传感器,执行器等硬件整合在一起,通常难以使用,不兼容,通过将其数据流转换成消息总线,在硬件驱动器和计算单元之间具有兼容的数据类型。它也是一组转换接口,用于运行几种外部(即,不开发用于ROS)的开源计算算法。
ROS还提供了一些工具来帮助研究人员测试出去的东西,并购买新的1000美元或5000美元的机器人硬件。因此,ROS是翻译者,ROS是“共同语言”;机器人部件之间以及机器人设计人员之间。当你像这样陈述时,所有这些听起来都很棒。
我们的业务完全不同。我们正在设计一个功能强大的机器人平台作为一个完整的集成解决方案,原因如下:
1)以综合方式自行开发所有部件是将机器人的价格降低至少十倍的唯一方法。如果我们要用“机器人组件”来构建我们的机器人,就像其他人似乎正在做的那样,我们的总物料成本至少是5000美元(与其他人一样),至少需要15000美元的市场价格事实上比赛开始的地方)。
2.)将复杂的,单独的模块(不是相互兼容的)连接在一起,对开发时间的使用效率低下,即使在使用ROS等中间件时也是如此;即使是传说中的“别人”做驱动程序和数据转换。
3.)我们不会提供“交换零件,测试每个新的机器人零件”的可能性,这不是我们的产品,也不是我们的商业模式。 ROS很擅长为此提供一个平台,如果这是我们的业务,我们会使用它。相反,我们正在构建我们自己的组件,将它们尽可能简单地整合在一起,并尽可能高效地将它们集成在一起,并尝试找到性能最佳的组件,以便我们的客户无需进行低级设计工作。然后,我们为社区提供一个完整的平台;我们希望能够在这个平台上设计实际的应用程序,让您大开眼界,而不是一直重复变量块之间的必要连接。当然,因为它是开源的,所以任何人如果愿意的话,仍然可以修改这个平台,但是在做任何事之前都不需要解决。
ROS实际上可以解决我们10%左右的问题。 剩下的90%至少会是两倍繁琐的。
The "ROS way" is inefficient
我开始把我们的机器人与外界隔离开来,事后看来,那太棒了。
让我举一个例子。当负责将LIDAR(旋转激光扫描仪)数据映射到地图上时,我直观地创建了使用几乎零延迟的轮距测量和陀螺仪数据来处理每个LIDAR范围数据点的代码。这是当前的机器人坐标估计,有效地消除了在机器人在采集过程中移动时,如果将LIDAR扫描作为单个固定的“帧”处理将出现的所有拉伸假象。
对我来说,这是一个不费脑筋的事情,但是后来,看看其他人如何在ROS环境中实现这一点,我很惊讶地发现这个问题通常完全被忽略。这是可以理解的,因为虽然这个问题是直接解决在我正在做的集成低层次上(没有额外的代码 - 只是使用最新的信息,因为你已经拥有了所有你需要的CPU)!当您的非实时系统从多个不兼容的硬件设备接收非实时数据时,再加上以“模块化”名义的仿真软件障碍。解决这个激光雷达问题实际上是研究人员写出完整(和复杂)的论文,就像我后来发现的那样!
对于我们的价格部分来说,昂贵的电脑也是不可能的。我们需要在Raspberry Pi 3上运行所有的功能。我们希望我们的产品功能丰富,敏捷,快速,节能。即使仅仅从环境角度来看,我们也承担不起将数十瓦的功率转化为热量的作用,因为在我们要与这个星球相关的数以百万计的机器人中,运行效率低下的代码。
因此,当其他厂商将100至1000美元的传感器和执行器模块组装在一起时,一些通过高延迟的USB,并且在昂贵的计算机内部复杂的消息传递体系结构中处理数据总是为时已晚,我们的解决方案直接使用$ 100组件模块,全部连接到单个微控制器,运行简单的低级别实时代码,无操作系统,并提供机器人的主要“中枢神经”系统,使用200mW的功率来做到这一点。
低效率不仅在成本或功耗方面。在看过使用ROS的项目后,我们发现需要程序员一遍又一遍地解决同样的问题:如何在ROS系统中“粘合”部件;如何提供适销售的用户界面而不是演示/研究应用程序。
我们已经从零开始发展了所有的事情,并且已经达到了相同的实际功能水平,并且通过一个三个半月的团队,比使用ROS两年来一组10人达到的水平要高出三到三年(基于我们所拥有的在分析市场时看到)。在软件方面还有很多工作要做,尤其是在软件方面,但是这些演示实际上运行在内部具有实际可制造设计的原型上,所有CAD / CAM都可用,BOM成本与我们的市场价格目标相一致即使在10个单位的批次。
我们从来没有打算用演示特定的(昂贵的,不可制造的或其他无用的)硬件来演示演示。
我们已经从零开始发展了所有的东西,并且通过一个三个半月的团队达到了相同的实际功能水平,这比使用ROS的2-3年内通常需要10人的团队所需要的时间更长(基于我们所拥有的 在分析市场时看到)。
ROS is not the problem, but neither the answer
我喜欢通过识别问题,找到问题的根源,然后修复它或完全重做。
使用经济实惠的移动机器人技术,问题很容易识别:昂贵,难以使用,通常不可靠的组件,缺乏编程技巧,资源或团队协调来构建完整的系统,可用于真实的“客户案例”。
我不知道ROS项目是否正在按照这些思路进行思考,但至少他们显然正在解决同样的问题 - 正确的问题。然而,他们并没有解决根本原因 - 我想很多“ROS思想家”似乎都喜欢这种方式。
今天机器人的基础往往是一个太复杂的系统。 ROS位于复杂而昂贵的系统的顶端,增加了更多的复杂性,并以某种方式成功地解决了这个难题。看到一些伟大的演示,我印象深刻。
在我们看来,复杂性问题的答案必须是去除复杂的部分而不是管理它们。但是,如果我们删除作为移动机器人基础的部件,我们什么都没有了。所以我们别无选择,只能从头开始重做一切。
尽管从头开始听起来像是一项艰巨的任务,但请记住,这正是ROS的前提:让我们设计和实现这个庞大的软件,以便每个人都可以在以后重用。
在我们的例子中,通过顽固的简化,做“一次大事”是可能的。我们以最基本的形式简化每个问题。如果事情看起来很复杂,而不是增加复杂性,我们必须深入挖掘,直到我们处于可能的最低水平,以解决复杂性的原因。我们想要得到正确的基础。
基础是机械和电子。 (包括低级固件)
ROS是中间件。这也是我们为什么不与ROS竞争的原因。这就是为什么我们不重做他们的工作,为什么我说我们所做的90%没有被ROS回答。我们认为我们不需要中间件 - 我们的“堆栈”只是时序关键的低层(嵌入式)和计算高层。
We'll be ROS compatible (whatever that means - please tell us!)
最后,我们发现,ROS是一个拥有大型社区的主管系统,显然已经在许多机构和公司中找到了自己的位置。我们鼓励大家做出自己的,明智的决定。我们都有我们的动机。永远不要盲目信任任何意见 - 根据您的技术分析做出技术决策,使其适用于您的业务模式。
所以,我们从来都不想阻挠任何人,对于那些流利的ROS,或者从“ROS方式”中获得灵感,我们都想帮助和加入这个运动。
为此,我们决定(从第一天起)为我们的硬件提供ROS驱动程序。另一方面,我们从不善于满足别人的软件需求(而不是我们自己的需要)。我们自己对ROS体系结构的经验太少,所以如果ROS开源社区的某个人能够获得灵感来帮助我们,那么这可能是一个双赢的局面 - 我们已经有了一些联系,人们显然希望这样做, ROS社区的积极动力。
我们将把所有的软件都作为开源发布,没有任何限制,所以我100%确定普鲁的产品也会在ROS社区受到重创,即使我们现在不在内部使用ROS。