搞机器人的路过说一下我们平时常有的工作内容:
自己的电脑连上旁边的机器人,发个指令让机器人跑个定位算法,屋里跑一圈采数据回来,数据存到服务器上。
这里面涉及的技术点和编程语言,我随便列一下:
电脑连机器人:ssh,remote X,IP配置,路由管理,socket编程,远程文件系统,为了方便调试再写写shell什么的。随着系统复杂度的增加涉及更多技术。
发指令控制机器人:socket编程,嵌入式通信,嵌入式编程,实时系统理论,PID控制论,电机控制理论。
跑个定位算法:通过视觉的定位要学习射影几何图像处理统计概率;通过wifi信号的定位要学习通信模型信号处理:整体为了做多传感器融合还要学线性系统线性估计传感器同步技术深入理解各种传感器的特性和信号处理技术。基本是各种博士阶段的理论知识,当然我最近发现随着CV和robotics领域的蓬勃发展,很多技术慢慢成熟,大家一起潜心研究,比较优秀的本科生或者研究生还是能搞得懂的。
采数据回来存电脑里:数据结构设计,数据库使用,高带宽数据流的存储和可视化,又是远程文件系统。
上面说的这些有些不太准确,但基本都是做系统的必须技术点。
要想把东西做的更讲究,那要求更高。
比如我们想给电脑上发指令的控制界面做个逼格高一点的前端,HTML+CSS+JS可以上,QT可以上,微软那一套也可以上。这两年移动设备很流行,大家发现带机器人出去到荒郊野外调试的时候捧个电脑很累,所以写个Android或者iOS的控制界面逼格能再高一点,而且确实提高效率。所以不会一两种UI技术根本不好意思出去调试机器人。
比如通信链路要加密,数据做校验,AES,CRC啥的别人说总得知道是啥,有时人们还会问你要不要公钥加个密更保险一点。
上面说的机器人其实就是轮式小车,要是多轴飞行器还得再考虑一下动力模型和刚体旋转的知识。人形机器人请再想想各种复杂的数学模型知识。
传感器有快有慢,有互补滤波有高通滤波有低通滤波有高斯滤波有卡尔曼滤波,三四个领域都用filter这个词然而意思基本不一样,不仔细学学,和人出门聊天都站不到一个channel上。
比如这个系统要多个人参与进来调了,svn git bug report都得用起来,软件工程也得用起来。系统跨越了个人电脑服务器嵌入式设备路由器等等,分team都不好分。请记得机器人第二定律:机器人工程师之间的友谊会被“到底是谁那部分出了bug”这样的问题破坏。
比如我们要优化系统的效率了,多线程得用,异步通信得用,汇编有时也要抠一抠,编译原理不知道一点点还没法下手优化。数据量太大了也要做压缩算法,能UDP的地方不敢用TCP等等这些事情都得浅尝辄止。
说到这里还没谈硬件。虽然硬件设计制造的产业相对独立,可以请别人来做,但是计算单元的选型、传感器芯片的选型、各种外设电路,不过问一下别人也是设计不好的,毕竟是机器人的心脏和器官。所以硬件知识不可不学。
上面说的这些其实也没多讲究,再讲究点,机器人的机械也要亲自做一下,拧螺丝接电线这都是日常调试的一部分,不会拧螺丝的程序员不是好工程师,机械棱角和结构细节没做好的话,不仅容易导致莫名其妙的硬件故障,还可能伤到调试人员。此外为了带机器人出去到街上调试,一定要能hold住,工业设计什么的必须要注意,外观不能输。
我一直觉得,软件业同行们说的全栈工程师最多是个三分之一栈。不能徒手造一个能跑能跳的机构出来怎么能算是全栈。所以我在以前的一个回答里写了十条招聘要求,这真的是我们会常常用到的技术:
大疆无人机的技术核心是什么?成为大疆的工程师需要具备哪些素质和能力? - 杨硕的回答机器人行业发展缓慢,主要的一个原因就是工程师太难培养。我是恨不得看到全世界的电子和计算机相关专业的学生人人都能徒手造一个能跑能跳的机构出来的,然而有这样热情和毅力的人毕竟是少数。另外因为行业发展缓慢,未来也并不清晰。技能需求类似的航空航天工业基本已经成建制成体系了,然而大一点的机器人公司没有几个(工业机器人不算,那是自动化公司)。亲朋好友以为你已经在造终结者了,其实你穷尽平生所学也只能让一堆乱七八糟的机械结构尽量走上几米直线。家里人问起来,你不知道如何解释。
所以我在另一个回答里(
2015 年有哪些值得加入的科技公司? - 杨硕的回答)说:“我希望你拿起锤子和焊枪就能分分钟造出一个机器人来;我希望你对数学抱有热情,be comfortable with equations;我希望你热爱飞翔的感觉,热爱向别人讲述自己的看法和方案;我希望你可以理性地分析物理对工程的种种限制,也能够感性地用毅力和决心去克服这些限制;我希望你有把大卫从花岗岩里雕刻出来的梦想,同时也有一点一点抠敲岩石的毅力;我希望你邮件给我的不是普通的简历,而是你的热情,你的执着,你对工程学的信仰。我希望你是一个与众不同的人。” 好多人告诉我这段话看了很感动,然而我觉得,理解什么叫做一点一点抠敲岩石的人并不多。
所以工作稳定的程序员每天学点机器人相关的技术,长久以往,肯定能变成很优秀的工程师的。