ROS机器人操作系统近几年在国内越来越火,社区也不断在壮大,资料也越来越多。庞大的社区支持和软件库,非常适合于机器人算法研究,连百度无人车都基于ROS开发。然而机器人是一个综合性非常强的一个学科,牵扯的知识面很广,ROS的学习门槛高,想要掌握ROS不容易。尤其刚上大学的学生,没有一点专业基础,更是难上加难。本篇将结合自己的学习历程,给新手做些参考,抛砖引玉。由于本人水平有限,有写得不好的地方还请海涵。“如何学习ROS”专栏计划将以以下章节来编排内容:
篇一:关于我
篇二:必备技能
篇三:学习工具
篇四:机器人配件
篇五:DIY千元ROS机器人
篇六:新手忽视的Ubuntu基础
篇七:wrapper介绍
篇八:差速机器人运动学分析
篇九:STM32如何使用rosserial通信
后续有可能做一些调整。我尽量从一个新手的角度去写这些文章,以便新手能读懂,尽量把问题阐述清楚。如果大家有好的建议,可以用跟我说,以便我添加修改,谢谢!
本人2013毕业于普通一本院校,机械电子工程专业。其实我一开始是进入的艺术与设计学院,学的工业设计专业,填报志愿的时候最后一个乱填的,结果恰好投档了,填报的喜欢的专业都掉档了。第一个学期好多时间都在画素描和色彩,画了半年,然而自己对画画完全不感兴趣(我一个学理科的竟然进入大学学画画了),而对计算机编程和电子技术感兴趣。后面听到可以转专业,我就利用课余时间学习转专业要考的课程,比较坑的是工业设计不学高数,我只能自学。后面费了好大劲,转专业考试通过,转到机械自动化学院学习机电专业。说是机电,但是专业偏向于机械(好像又转错了,又坑了自己一把),专业方向是液压传动。学校开的课程有比如电子技术,单片机和c语言是自己感兴趣的,但因为偏向液压传动,所以这些课也是讲的非常简单,上课也只是学习个皮毛,但好歹也是学了一点自己喜欢的,比学工业设计强多了(窃喜)。无奈,为了学习自己感兴趣的专业知识,我就利用课余时间和酱油课(你们懂得)时间来学习,整个大学不仅要兼顾专业课程,还要自学感兴趣的专业,其实学得非常的累,尤其是你身边找不到一个可以讨论的人,问问题的人,只能一个人琢磨,学久了你都会怀疑人生,内心感觉非常压抑。整个大学基本就没出去玩过,一个是因为穷,一个因为要学的东西太多。四年下来,linux基础,linux内核移植裁剪,安卓开发,pcb设计,c++,java,嵌入式开发,stm32,计算机组成原理,数据结构,计算机网络技术,RTOS,CAD等都是自学的,因为平时自己也喜欢动手,也会做做项目玩玩,像小车什么的,砸在这上面的钱也有一个小数目了,自己也确确实实学到了不少东西,这钱花得挺值。也正因为我有这些自学的专业基础,毕业后我才能做软件开发,这也为我后来学习ROS打下了一定的基础。我们班,只有我一个人现在搞软件,其他的要么做结构,要么在汽车厂。很庆幸自己一开始就不喜欢机械,不想干机械这行才搞软件,现在看来这个决定非常明智。
大概是我大三(11年下)的时候玩小车的时候偶然搜到的ROS,那个时候也仅仅瞥了一眼ROS,国内网站印象中都没有这方面的资料,而且资料非常少,全是英文的,本人的英文水平又烂(四级刚过线,六级没过),很排斥英文资料(虽然现在英文水平也不怎么好,但至少不排斥看英文资料,词汇量还是有点提高),对英文文献有一种莫名的恐惧感,相信很多新手跟我那个时候一样。那个时候完全不知道ROS要怎么用,只知道她是可以用作机器人开发。那个时候我还认为是可以移植到单片机里控制小车啥的,后来翻一些英文资料发现并不是这样,然而也不知道她是要依赖Ubuntu。后来由于学业紧,就没怎么关注。毕业后进入一家国企做单片机开发,因为自己在学校鼓捣过一些玩意,工作还是挺顺手的。还有一个就是可能是在国企的缘故,有些时候还是很闲的,一周大概就忙个2-3天,剩下的闲着学习。闲着无聊我就又开始关注起ROS了,因为这个时候(13年)我已经有一些linux的基础和编程基础,网上也陆续有一些资料,于是自己就下一些ROS电子书看,学习ROS基础:安装,编译,slam,navigation,gazebo仿真。那个时候玩得也不好,不是很顺手,而且是用gazebo仿真,没有实物小车,问题很多。我记得一个最苦逼的就是编辑代码,linux下用得很不顺手,直到后来我会用vim(公司一个前辈带我入的坑,这个是我最喜欢的编辑器,没有之一,现在我编辑代码都是vim,不管是单片机还是ros开发,大力推荐)以及自己的shell脚本玩得熟了,感觉自己玩linux又上了一个档次。ROS学了两三个月,基本操作已经很熟了,这个时候我觉得好像是学会了(其实只是学会了操作,code很少,ROS本来就是一个软件工具集,学习操作只是基础),但是对怎么开发出一个实物机器人出来还是没有什么思路,那个时候对odom也是半知半懂,而且也是自己一个人慢慢摸索、百度,基本也没问别人,问了也是白问。新手学习ROS遇到的问题,网上一般都能搜到解决方法。后来我就决定自己做一个兼容kobuki的底盘控制器出来,直接用的kobuki的ros通信协议,这样机器人就可以直接用kobuki和turtlebot的ros应用,相当于一台turtlebot,但这也有一个弊端,学的东西无法全部覆盖,比如turtlebot的ros应用。后面自己查资料,看开源的机器人rbx1底层代码,学习pid控制,然后动手画原理图,画pcb,搞电机驱动,慢慢的摸索搞了大半年终于出来了,经过这几年的迭代,这个兼容kobuki和turtlebot的底盘控制器功能也是非常强大,现在也商用了,感兴趣的可以联系我。不得不说,做项目进步是很快的,当你有一个目标的时候,你会想办法去解决阻碍你实现这个目标的问题。所以我建议,如果大家有时间,有精力,可以自己从0开始造一个机器人,绝对收获很大,里面的坑不知道有多少。工作后,专业上的进步也要比在学校快,当然遇到好的前辈,大牛也是很重要的,他能给你做一个进步的参考。但是工作后,自由时间少了,看书学习的时间很少,幸运的是我进入的是一个比较闲的国企(其实也分岗位),所以有很多时间自己鼓捣别的东西。还是在学校好,学生有大把的时间学习,可是在大学里,真正有想法,想学点东西的人少。好在自己在学校的时候学了点东西,但是有些学的没用到,所以学习的选择也是非常重要的,学习一些这辈子都用不到的东西也是浪费时间。兴趣是最好的老师,我相信很多学习ROS的都是对机器人有着很浓厚的兴趣。
可能很多人要问了,我的ROS学得如何?说实话,我现在的水平一句话概括:“比上不足比下有余”,就是高端算法我不会,但是ROS大多数问题我都能应付过来,但是给我时间,往算法这方面发展也不是什么大问题,毕竟我有这个基础了。如果给ROS玩家分为高中低三级,我也顶多算个中级玩家。限制我在这个行业进一步发展的原因有以下:第一个,我不在ROS机器人这个行业工作,没有这方面的需求,我目前从事工业机器人机器视觉开发工作,基本不用ROS,机械臂可能用得到,但是也不用;第二个,身边没有这方面的大牛,没有学习参照的榜样;第三个,工作的压力没有时间和精力再深入学习下去。从首次听说ROS到现在也有7年了,本人认认真真学习ROS的时间也有快6年了。很看好ROS,我也一直在关注ROS的发展,衷心希望她越来越好。
好了我的情况基本上就是这样,写出我的这些,只是想说,只要你感兴趣,你有想法,你肯花时间,会动脑筋什么都不是难事。如果一进入大学我没有任何想法,不努力,不去追求自己感兴趣的东西,我的人生就是另外一翻了,也不可能从事机器人这个行业,或许ROS也不会出现在我生命中。下一篇主题为必备技能,我将结合我这几年的学习历程,说下一些学习方法、经验和心得。有想法的朋友,不管是新手还是高手也可以加我聊聊,咱们可以互相学习,交个朋友也行。