A-A+

我为什么不使用ROS?

2017年12月13日 ROS 暂无评论 阅读 538 次

编者按

当越来越多的机器人开发者选用ROS

这时也非常有必要听一听反面的声音

ROS是不是个好工具?

锤子是钉子的好工具,但不是螺丝钉的好工具

所以首先认清你自己,然后再去选择适合你的工具


原作者是Pulu Robotics的Miika,资深嵌入式工程师,他坚持从无到有开发软件,主张从最底层解决机器人软件的复杂性的问题。如果你的系统偏向于嵌入式,此文值得一看。

以下由易科机器人实验室的Top Liu和Relay Zhang编译。


ROS或机器人操作系统作为机器人研究和开发中的一个全面解决方案,在市场中已经大量销售。所以,我们也总是被问到是否使用ROS。当我们告诉人们“No”的时候,许多人点头表示理解,但也有很多人表示不解,他们想知道为什么不这样做?由于这个问题有些复杂,但对未来机器人的研发工作相当关键,所以我们想深入探讨一下我们的观点。

我们不需要使用ROS

 

我们在2017年2月开始根据自己的实际需要而开发机器人技术,我们没有任何机器人技术经验,因此也不知道应该如何去做。我在设计电子和嵌入式软件方面经验丰富,包括电力电子、电动车牵引和图像传感器,但从未涉足机器人领域。

当然,在我开发我们改变游戏规则(主要是降价)的集成电子设计的同时,我们也看到了ROS。“每个人都在使用它,所以它一定是好的。”但事情不仅仅是“好”或“坏”那么简单。锤子是钉子的优秀工具,但不是螺丝钉的。其他人使用ROS的事实表明,它解决了他们的问题(或者他们认为是这样)。但是,我们认为它回答了我们的问题吗?

从头开始有时候是反而是正确的解决方案

 

我曾试图为我的硬件写一个ROS驱动程序。如果当时学习曲线变得更容易些,事情可能会有所不同。但实际上没有什么结果,这让我们质疑是否需要这个系统。

在分析了这种情况之后,我们写下了ROS是什么,以及我们的需求是什么,而且几乎没有什么共同之处。

ROS将现有的、通常难以使用、不兼容的传感器、执行器等硬件整合在一起,通过将其数据流转换成消息总线,使用在硬件驱动器和计算单元之间兼容的数据类型。它也是一组转换接口,用于运行多个外部(即,并不是用ROS开发的)的开源计算算法。

当研究人员购买了新的1000美元或5000美元的机器人硬件时,ROS还提供了一些工具来帮助测试已有的东西。因此,ROS是机器人部件之间以及机器人设计人员之间的翻译者,ROS是一种“共同语言”。当你像上面这样陈述时,所有这些听起来都很棒!

我们的业务完全不同。我们正在设计一个功能强大的机器人平台作为一个完整的集成解决方案,原因如下:

1)以综合方式自行开发所有部件是将机器人的价格降低至少十倍的唯一方法。如果我们要用“机器人组件”来构建我们的机器人,就像其他人似乎正在做的那样,我们的总物料成本至少是5000美元(与其他人一样),和至少需要15000美元的市场价格相比,这事实上是比赛开始的地方。

2.)将复杂的、单独的模块(不是相互兼容的)连接在一起,是一种使用效率低下的开发方法,即使在使用ROS等中间件时也是如此,即使是传说中已经有“别人”做好了驱动程序和数据转换。

3.)我们不会提供“可交换零件,对每个新的机器人零件测试”的可能性,这不是我们的产品,也不是我们的商业模式。ROS很擅长为此提供一个平台,如果这是我们的业务,我们会使用它。相反,我们正在构建我们自己的组件,将它们尽可能简单地整合在一起,并尽可能高效地将它们集成在一起,并尝试找到性能最佳的组件,以便我们的客户无需进行低级设计工作。然后,我们为社区提供一个完整的平台,我们希望能够在这个平台上设计真正的应用程序,从而为您提供一个跳跃式的开始,而不是一直重复变量块之间的必须的粘合。当然,因为它是开源的,任何人如果愿意,仍然可以修改这个平台,

 

ROS实际上可以解决我们10%左右的问题。剩下的90%至少会是两倍繁琐的。

 

“ROS方式”效率低下

我可以穿上你的马甲吗?

 

我开始把我们的机器人与外界隔离开来,事后看来,这个决定太棒了。

让我举一个例子。当负责将LIDAR(旋转激光扫描仪)数据映射到地图上时,我直接创建了代码,使用几乎零延迟的轮子编码器和陀螺仪数据来处理每个LIDAR测距数据点。它对机器人当前的坐标进行估计,有效地消除了机器人在采集过程中移动时,如果将LIDAR一次扫描作为单个固定的“帧”进行处理将出现的拉伸假象。

对我来说,这是一个不费脑筋的事情,但是后来,看看其他人如何在ROS环境中实现这一点,我很惊讶地发现这个问题常常完全被忽略了。这是可以理解的,因为虽然这个问题是我正在做低层集成时直接解决的(没有额外的代码,只是使用最新的信息,因为在你同一个CPU里已经有了所有你需要的数据)!但当您的系统非实时,又从多个不兼容的硬件设备接收非实时数据,再加上以“模块化”名义在软件之间所造成的人为障碍。正如我后来发现的那样,解决这个激光雷达问题实际上都够研究人员撰写完整(和复杂)的论文了!

对于我们的价格方面来说,昂贵的计算机也是不可能的。我们需要在Raspberry Pi 3上运行所有的功能。我们希望我们的产品功能丰富,敏捷,快速,节能。即使仅仅从环境角度来看,我们也承担不起将数十瓦的功率转化为热量,因为我们将要在这个星球上运行数百万台机器人。

因此,当其他厂商将100至1000美元的传感器和执行器模块组装在一起时,一些还要通过高延迟的USB,并且在昂贵的计算机内部复杂的消息传递体系结构中处理数据,这总是很慢,我们的解决方案是直接使用100 $的组件模块,全部连接到单个微控制器,运行简单的低级别实时代码,无操作系统,并提供机器人的主要“中枢神经”系统,使用200mW的功率来做到这一点。

低效率不仅体现在成本或功耗方面。在看过使用ROS的项目后,我们发现需要程序员一遍又一遍地解决同样的问题:如何在ROS系统中将各个部分“粘合”在一起,如何提供适于销售的用户接口,而不是演示/研究应用程序。

我们已经从零开始开发了所有东西,并且已经达到了相同的实际功能水平,并且通过一个三人小组用六个月时间实现,相比使用ROS需要十人小组在两年来实现(基于我们在分析市场时所看到的)。前方仍有很多艰苦的工作,尤其是在软件方面,但它是伟大的,我们的演示的设计具有实际的可制造性,所有都有CAD / CAM,BOM成本即使在10个单位的批次仍能满足我们的目标市场价格。

我们从来没有打算使用仅是演示用途的硬件(昂贵的、无法量产的或是干脆说没卵用的)来做演示。

 

ROS既不是问题,但也不是答案

我喜欢通过发现问题,从而找到问题的根源,然后修复它或完全重新来做。

移动机器人要价格合理,那么就很容易发现问题:昂贵、难以使用、通常不可靠的组件;缺乏编程技巧、资源或团队协调来构建完整的系统,缺少真实场景可用的“客户案例”。

我不知道ROS项目是否正在按照这些思路进行思考,但至少他们看起来正在解决同样的问题-正确的问题。然而,他们并没有能解决的根本原因,我想正是很多“ROS思想家”似乎还都喜欢这种方式。

今天机器人的基础往往是一个太过于复杂的系统。ROS位于复杂且昂贵的系统的顶端,也增加了更多的复杂性,但以某种方式成功地解决了这个难题。我看到一些伟大的演示,这令我印象深刻。

在我们看来,复杂性问题的答案必须是去除复杂的部分而不是管理它们。但是,如果我们删除作为移动机器人基础的部件,我们什么都没有了。所以我们别无选择,只能从头开始重做一切。

尽管从头开始听起来像是一项艰巨的任务,但请记住,这正是ROS的初心:让我们设计和实现这个庞大的软件,以便每个人都可以在以后重用。

在我们的例子中,通过固执的简化,做“一次大事”是可能的。我们以最基本的形式简化每个问题。如果事情看起来很复杂,我们必须深入挖掘,直到我们处于可能的最低层来解决复杂性的原因,而不是增加复杂性。我们想要得到正确的基础。

基础是机械和电子。(包括低层固件)

ROS是中间件。这也是我们为什么不与ROS竞争的原因。这就是为什么我们不重做他们的工作,为什么我说我们所做的90%没有被ROS回答。我们认为我们不需要中间件,我们的“stack”只是时间关键的低层(嵌入式)高层次的计算。

 

我们将与ROS兼容(无论如何 - 请告诉我们!)

 

导航到未来

最后,我们发现,ROS是一个拥有庞大社区的完全胜任的系统,显然已经在许多机构和公司从中找到了自己的位置。我们鼓励大家做出自己的、明智的决定。我们都有自己的动机,永远不要盲目相信任何意见,根据您的技术分析做出技术决策,使其适用于你的业务模式。

所以,我们从来都不想阻挠任何人,对于那些能够流畅使用ROS,或者从“ROS方式”中获得灵感的人,我们甚至都想帮助你加入到这个运动中。

为此,我们决定(从第一天起)为我们的硬件提供ROS驱动程序。另一方面,我们从不善于满足别人的软件需求(而不是我们自己的需要)。我们自己对ROS体系结构的经验太少,所以如果ROS开源社区的某个人能够获得灵感来帮助我们,那么这可能是一个双赢的局面。我们已经得到了一些联系,显然有人希望这样做,这显示了ROS社区积极的一面。

我们将把所有的软件都作为开源发布,没有任何限制,所以我100%确定我们的产品也会在ROS社区产生巨大影响,即使我们现在没有使用ROS。

 

标签:

给我留言

Copyright © ExBot易科机器人实验室 保留所有权利.   Theme   Robin modified by poyoten

用户登录

分享到: