开篇

Hello小伙伴们大家好,今天来聊一聊机器人柔顺控制以及其中的姿态变换相关的内容。

关于柔顺控制这个名词相比研究机器人的都不陌生,那到底柔顺控制在描述一个什么事呢?

我们知道,在工业机器人运动过程中,我们会对其进行轨迹规划,然后使用控制算法,比如pid等对其进行控制,让机器人实现跟踪期望轨迹的功能。但是当我们讨论协作机器人的时候,就不能只依靠单方面的规划了。

因为协作机器人常被用来参与到一些需要接触且需要柔顺接触的场景,比如打磨,装配等,因此为了保护机器人及工件的安全,更为了保护人的安全起见,就必须让机器人拥有力感知的能力,当他在运动过程中遇到阻碍,产生很大接触力的时候,能够对期望的目标轨迹进行一定的便宜,起到柔顺的效果。

简介

关于柔顺控制,我们常见的公式是这个

M(xd''-x0'')+B(xd'-x0')+K(xd-x0)=F+Fenv

首先来解释下这里面的符号:M是惯性系数,B是阻尼系数,K是刚度系数,F是系统自身产生的力,Fext是环境作用到系统上的力,xd是“当前”的轨迹,x0是事先规划的轨迹。因为当发生接触的时候,我们往往会使用例如六维力传感器这种测量设备测量出接触力,也就是F和Fext的合力,因此这里也可以也称这样

M(xd''-x0'')+B(xd'-x0')+K(xd-x0)=Fe

所以当不接触且位置内环控制精准的话,这个系统其实是不会起作用的。

溯源

我们为什么需要这个系统呢?

因为就像在上面提到的,如果仅凭位置规划,这时的系统是一个顽固的,像是没有智慧,不会变通的系统。拿机器人开门这个场景来说,当你想要拉着门沿着预定轨迹开开的时候,如果视觉定位或者机器人定位精度不准,并没有走期望的轨迹,那么这个时候很可能就会在机器人末端执行器与门之间形成很大的作用力,而因为这时的系统没有“自我调节”能力,因此只能眼睁睁着看着一切被破坏掉而无能为力。但是如果这时我们在机器人末端与门之间放上一个弹簧呢?这样的话情况立刻就变了。

因为当你走那个有偏差的轨迹的时候,由于这个时候在机器人和门之间会存在一个作用力,而这时作用力会作用到弹簧上,弹簧会通过拉伸和收缩去抵消掉这部分的作用力。而在真实系统中,是不会给你安放一个弹簧的,因此这个时候就需要通过一个虚拟的弹簧系统,用它来调节当前的轨迹,使其回到正确的轨道上来,以此来抵消这部分作用力。而这就是应用导纳控制思想的一个最简单的例子,这个系统的动力学模型可以写成这种形式

K(xd-x0)=Fe

当然,只有弹簧的话系统会产生震荡,为此我们又加上了阻尼器和物体质量,系统也就变成了之前提到的那个式子。

阻抗和导纳

M(xd''-x0'')+B(xd'-x0')+K(xd-x0)=F+Fenv

将这个式子变变形,分别可以得到对应的阻抗控制和导纳控制形式。

F=M(xd''-x0'')+B(xd'-x0')+K(xd-x0)-Fenv

在阻抗控制中,由已经发生的轨迹偏移来确定系统的力,也就是说,这时是输入为位置,输出为力的控制方式。

xe''=xd''-x0''=M^(-1)[Fe-B(xd'-x0')-K(xd-x0)]

在导纳控制中,由已经发生的轨迹偏移以及接触力来确定下一步的运动,因此,这时是输入接触力,输出运动的控制方式。

我们注意到,在上面提出的小例子中,我们得到的是位置偏移量,因此xd是未知的;而在上面导纳控制的式子中,却是将已经发生的位置偏差和速度偏差都作为一个常量,进而得到加速度偏移量。

这是因为在仅由弹簧组成的系统中,我们得到的是系统稳定后的偏移量;而在弹簧阻尼质量模型则更能反映系统的动态特性,也就是当机器人与外界发生接触,并在力的作用下已经发生了位移和速度的偏差,这时我们由力得到相应的加速度,然后通过积分以及当前速度偏差得到修正后的速度偏差,最后再由积分以及当前位置偏差得到修正后的位置偏差,并将结果赋值给下一次输入期望的轨迹上,最后由伺服控制系统控制机器人到达修正后的位置。

姿态变换

在柔顺控制中,由于末端力传感器得到的信息中有力矩信息的存在,因此也就是说我们可以利用此进行姿态控制。当系统发生微分运动的时候:这个时候绕x,y,z轴的旋转满足交换律;旋转量就等于绕等效转轴旋转时各个轴的分量乘以旋转角度。因此由雅可比矩阵得到的旋转角速度,也可以将其看成是绕等效转轴描述下的速度表示。

因此在位置偏差的姿态部分,我们首先使用旋转矩阵表示姿态偏差,然后将其转换到等效转轴描述,也就是绕等效转轴旋转一个角度。

在速度偏差的姿态部分,使用的是期望速度和由雅可比矩阵得到的当前速度之差;

测得的力矩信息,则可以看作是等效转轴描述的扭矩信息(角加速度)。

由此我们得到的扭矩(阻抗)或者角加速度(导纳)则是经过系统调整后,在新的等效转轴方向的力或者加速度。

但是需要记住的是,当由加速度得到速度的时候我们可以通过直接叠加的方式进行,由于其与旋转次序无关,因此可以由加速度得到修正后绕各个轴的旋转速度,进而可以理解为绕等效转轴的旋转速度;但是当由速度得到角度的时候,由于旋转速度的等效转轴与旋转角度的等效转轴不一定一致,因此不能直接进行叠加处理。所以需要再次转换为旋转矩阵描述后得到修正后的合旋转,然后送入期望轨迹进行控制。

其他

在控制系统的设计部分,首先需要注意与位置pid的区别。由于基于位置控制的pid算法中,没有外力的存在,因此我们可以通过增量式pid,每次仅需要对误差进行补偿即可;但是在力控系统中,系统的输入必须是绝对位置信息。

然后需要注意的是系统的输入以及偏差的表示方式。系统的原始输入是x0,偏差为xd-x0,其方向是和力的方向一直的。

参考链接

知乎韩冰老师https://zhuanlan.zhihu.com/p/133619926

https://zhuanlan.zhihu.com/p/126338809

https://www.zhihu.com/question/43633361/answer/124417009

文章编写有些仓促,其中不对之处,还请批评指正。

May the force be with you!