假如咱们现在想研制一款机器人,应该挑选哪一个操作体系呢?其实咱们咱们往常触摸到的操作体系屈指可数,Windows,MacOS,Linux,iOS,Andoird。ROS尽管全名是Robot Operating System,但本质上不是操作体系,是Linux发行版Ubuntu下的一个用来开发机器人的Middleware,这个没有什么好争辩反驳的。Android尽管意思是人形机器人,可是我觉得这就仅仅姓名罢了,Andy Rubin莫非真的是想经过智能手机探秘智能机器人?并且机器人学里的人形机器人一般写成Humanoid。为了躲避因“操作体系”产生的歧义,本文中咱们评论研制一款机器人需求怎样的“环境装备”?所以许多概念没有区别是否称得上操作体系。
挑选怎样的环境装备,有几点是咱们先要搞清楚的。首要咱们需求知道实时性是不是有必要的。简略的说,假如在体系中是要害变量,体系就需求实时,例如双足机器人动态行走体系就有必要实时,可是静态行走的话其实不实时也能够。假如实时性是有必要的,咱们能够挑选Windows + VxWorks,这是在传统运动操控范畴十分常见的一个组合。也能够挑选QNX操作体系,或许LabView,不过这两个实时的我并没有许多经历。我最早触摸的实时操作体系是Windows + Ardence RTX,后来应该改名为IntervalZero。还有便是是否体系需求全体上实时?咱们在做双足机器人的时分,运动操控就用到了RTX,可是图画处理并没有。后来咱们将运动操控的部分移到了一个ARM7的下位机,上位机的Windows只需求发送action的指令。所以,即便是需求实时,架构也是很灵敏的。上位机是没有实时性的强需求的。
当咱们期望略微前进一下机器人复杂度的时分,就会发现另一个需求考虑的问题,进程间通讯。在咱们用Windows + RTX的时分,进程间通讯运用RTX供给的shared memory,不过都是比较慢的图画处理进程向shared memory中写数据,决议计划和运动操控进程读数据。shared memory显着并不是很好的通讯方法,这儿不再多加评论。ROS则运用了一个很好的通讯架构,并且是ROS整个结构的一个根底(不论是关于ROS中的topic,service,plugin,actionlib等根底概念仍是rviz,navigation package等功能包。想了解这些概念最近多重视下@Top Liu),所以许多人简略的了解ROS只不过是做了一个通讯的架构罢了。我有必要阐明下,进程间通讯并不是ROS能够占有机器人开发环境的首要原因。在2010年,咱们开发一款相似Atlas的大型人形军用机器人的时分,就用到了进程间通讯东西IPC。IPC便是Inter ProCESs Communication,开发者是CMU的Reid Simmons,应该是出现在2000年左右。后来我在协助本科生参与RoboCup Standard Platform League的时分用过Nao的操作体系NAOqi,这个体系大概是出现在2006年。在NAOqi中,整个通讯的架构和ROS十分像了,ROS中的Node在NAOqi中叫一个broker,都是占用一个体系的端口。所以,2010年ROS正式发布Box turtle的时分,通讯架构并不是颠覆性的。Android的进程间通讯的机制据我了解也是十分强悍的。依据@邵天兰 之前的一次讲座,我也了解到ROS的通讯机制放到现在看其实现已有点过期了。所以仅仅从通讯机制上点评ROS,含义不大。再有,ROS中的通讯机制并不是说不能绕过,其程序本质上仍是C++和Python。
我以为ROS最大的奉献便是拟定了机器人开发的一致接口规范。由于Willow Garage当年是做移动服务机器人,所以这些规范是首要在移动机器人界一致的。所以ROS的含义,我归纳的时分便是六个字,“书同文,车同轨”,极大加快了沟通与前进。也是由于这样,机器人学界才渐渐能够构成一些BenchMarking,能够在开源社区构成百家争鸣的态势,能够让咱们不再深陷于又要建立硬件又要建立软件的重复造轮子的窘境。其实最首要便是ROS的message,看起来不过是一些头文件,可是能够让咱们轻松的替换各种传感器和执行机构,替换软件中的各个算法,现在建立机器人在咱们眼中,就像玩乐高积木,拼装一台电脑。
当然,作为一个开发东西,只做到这儿是不行的。我看过LabView的开发东西,支撑硬件许多,应该规范也很好。Microsoft Robotics Developer Studio是个不错的开发东西,惋惜挂掉了,也算是流行了一段时间。针对机器人开发,ROS则供给了很好的可视化、模仿仿真和Debug的东西,专业上讲是十分developer friendly,这也是许多人说为什么ROS合适学习和做研制的原因。不过我觉得这不能支撑ROS不合适做产品开发的观念,由于产品成型后,这些调试东西平常都是能够去掉的。关于可视化东西Rviz,模仿仿真的Gazebo,Debug的log等级以及在线调参的rosparam和rqt等等,ROS星火计划都有详细的解说。
最终,就要说说基因,社区,支撑和人才的问题。ROS的基因是移动式服务机器人,LabView的基因是NI,Android的基因是Google和智能手机。ROS社区还算是活泼,尽管机器人的高端玩家比较多,可是全体开发者数量估量也就在十万的量级(ROS answer注册用户也就三万吧),总量不能和如日中天的Android比较,也是现在背面支撑OSRF和google的距离。我也在不同场合聊过许屡次,硅谷的机器人创业公司根据ROS开发的比较多(相对国内而言,详细份额不清楚,从RosCon的支撑厂商就能看到一些端倪),可是国内用Android的公司显着在数量上占有优势 。
所以最终要支撑本文论点了。不评论工业机器人(以及类工业机器人的医疗机器人等,以操控为中心),咱们把剩余的机器人品类再区分的详尽一些。首要,教育机器人(这儿指学习机器人的套件等,不是说用来学习英文或许唐诗的对话机器人,这个归属到情感陪护类),首要面向k-12的学生,也便是我国高等教育之前的学生,大多便是scratch+单片机,不需求什么体系。不过我觉得这种状况会在未来不久产生改动,首要是教育机器人业界现已有人发现机器人教育和机器人开发的脱节是个问题,那么也便是个商机,可是要比及工业足够大。玩具类机器人不需求开发环境,所以便是玩各种单片机。这些都不是支撑机器人能成为一项颠覆性技能的方向。所以以下首要剖析用Android和ROS开发的机器人。