• 问渠那得清如许

四大机器人公司(发那科,ABB,安川和库卡)的服务对象集中在工业界。他们生产的机器人往往都是庞然大物,锋芒毕露,让人远观而心畏,更别说近距离去接触它们。而工厂中机器伤人的事件也屡见不鲜。原因主要在于这类机器人一般是基于位置控制,它们严格按照预定的轨迹去运行,当人主动或被动地去改变它们的运动时,结果只是以卵击石,自讨苦吃。它们蛮如野牛,人们也避之唯恐不及。
Universal robot(UR) 自面世以来,以其简明亮丽的外形,轻巧紧凑的结构,一直成为市场争相追捧的焦点。笔者认为,UR给机器人带来的一个本质变化是实现了友好柔顺的人机交互。它会温顺地像绵阳一般,让人们有上前接近的冲动。UR友好人机交互的一个体现在于它的牵引示教,其机理官方没有公布,笔者这里试图尝试如何复现UR的示教。

  • 绝知此事要躬行

下图是一个机器人关节的组成。而在这个传动链中,一般会夹杂着间隙(柔减速器回程间隙)和变形(谐波减速器柔轮的变形,图中等效为一个弹簧),这些都会影响位置控制的精度,是传统工业机器人要极力解决的不利因素。

反工业机器人其道而用之,我们要充分地利用这部分间隙和变形,去实现我们期望的柔顺交互。UR结构中最特殊的部分是它的双编码器(分别测量电机角度和连杆角度)结构,我们的柔顺控制也紧紧围绕这点。

PS:关于柔顺的理解可参照zhihu.com/question/4774


实验条件所限,我们用一套自制的外骨骼系统去等效一个二连杆机械臂。

方案一:

第一种方案如下图,它的工作原理是这样的:初始时,人对连杆不施加力(tau_h=0),整个系统松弛状态,此时theta_m=theta_l;人在连杆端施加外力tau_h引起连杆运动,由于变形和间隙的存在,theta_m不等于theta_l,而我们的期望是theta_m=theta_l,经过PID控制器后,电机也会开始转动,theta_m会去追赶theta_l,这样机器人就动起来啦!

经过笔者的实际测试,这种方案完全可行,我可以用很小的力就带动机器人按照我的意图运动;从我的初步体验看,比起推动UR示教力更小。然而该方案有个重大的缺陷:当我不施加力到连杆时(tau_h=0),机器人会回到最初的平衡远点,在我们的系统中,就是回到自然垂直状态。这主要是由于重力的影响。

方案一不能与UR示教完全一致,game over!

方案二:

第二种方案如下图,它的工作机制是这样的:估计出人施加在连杆上的力矩,通过一个积分环节转换为电机端位置指令,再通过最基本的PID控制,让电机去追上转换的位置。通过设置其中的一些系数,放大人施加力的效果,可让人轻松地就推动机器人运动起来。这种方案等效于导纳控制:如何利用机械臂设计一个好的力柔顺控制(阻抗控制)实验?考虑到模型不确定性,应该重点考虑哪些控制变量? - 知乎


从实验结果看,我可以较轻松的推动机器人按照我的意图运动,跟UR体验效果差不多;且由于积分累积效果,即使后来我不加力了,机器人可保持在加力前的位置。

这种方案中最复杂的是估计人施加的力tau_h。我采取了如下方案:先估计出中间弹簧的刚度系数K,根据其两端的位置偏差,即可得到关节输出力矩;因为示教时都是低速下进行的,机器人的惯性力等可忽略,只考虑重力,那将这部分从弹簧测量的力矩中剔除,即可估计出人是加力矩。