如何成为一名机器人工程师(一)

来自《机器人工程师学习计划》,原文是大疆工程师YY硕对自己过去学习方式的一个总结。
根据世界第一的机器人教育机构卡耐基梅隆大学的机器人学博士的课程分类方式(http://www.ri.cmu.edu/education/COSAug2016.pdf),机器人学有四个核心领域:
 

【特辑】如何成为一名机器人工程师(一)

 

在真正开始谈该怎么做之前,笔者给了大家一些善意的提醒:

【特辑】如何成为一名机器人工程师(一)

【特辑】如何成为一名机器人工程师(一)
 
但是,小瓦君想插播一个消息。
【特辑】如何成为一名机器人工程师(一)
 
关于笔者善意的提醒和爱的忠告就到这里了,接下来开始介绍如何才能成为一名机器人工程师。
【特辑】如何成为一名机器人工程师(一)
小瓦君将整个大一需要学习的整理为五大点
 

【特辑】如何成为一名机器人工程师(一)
 

翻墙

必须要翻墙,先确保自己能上Google。这能让你在之后的职业生涯里节省上万块钱,所以别心疼买VPN的钱。

 

注册一个Gmail账号

再注册stackoverflow账号

再注册github的账号

再注册CSDN账号

 

注册完多登录上去逛逛…

 

英语

英语水平会影响机器人工程师水平。

 

一些高级的机器人知识都不是中文的参考资料,这个时候如果啃不下英文资料,进步速度和眼界就会受到很大影响。

 

因此大一的时候要多看看红宝书,看看美剧。

 

线性代数

线性代数的重要性需要特别强调,优秀的工程师和科学家在职业生涯中要学至少五次线性代数。

 

对学习线性代数推荐两书一教材:

  《Linear Algebra Done Right》

  《Linear Algebra Done Wrong》

   麻省理工公开课:线性代数。[2]

 

不论如何,学线性代数一定要用国外的教材,千万不要用国内的教材,就算是英文也要啃下来,同时还要刷足够多的课后题。

 

编程

不管学的专业是什么,一定要在大学一年级尽早开始学编程。

 

推荐从Python开始学习编程,比较好的Python开发学习环境是Anacoda 。比较好的教材是麻省理工学院公开课:计算机科学及编程导论。

 

Python就像一把瑞士军刀,功能很多。但是真要去造机器人,合适的工具并不是瑞士军刀,而是C/C++这样简单粗暴的锤子和螺丝刀般的工具。

 

笔者个人入门用的是清华大学出版的《C++语言程序设计》。不过国内的C语言教材都有个巨大的问题是不引导学生去用Linux。近年来更好的一个教材是http://songjinshan.com/akabook/zh/index.html,这个网站的教材非常好,教育学生用Linux环境作为程序编译的环境,还引入一些计算机体系结构的介绍。

 
 

Makefile

当你把C学得差不多,开始要学写包含多个头文件的程序时,一定要同时学习makefile的知识。这时候要上网去搜“Makefile详解”

 

笔者个人觉得HTML和Javascript也是机器人工程师必备的技术。因为web技术实际上已经渗透到了编程的方方面面。另外AJAX能够帮助初学者理解一定的网络技术原理,而网络技术也是机器人工程师必备的技能。

 

学习HTML和Javascript比较好的资料是http://www.w3schools.com/,只需学习网站左侧的“Learn HTML”、“Learn CSS”、“Learn Javascript”和“Learn JQuery”即可。

【特辑】如何成为一名机器人工程师(一)

上大二的时候,你已经学会了基本的编程知识和基本的数学知识。机器人工程师需要的技能数量是IT行业全栈工程师技能数量的三倍以上,这些技能的基础都应该在大二开始积累。

 

大二应该掌握的技能

【特辑】如何成为一名机器人工程师(一)

 

大二阶段特别要强调的是对动手能力的培养,包括机械材料的加工、电路焊接、制作导线和接头、连接路由器、配置网络、做网线等等。

在动手前,你需要准备以下工具~

【特辑】如何成为一名机器人工程师(一)

对于该选择造一个怎么样的“真正能用的机器人”练手,最好的选择肯定是机器人比赛中的机器人。

参加Robocon,你会学着造有人那么高的巨大机械;

参加RoboMasters,你会学着造比汽车还要灵活的机器人。

其他一些小型的比赛比如飞思卡尔智能车,也是很好的训练。

 

国内开源机器人社区也有很多资源可以利用来学习,比如自己买Arduino STEM educational Robot kits Building Platform的各种开发套件做简单的机器人。

如果更希望接触到单片机的本质,可以自己买STM32开发板学习。STM32是ARM Cortex‑M家族中最为广泛应用的一款单片机,在网上也有很多的教材和开发板可供选择。在国内著名的电子论坛STM32/8 分论坛上,有很多参考资料。

 

大二的暑假,可以跟着学校的机器人队参加了一些机器人比赛,也可以自己做一个舵机机器人,比如六足机器人。舵机是机器人工程师的好朋友,一定要好好掌握。

 

但是

大二要做的,远远不止参加机器人比赛

 

大二结束的时候,你的Linux应该用的很熟练了,除了makefile,你也用起了cmake。你还应该有做到…

 

3000行代码

学校应该给大二到大三的学生有开设面向对象的程序设计,一般用Java或C++。在面向对象的程序课里面,一定要积累3000行左右的代码的开发经验。经典的程序设计练习通常是写游戏,比如俄罗斯方块,吃豆人等等,一定要自己能够做到完全手写一个完整的项目出来。

 

倒立摆

在大二这一年的学习中,你的课程里多多少少用到了Matlab。要注意的是,Matlab最强大的工具是Simulink,通过它你几乎可以仿真一切的物理系统和控制系统。笔者建议同学可以通过Simulink实现一个倒立摆。

强烈推荐一个很好的教材

http://ctms.engin.umich.edu/CTMS/index.php?example=Introduction§ion=SimulinkControl它详细介绍了一些经典的控制系统如何分析以及用Simulink实现。

倒立摆是机器人学中一个非常重要的模型,因为火箭、导弹、双足机器人、四足机器人,基本都是倒立摆的变形。自己做出来的simulink模型一定要存好哦~