机器人控制器开发涉及的专业众多,需要一个团队完成。精通控制算法的机器人专业的博士对于软件开发可能也一窍不通,看到进程、任务调度、mutex这些计算机名词头大;训练有素的软件工程师对于齐次变换矩阵、旋量这些概念则是一头雾水;除此以外,项目还需要驱动工程师、硬件工程师,还要有工程师懂总线通信、熟悉工艺。由于开发机器人控制器成本高而且困难,大部分的厂家会选择在别人的基础上开发。
控制器方案选择
单处理器还是多处理器?早期CPU的计算能力较弱,为了提高运行速度,不得不采用多CPU方案,一些计算量大的任务被剥离出来独占一个CPU。比较有代表性的就是各种控制板卡的方案,例如PMAC、固高。固高的GUC-ECAT控制器单独设计了一个DSP和一个FPGA来执行插补、轨迹规划等任务,另一个CPU一般执行非实时的人机交互,编程开发等任务。如果你拆开固高的机器人控制器,就会发现它有两个计算核心(Intel CPU和 DSP/FPGA),就像游戏电脑会有独立的显卡一样。当然,多一个核总没有坏处,比如NI的机器人控制器roboRIO除了有ARM核还带了一个FPGA,可以想象它的数据采集会比较快。也难怪它被用在了对控制周期和采样速率要求较高的场合,例如MIT的四足机器人(用的是cRIO-9082)。
随着CPU核心数量增加和计算能力的提升,单CPU的性能越来越强,因此机器人控制器只使用一个CPU就够了,所有的实时和非实时任务都运行在这一个CPU上,由操作系统进行调度。
操作系统还是裸跑?
一般认为操作系统会导致额外的开销,毕竟上下文切换需要时间,但是半导体技术和软件技术的进步已经使这个差别非常小了。程序裸跑在硬件上适合比较简单、逻辑不复杂的应用场合,但是其缺点也是显而易见的,如果升级或者改变硬件平台,程序就要重写。所以现在的机器人(尤其是机械臂、无人驾驶汽车)控制器无一例外都使用了操作系统。
半成品软件还是软PLC?
ROS和OROCOS是半成品,它们更适合学术研究,需要用户对整个系统比较熟悉才能使用,对用户的编程能力有较高的要求,一般用在产品还没有定型的阶段或者用户不需要经常变换应用任务的场合。例如无人驾驶可以使用,因为无人驾驶的整个业务逻辑和任务基本不会有大的变动。正如手机或者汽车行业,厂家不会把电路板或者底盘直接卖给客户,因为客户不会使用。面向终端客户的产品必须要考虑产品本身的易用性和客户的能力。所以如果你的产品面向的是没有研发能力的终端客户,必须要有规范易用的编程界面和简洁高效的编程语言,这是ROS或OROCOS这种软件所不具备的。
而软PLC自带IDE,用户可以直接在IDE中直观地编写自己的应用程序。如果自带的函数不够用,用户再去底层实现自己的函数。开发效率更高,使用更友好。因此,现在的机器人控制器都会采用软PLC的实现方式。
是的,PLC编程简单而且皮实耐用,这是它设计的目的,但是机器人正在变得越来越不简单,更多的功能被加入进来,机器视觉、自主导航、运动规划、多轴运动控制,这些要求控制器提供更强大的支撑,而不仅仅是低端的逻辑控制或者简单的数值计算。所以,对于机器人控制来说,传统的硬PLC应该被淘汰了。
我们需要的控制器软件应该足够开放,允许用户随时调整程序结构、加入新的功能,同时它自身应该提供足够的底层基础函数,例如线性代数、数学优化、插值拟合、方程求解、甚至图像处理、运动控制。在使用方式上,为了兼顾客户(不能要求所有客户都能自己开发gaoji功能),它还是尽量简单好,zuihao与PLC的使用差别不大。