KUKA LBR iiwa机械手是如何实现精密力控制的

作者先从讲解基础知识讲起,然后3块分析KUKA LBR iiwa机械手是如何实现精密力控制的。
题主邀请:

2015年的东京国际机器人展会上,KUKA推出了LBR iiwa轻量级机械手,相对于以往的工业机械手,它最大的亮点在于能够实现精细的力控制,比如去碰碰鸡蛋啊,和人亲密接触啊等等。对力的控制能力,是未来作业型机械手的必备条件,这种配备力控制能力的机械手,一定是未来的发展方向。详情请看链接:LBR iiwa - ii am industry 4.0 (里面的视频可能国内看不了)
那么问题来了,题主很关心下面几个问题:
1,介绍中说他使用了关节力矩传感器,那么请问现在市场上能够实现这个功能的传感器有哪些?
2,如果不用关节力矩传感器可以么?有没有其他方法实现?
3,机械手力控制的难点在哪里?


fly qq谢邀回复:

谢邀。原来还有这么好玩且没答过的问题。

(当然,在控制方面,我真的是外行,下面的只是大概写一下,不了解的部分我会说明)。


先说原理

机械臂实现触停、拖动示教等力控制的关键是『检测到外力』,或者确切的说,是检测到每一个驱动器(不一定是电机输出端,而是提供力的模块)所受的外力。

这时候就要看看我们的动力学公式了。

你看, τm  是电机输出的力矩,但是,经过谐波减速后(n 是减速比),力矩会成倍增大;但是,在减速的过程中,也会引入摩擦力 τ f;这样,再减去外力 τ ext 就得到机器本体所受的所有力了。

右边就是机器人的动力学模型,其实就约等于F=ma ,只不过,各项系数跟机器人的关节角度有关、而且多了科氏力、离心力、重力等。

后面,我们要做的就是把除了 τ ext外的其他项都求/测出来即可:


看左边:

根据电机的原理,有:
公式2
公式3


其中转矩常数 mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language: ZH-CN;mso-bidi-language:AR-SA">KT 和转子惯量 mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language: ZH-CN;mso-bidi-language:AR-SA">Jm可以直接从电机规格书上查到,减速比n固定已知,电枢电流 mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language: ZH-CN;mso-bidi-language:AR-SA">IA和连杆角加速度符号1可以通过测量得到(可能需要用到一些滤波算法)。

关节摩擦力 mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language: ZH-CN;mso-bidi-language:AR-SA">τ mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA">f 这个就比较复杂了,需要进行辨识。

摩擦力辨识这一块我不是很了解,而且,据我所知,我们目前还没有一个通用、权威的摩擦力模型。当然,普遍上认为,摩擦力主要由三部分组成:Stribeck, Coulomb 和 viscous friction,所以,一般是采用一些能覆盖这三种力的经验公式:





在辨识的时候,如果采用的是线性模型,那么可以把它跟机器人的其他动力学参数一起辨识(具体后面介绍);如果是非线性模型,那么,可以每次固定其他轴,单独对某一轴的摩擦力进行辨识。

这里的主要难度是,如何获得一个比较好的摩擦力模型,就我了解的范围来讲,好像是暂时无解。

既然摩擦力比较难建模的话,我们也有另外一个方法可以绕过摩擦力,那就是直接在减速器的输出端安装一个力矩传感器,直接测量给连杆提供的力矩 mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language: ZH-CN;mso-bidi-language:AR-SA">τ mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA">j ,这样,上面的动力学公式就变成了如下形式:

公式4


看右边:

这个就是机器人的动力学模型了,工作主要分为建模与参数辨识。

 动力学建模

这块没什么好说的,属于机器人学的基础内容,但就是比较繁琐一些。有牛顿法、拉格朗日法等,具体推荐看下面这本书
"Craig, John J. Introduction to robotics: mechanics and control. Vol. 3. Upper Saddle River: Pearson Prentice Hall, 2005. "

 参数辨识

这一点会比较复杂一点。我先说整体思路。

在没有外力的时候,动力学公式变成如下形式:
公式5
我们只需要稍微整理一下右边的公式,把它改写成矩阵形式:
公式6
其中,矩阵A 里面就是各种跟机器人运动有关的项,如符号2等等,而θ则是需要辨识的参数向量(如 mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language: ZH-CN;mso-bidi-language:AR-SA">Ixx+md2)。换句话说,我们不需要具体求出每个参数的实际数值,只需要求出θ的系数即可,这组系数就叫做 BPS (base parameters set)。

好了,你看,上面就是你们熟悉的Ax=b 形式,可以用各种方法(如最小二乘法)求解了。

当然,其中在实施的时候有几个细节可能需要注意一下:

1. 如果要考虑摩擦力,当摩擦力是线性模型时,可以把它一起写入上式中,同时进行辨识。
2. 在采集数据的时候,激励函数(输入 mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language: ZH-CN;mso-bidi-language:AR-SA">τ mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA">j)不能随便选择,这个在系统辨识理论里有很多方法的,如采用逆重复M序列、傅里叶序列等。
3. 在采集数据的时候,输出数据 符号3 往往只能直接通过编码器测量得到一个角度q ,角速度和角加速度没法直接测量,为了提高准确度,建议采用卡尔曼滤波进行处理。
4. 输入、输出可能有噪声,最好滤波处理一下。但是,滤波会造成延时,所以,应该用同一个滤波器进行处理。
5. 直接用最小二乘法求解的话,可能对噪声比较敏感,可以采用其他的一些方法,如最大似然法等
6. 多轴机械臂的动力学模型比较复杂,需要进行一定的简化处理。这一块我没做过,所以具体不是很了解,我之后有时间看到相关内容后,会更新这部分。

至此,我们就能够通过检测机器人的运动状态,从而计算出机器人实际收到的外力大小,甚至可以计算出外力作用在哪个连杆。

剩下的就是各种力控制的内容了,如触停、拖动示教、阻抗控制。这块没深入研究过,所以就不详细写了。


了解了基本原理之后,我们就可以回答题主的三个问题了:

1. 介绍中说他使用了关节力矩传感器,那么请问现在市场上能够实现这个功能的传感器有哪些 ?

当然,其他的几个回答似乎在争论 DLR 是否用了关节力矩传感器。我觉得这个好像没什么好争论的,iiwa 基本上就是 DLR ,所以,它的相关信息可以看这篇论文:

Albu-Schäffer, A., et al. "The DLR lightweight robot: design and control concepts for robots in human environments." Industrial Robot: an international journal 34.5 (2007): 376-385.



它七个轴都安装有力矩传感器,据说力矩传感器的价格就占了 iiwa 总成本的一半以上。

所以,问题就是,还有没有其他能够实现这一功能(测量力矩)的传感器。这部分我没有专门研究过,网上搜一下,应该能找到不少,但价格估计都挺贵。

这里,我介绍几种自己制作的测力矩传感器:

  • 应变片式

就是直接在输出轴上贴应变片,然后通过桥电路计算输出轴的形变量,进而估计力矩。


原理可以看这篇论文
“Taghirad H D, Bélanger P R. Intelligent built-in torque sensor for harmonic drive systems[J]. Instrumentation and Measurement, IEEE Transactions on, 1999, 48(6): 1201-1207.”
 
使用这种方法的代表就是 kinova 的机械臂了

这个问题就是对生产制造要求比较高,而且每个关节生产出来后都要单独标定。当时,在他们总部参观的时候就看到他们的工人在贴应变片。(生产车间内不能拍照,不要问我要照片。)

  • 双编码器式

简单而言,这种方法就是在电机输出端与连杆输入端各放置一个编码器,通过编码器测量的偏差量计算传动轴的变形量,进而估计出力矩。

这种方法的代表(应该)就是 Universal Robot 了,之前实验室拆 UR 的时候(Universal Robots 的关节到底是怎么样设计的?)似乎是说有两个编码器。

这个的问题就是精度没有应变片的方式精度高,所以 UR 机器人的拖动示教会比 Kinova 或者 iiwa 更费力。

  • 串联弹性驱动器(SEA)

简单的说,就是在连杆输入端前面加一个弹簧,从而实现一些控制目的。


这样,我们只要用一个编码器直接测量弹簧的变形,就可以比较准确的知道力矩大小了。这种方法的代表就是 Rethink 的 Baxter 机器人了。


当然,这个的问题就是在位置控制精度上有一定问题。Baxter 的精度真的只能用于科研,据说 Sewyer 会好点,但没用过就不评论了。
 
之后,我们就来看看第二个问题了:


2. 如果不用关节力矩传感器可以么?

这当然是可以的。

  • 电流估计力矩

因为我们一开始的公式就是不用力矩传感器的形式。所以,如果我们能精确估计出摩擦力(或者摩擦力可忽略——直驱),那样的话,就可以通过驱动器测量的电流来估计连杆输入力矩了。

这个我之前有做过类似的实验,就是用一个单轴旋转平台,通过电流估计力矩、参数辨识等实现了高精度的碰撞检测、拖动示教等,甚至可以检测到一张纸张的碰撞。


具体可以看里面的视频:听说现在协作机器人很火,所以我也做了1/7个。

  • 末端力传感器

由于机器人一般是末端进行工作,如果我们可以直接测量得到末端的力大小,那么也可以实现很多好玩的功能。当然,这种力传感器也不便宜。


  • 触觉传感器

就是在机器人的连杆上安装类似皮肤功能的力觉/触觉传感器,如下面这篇论文里就有介绍

“Cirillo, A., et al. "A Conformable Force/Tactile Skin for Physical Human–Robot Interaction." IEEE Robotics and Automation Letters 1.1 (2016): 41-48. ”


目前来说,似乎还没有廉价、可靠的方案。


然后,就是最后一个问题了:

3. 机械手力控制的难点在哪里?

因为没做过,所以这方面不了解。

但单从外力估计的角度来讲,对于稍微复杂点的系统,动力学参数辨识、摩擦力建模都是难点。

而且,还有一个难点:如果你用的是直接购买的机器人,那么,九成(甚至更高)以上几率,你只能控制它的关节位置,无法控制到速度环或者力矩/电流环。这样一来,上面这些东西可能就都没法做了。

参与评论