诞生于2007年的ROS,发展速度之迅猛超出了所有人的预料,已经成为一个机器人领域的生态系统,可以提供机器人相关的全方位技术,从硬件到软件,从框架到功能,从驱动到应用。。。
前边三篇已经分别从通信机制、开发工具、应用功能这三个方面浅谈了笔者对ROS产品化探索的一点总结,本篇就来聊聊最后一个部分——从生态系统的角度来看,ROS可以为机器人产品化提供哪些思路。
什么是生态系统?
维基百科的解释是:生态系统(Ecosystem)是指在一个特定环境内,相互作用的所有生物和此环境的统称。
ROS提供了一个庞大的开源社区,为ROS生态系统提供了基础环境,众多机器人的基础工具和应用功能不断融入这个系统,并且不断吸收第三方开源软件的精华,同时得到全球范围内众多开发者的支持,系统中的各部分协调统一、相互促进、共同成长,成为一个整体。
这个ROS生态系统应该是目前最大的机器人知识库了,在机器人产品化开发中,也必将成为一个重要的资源池。
一、机器人资源
目前国内外常用的机器人平台大部分都已经支持ROS系统,可以在wiki上查找:
http://robots.ros.org/
就算wiki上找不到的,基本也可以在github上找到其他开发者的分享。如果加上爱好者自己设计、实现的机器人,那就更加数不胜数了。
这些机器人资源对我们有什么用呢?
1. 机器人硬件设计参考
ROS中的机器人资源都是开源的,包括机器人的模型文件。如果我们需要做机器人设计,完全可以参考这些开源的机器人模型,毕竟包含了不少知名的机器人平台。
2. 辅助机器人原型搭建
使用ROS中已有的功能包,我们可以在自己的机器人上快速搭建功能原型,验证机器人设计中的问题。
3. 基于应用功能包的二次开发
ROS中的功能包非常丰富,一定可以找到与我们研究方向相关的应用功能,虽然不太可能直接应用在产品开发中,但还是可以减少类似重复造轮子的工作。
4. 算法验证
如果我们是算法工程师,手上又没有现成的机器人平台,那么使用ROS中的机器人可以随便挑随便选,放在物理仿真环境中,想怎么用怎么用,还分文不要。
5. 学习机器人系统
无论我们是机器人方向刚入门的初学者,还是资深工程师,都不可能掌握机器人方方面面的知识,那么借助ROS学习更多机器人相关的技能,一定可以事半功倍。
二、功能框架
设计一个完善的机器人系统并不是一件简单的事情,借用Python的一句名言:人生苦短,我用ROS。ROS中丰富的机器人框架,一定可以给你一些设计、实现上的灵感:
1. 机器人通信框架
ROS1的通信机制部分在机器人产品化中存在很多问题,但并不代表这种通信框架是不可用的,如果我们设计类似的通信功能,一样可以参考这个模型。
如果你不喜欢这种“中央集权”的通信模型,也可以看一下ROS2的通信模型。
这些通信模型的底层实现是开源透明的,真要拿来二次开发实现商业化,也不是没有可能。
2. 机器人导航框架
这个框架我们在上一篇已经说过,这里就不多说了,谁用谁知道。
3. ROS-I框架
工业机器人是机器人中非常重要的一个部分,在工业领域应用广泛而且成熟。ROS迅猛发展的过程中,也不断渗入到工业领域,从而产生了一个新的分支——ROS-Industrial(ROS -I)。
工业机器人的品牌众多,接口也各不统一,ROS-I框架为这些机器人提供了一个统一的控制平台,可以将ROS社区中的众多资源应用到生产环境中,或许会成为ROS最快落地的一个领域。
4. ros_control框架
硬件平台千差万别,如何将上层应用快速适配到不同的机器人硬件平台上,也是软件开发工程师头疼的一个问题,那就参考一下ros_control框架吧,仿真控制与实物控制轻松切换,类似于linux系统底层write、read机制一般的统一接口,可以帮助我们解决不少麻烦。
ROS中还有很多功能框架,都是全球范围内顶尖开发者的知识结晶,妈妈再也不用担心我不会机器人设计了。
三、机器人前沿科技
机器人绝对是走在当今科技最前沿的一个领域,更新换代也异常迅速,所以我们不仅要掌握机器人基础理论和技术,还要时刻关心前沿动态。ROS在机器人领域的地位越来越高,也是我们窥看前沿科技的一个窗口。
1. 机器人前沿
比如这款“百万级”的仿生手。
比如这款“不会伤人”的KUKA LWR iiwa。
再比如这款“机器僧人”Pepper。
2. 学术前沿
每年机器人顶级期刊和会议上的论文,很多都是基于ROS实现的,部分论文还会把成果和源码在ROS社区中分享。很多大公司或大牛也经常会把一些机器人算法在ROS社区分享。这就为我们接触学术前沿提供了机会,也可以从中汲取不少新的灵感和知识。
比如2016年Google在ROS社区中开源了一种SLAM实现算法——cartographer,同时也分享了ICRA会议上的相关论文:
https://research.google.com/pubs/pub45466.html
再比如基于ROS实现的无人驾驶平台:
http://www.ros.org/news/2017/06/simulated-car-demo.html
当然,也少不了当今热门的人工智能与ROS的结合:
http://www.theconstructsim.com/machine-learning-openai-gym-ros-development-studio-2/
此外,很多基于ROS实现的论文都可以在这里找到:
http://wiki.ros.org/Papers
ROS的生态系统在机器人领域保罗万象,还有更多资源可以让我们随意使用,无论是提高个人技能,还是进行商业开发,都可以让我们站在巨人的肩膀上看得更远。这也是ROS最初的设计目标:提高机器人领域的代码复用率,促进不同组织之间各施所长、合作共赢。
至此,《浅谈ROS的产品化探索》系列文章也就告一段落了,笔者使用四篇文章浅谈了个人在ROS学习、应用、产品化开发过程中的一些感悟和总结,欢迎各位批评指正。
总而言之,ROS能不能产品化应用,不能用一个“能”或者“不能”简而概之,而是需要剖析开来具体分析,在应用中取其精华去其糟粕。