有学过机器人编程的同学都知道,不论是乐高还是优必选,让机器人按自己设计的方式挥挥手,跳个舞还是比较容易的,只要在编程界面下写出相应的动作语句就可以了,如“左臂旋转60度”,“往前进10厘米”等。如果创作者头脑灵活的话,完全可以创作出非常帅酷的动作。
图1:优必选Alpha机器人
看起来好像简单,但机器人要完成一个动作要付出的努力要比想象的复杂的多。以一个简单的机械臂为例,我们的目标是让顶端到达某个指定位置。为实现这一目标,编程人员只需给出一条程序,告诉机器人指定位置的坐标就可以了,但机器人要做什么呢?首先,它要依运动学原理,计算出要将顶端送到指定位置,机械臂各个连杆之间的夹角应如何随时间发生变化,并设计加速与减速过程;之后,它要依动力学原理,计算出要完成上述夹角变化,应该在连杆的动力部件上加多大的力矩;最后,为实现稳定的动作,还需要参考传感器给出的反馈,依自动控制原理即时调整力矩大小[1]。
图2:机械臂示例
前面描述的计算过程只是最简单的机械臂动作的实现方法,人形机器人的运动学和动力学特性更为复杂,机器人的设计者需要付出更大努力,只不过编程人员对此不必关注。
值得说明的是,上述通过编程控制机器人动作的方式还谈不上智能。稍微智能的方式是通过示教完成任务,例如,由人拉着机械臂移动到指定位置,机械臂记住各个关节的运动轨迹,并通过动力学计算完成相似的移动过程。通过类似的示教,可以教会机器焊接、举重、做刀削面。
随着深度强化学习的兴起,一些机器人可以通过自我学习来学会完成一些简单的任务,如开门,抓取物品等。图4是Google的研究者利用4台机器人练习开门技巧的例子。值得说明的是,这些自动学习的机器人可以直接学习在特定状态下需要的力矩大小,因此不需要运动学和动力学计算。基于学习的机器人更加智能,但因为物理机器人的学习成本高,到目前为止还只能用于特定任务上。
图3:Google的研究者用群体机器人自动学习开门技巧[2]
总结一下,机器人如何完成动作有两种方式:基于编程的机器人通过运动学、动力学计算获得如何动作的控制信号(力矩);基于学习的机器人通过学习得到的模型自动获得完成动作所需要的控制信号。前者多用于通用任务,后者多用于特定任务。两者也可以结合起来,大目标通过编写程序确定,小目标通过学习实现。比如在机器开门的实验中,由人来设计打开门的动作过程,但对过程中的每一个状态利用学习方法获得力矩,保证每个动作顺利完成。随着人工智能技术的进步,未来机器人编程会越来越简单,人们只需要告诉机器人工作目标是什么,他应该就能自主工作了。
参考文献:
[1] 王东,人工智能,清华大学出版社,2019.10.
[2] Yahya A, Li A, Kalakrishnan M, et al. Collective robot reinforcement learning with distributed asynchronous guided policy search[C]//2017 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). IEEE, 2017: 79-86.