KUKA LBR iiwa机械手是如何实现精密力控制的
- 作者 · 邱强
- 3214次浏览
- 2018-01-11
- 来源 · 知乎
- 分享
- 字体-+
作者先从讲解基础知识讲起,然后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外的其他项都求/测出来即可:
看左边:
根据电机的原理,有:
其中转矩常数 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和连杆角加速度可以通过测量得到(可能需要用到一些滤波算法)。
关节摩擦力 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 ,这样,上面的动力学公式就变成了如下形式:
看右边:
这个就是机器人的动力学模型了,工作主要分为建模与参数辨识。
动力学建模
这块没什么好说的,属于机器人学的基础内容,但就是比较繁琐一些。有牛顿法、拉格朗日法等,具体推荐看下面这本书
"Craig, John J. Introduction to robotics: mechanics and control. Vol. 3. Upper Saddle River: Pearson Prentice Hall, 2005. "
参数辨识
这一点会比较复杂一点。我先说整体思路。
在没有外力的时候,动力学公式变成如下形式: 我们只需要稍微整理一下右边的公式,把它改写成矩阵形式:
其中,矩阵A 里面就是各种跟机器人运动有关的项,如等等,而θ则是需要辨识的参数向量(如 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. 在采集数据的时候,输出数据 往往只能直接通过编码器测量得到一个角度q ,角速度和角加速度没法直接测量,为了提高准确度,建议采用卡尔曼滤波进行处理。
4. 输入、输出可能有噪声,最好滤波处理一下。但是,滤波会造成延时,所以,应该用同一个滤波器进行处理。
5. 直接用最小二乘法求解的话,可能对噪声比较敏感,可以采用其他的一些方法,如最大似然法等
6. 多轴机械臂的动力学模型比较复杂,需要进行一定的简化处理。这一块我没做过,所以具体不是很了解,我之后有时间看到相关内容后,会更新这部分。
至此,我们就能够通过检测机器人的运动状态,从而计算出机器人实际收到的外力大小,甚至可以计算出外力作用在哪个连杆。
剩下的就是各种力控制的内容了,如触停、拖动示教、阻抗控制。这块没深入研究过,所以就不详细写了。
了解了基本原理之后,我们就可以回答题主的三个问题了:
1. 介绍中说他使用了关节力矩传感器,那么请问现在市场上能够实现这个功能的传感器有哪些 ?
当然,其他的几个回答似乎在争论 DLR 是否用了关节力矩传感器。我觉得这个好像没什么好争论的,iiwa 基本上就是 DLR ,所以,它的相关信息可以看这篇论文:
它七个轴都安装有力矩传感器,据说力矩传感器的价格就占了 iiwa 总成本的一半以上。
所以,问题就是,还有没有其他能够实现这一功能(测量力矩)的传感器。这部分我没有专门研究过,网上搜一下,应该能找到不少,但价格估计都挺贵。
这里,我介绍几种自己制作的测力矩传感器:
就是直接在输出轴上贴应变片,然后通过桥电路计算输出轴的形变量,进而估计力矩。
原理可以看这篇论文
使用这种方法的代表就是 kinova 的机械臂了
这个问题就是对生产制造要求比较高,而且每个关节生产出来后都要单独标定。当时,在他们总部参观的时候就看到他们的工人在贴应变片。(生产车间内不能拍照,不要问我要照片。)
简单而言,这种方法就是在电机输出端与连杆输入端各放置一个编码器,通过编码器测量的偏差量计算传动轴的变形量,进而估计出力矩。
这种方法的代表(应该)就是 Universal Robot 了,之前实验室拆 UR 的时候(Universal Robots 的关节到底是怎么样设计的?)似乎是说有两个编码器。
这个的问题就是精度没有应变片的方式精度高,所以 UR 机器人的拖动示教会比 Kinova 或者 iiwa 更费力。
简单的说,就是在连杆输入端前面加一个弹簧,从而实现一些控制目的。
这样,我们只要用一个编码器直接测量弹簧的变形,就可以比较准确的知道力矩大小了。这种方法的代表就是 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. 机械手力控制的难点在哪里?
因为没做过,所以这方面不了解。
但单从外力估计的角度来讲,对于稍微复杂点的系统,动力学参数辨识、摩擦力建模都是难点。
而且,还有一个难点:如果你用的是直接购买的机器人,那么,九成(甚至更高)以上几率,你只能控制它的关节位置,无法控制到速度环或者力矩/电流环。这样一来,上面这些东西可能就都没法做了。
2015年的东京国际机器人展会上,KUKA推出了LBR iiwa轻量级机械手,相对于以往的工业机械手,它最大的亮点在于能够实现精细的力控制,比如去碰碰鸡蛋啊,和人亲密接触啊等等。对力的控制能力,是未来作业型机械手的必备条件,这种配备力控制能力的机械手,一定是未来的发展方向。详情请看链接:LBR iiwa - ii am industry 4.0 (里面的视频可能国内看不了)
那么问题来了,题主很关心下面几个问题:
1,介绍中说他使用了关节力矩传感器,那么请问现在市场上能够实现这个功能的传感器有哪些?
2,如果不用关节力矩传感器可以么?有没有其他方法实现?
3,机械手力控制的难点在哪里?
fly qq谢邀回复:
谢邀。原来还有这么好玩且没答过的问题。
(当然,在控制方面,我真的是外行,下面的只是大概写一下,不了解的部分我会说明)。
先说原理
机械臂实现触停、拖动示教等力控制的关键是『检测到外力』,或者确切的说,是检测到每一个驱动器(不一定是电机输出端,而是提供力的模块)所受的外力。
这时候就要看看我们的动力学公式了。
你看, τm 是电机输出的力矩,但是,经过谐波减速后(n 是减速比),力矩会成倍增大;但是,在减速的过程中,也会引入摩擦力 τ f;这样,再减去外力 τ ext 就得到机器本体所受的所有力了。
右边就是机器人的动力学模型,其实就约等于F=ma ,只不过,各项系数跟机器人的关节角度有关、而且多了科氏力、离心力、重力等。
后面,我们要做的就是把除了 τ ext外的其他项都求/测出来即可:
看左边:
根据电机的原理,有:
其中转矩常数 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和连杆角加速度可以通过测量得到(可能需要用到一些滤波算法)。
关节摩擦力 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 ,这样,上面的动力学公式就变成了如下形式:
看右边:
这个就是机器人的动力学模型了,工作主要分为建模与参数辨识。
动力学建模
这块没什么好说的,属于机器人学的基础内容,但就是比较繁琐一些。有牛顿法、拉格朗日法等,具体推荐看下面这本书
"Craig, John J. Introduction to robotics: mechanics and control. Vol. 3. Upper Saddle River: Pearson Prentice Hall, 2005. "
参数辨识
这一点会比较复杂一点。我先说整体思路。
在没有外力的时候,动力学公式变成如下形式: 我们只需要稍微整理一下右边的公式,把它改写成矩阵形式:
其中,矩阵A 里面就是各种跟机器人运动有关的项,如等等,而θ则是需要辨识的参数向量(如 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. 在采集数据的时候,输出数据 往往只能直接通过编码器测量得到一个角度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.”
这个问题就是对生产制造要求比较高,而且每个关节生产出来后都要单独标定。当时,在他们总部参观的时候就看到他们的工人在贴应变片。(生产车间内不能拍照,不要问我要照片。)
- 双编码器式
简单而言,这种方法就是在电机输出端与连杆输入端各放置一个编码器,通过编码器测量的偏差量计算传动轴的变形量,进而估计出力矩。
这种方法的代表(应该)就是 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. 机械手力控制的难点在哪里?
因为没做过,所以这方面不了解。
但单从外力估计的角度来讲,对于稍微复杂点的系统,动力学参数辨识、摩擦力建模都是难点。
而且,还有一个难点:如果你用的是直接购买的机器人,那么,九成(甚至更高)以上几率,你只能控制它的关节位置,无法控制到速度环或者力矩/电流环。这样一来,上面这些东西可能就都没法做了。
本文首发于知乎,作者:邱强,原文链接:https://www.zhihu.com/question/41549666,本网站经授权发布,如若转载请联系原作者。
参与评论