距离发布上一篇ROS的博客已经过去两年了,才发现原来自己已经这么久可没有写过关于ROS的文章,想来很是惭愧。这两年时间,自己怀着程序员的梦想,研究过RTOS,探索过Linux,编写过Android应用,玩过web站点,但是回想起来,也并没有比ROS让我更加记忆深刻。两年时间,我也从来没有离开过ROS,使用ROS做过一些项目,也对ROS有了更加深刻的认识。这三天的假期时间,我认真拜读了国内开发者近年来写的许多关于ROS的技术博客,也浏览了最新出版的几本中英文书籍,猛然间发现ROS的发展确实迅猛,国内的学习和研究环境也得到了巨大改善。
三年多以前,我第一次接触ROS,当时是一个实验室师兄在学术会议上听说ROS,让我和另外一个同学研究一下。当时还年少的我是拒绝的,但是被逼无奈也还是要看一下这个东西。当时ROS的学习环境相当恶略,几乎只有官网的wiki(也没有现在完善),学习完基础教程之后,我和那个同学尝试了小海龟的例子,然后就茫然无措了。这是什么鬼?我是要做机器人,又不是要做海龟!那些什么节点、什么功能包、什么命令好复杂,完全不知道怎么应用到机器人上!于是本来心里就抗拒的我们都默默选择了放弃。。。
没过多久,师兄要检查我们的研究成果,我们勉强介绍了一下教程和小海龟的例子,然后师兄说确实很有前景,让我们克服困难,继续研究。。。当时心里一万头草泥马。。。。这完全搞不明白的东西,哪里有前景了???另外一个同学还是倔强的选择了放弃,而我则需要独自承担这一切。。。
技术研究的道路总是寂寞的,既然无法抗拒,还不如尽情享受。于是,我开始了一段疯狂的ROS学习之旅。既然学习资料少,那创造资料也要上!那段时间,我在google上搜索所有包含ros关键字的网页(baidu那个时候只能搜到ROS是一个什么鬼路由器的系统),终于找到了两个针对部分wiki教程翻译的博客和一个提到ROS的机器人网站,虽然并没有什么实际帮助,但是已经让我倍感欣慰了,至少看到有国内的开发者也在关注ROS。后来,我发现一个德国人在网上提到过用ROS做过一些事情,我千辛万苦找到了他的邮箱并给他发了邮件,然后就没有然后了。。。再后来,我注意到中科大已经在用ROS做项目了,我找到了他们的网页,给他们不断的发邮件请教我该如何学习ROS,不过回复草草,总结一下就是六个字:学教程,看源码! 我勒个去,这句话虽然是真理,但是对于一个新手来说,实在是太残忍了。
靠人不如靠自己,最终还是需要自己安下心来探索。于是,我研究了多次基础教程之后,开始按照例程写一些自己的代码,尝试去理解节点等基本概念,然后学习如何使用ROS里边的Twist消息,如何根据自己的需求创建消息,如何使用URDF创建模型,如何在Rviz中显示图像等等。由于我们使用的机器人是基于嵌入式系统的,所以在这段学习的时间里,我给ROS官方发邮件,问他们怎么在ARM上安装或者编译ROS(当时并没有提供在ARM上编译好的软件包),当然又是没有回复。。于是,我自己花了一个月的时间,在ARM上完成了ROS核心库的编译,由于很多功能包编译不了,所以我只能在上边自己写机器人的所有驱动和节点,虽然很痛苦,很漫长,但是也让我逐渐熟悉了ROS的使用方法。
偶然的机会,我找到一个ROS的QQ交流群,里边的人数只有两位数,而且很多人是在国外实验室做研究的,不过这也为我提供了非常好的交流机会。突然有一天,群里说国外出了一本ROS by example的书,希望想看的同志们凑钱去买一本,我义无反顾的参加了,并且很快拿到了pdf版电子书。那个时候,这本书对于我来说是如获至宝一般。我很快按照书上的内容进行了尝试,学到了更多关于机器人SLAM、自主导航、图像处理等方面的知识,然后我和实验室的小伙伴也将这些功能想办法移植到了我们的机器人上。终于看到自己做的机器人跑起来了,那种感觉是一种征服未知的骄傲!此时,已经距离我初次接触ROS过去了将近一年的时间。
我们拿着自己做的机器人去参加了比赛,并且获得了一等奖。在ROS学习的路上,我从抗拒到接受,从未知到熟悉,经历了前所未有的折磨,也收获了前所未有的喜悦。在这过程中,我也常常在思考,ROS确实有前景,但是国内还鲜有人知,就算有人知道,会不会也被困难所吓倒。既然我经历过,那何不总结一下,让其他人少走弯路。于是,我整理了自己学习过程中的一些资料和心得,在CSDN上以博客的形式发表,最终就是ROS探索总结系列的博文。需要声明的是,我并不是大神,我做的东西和总结的内容,并不算高深,我只是比很多人更早迈出了第一步。
这么长时间过去了,回头再看ROS,ROS到底是什么,ROS到底为我们提供了什么?在我看来,ROS只是一个软件,虽然为我们提供了极大的便利,但是我们也没有必要过于神话它。用一句话来说,机器人做的好,不一定是因为你用了ROS,机器人做不好,也不一定是因为你没用ROS。假如我们是诗人,那ROS就是一本字典,里边为我们提供了很多美丽的字符,当然也有很多遣词造句,但是你写诗总不能照搬原句吧,能不能写出好诗,还是要看诗人的才华。ROS里边有众多的软件功能包,但是把这些功能包照搬到我们的机器人之上,并不是使用ROS开发的目的(当然,这是学习的过程)。如果我们都这样做,那大家的机器人都是一样的了,机器人的核心竞争力,还是他所实现的功能和应用的场景,这也是我们作为是“诗人”需要做的,ROS只是教给我们如何去快速成为这样一个“诗人”。
ROS的另一大精神就是分享,这也是开源软件的精神,所以我们才可以看到如此众多软件功能包的源码,并且快速完成二次开发。所以为了促进ROS在国内的发展,我们是不是也应该多分享一些自己的创意和想法,让更多人能够快速上手ROS,不要因为这种工具拖累我们专注于机器人应用的研究。这就是我一直以来的想法,而且我已经看到很多人这样做了,希望更多人可以通过多种方式进行分享,无论是初始级的还是高级的,只要能够帮助需要的人,就是一件最快乐的事情。
注:
ROS探索总结系列会继续更新,我会把之前做的项目细节在博客中和大家分享,后续可能还会分享更多ROS相关的内容,欢迎机器人爱好者们提出各种建议和意见。同时感谢ExBot易科的小伙伴对本博客的支持!
记于2015-9-6夜