当前位置: 华文星空 > 知识

阻抗控制分析杂谈

2021-03-09知识

考虑一个二阶系统 ma+cv+kx = \tau 。进行反馈控制 \tau_{input} = k_x x ,得到 ma+cv+kx = k_x x ,即 ma+cv+kx = (k_x-k) x ,记为 ma+cv = k_{sys} (x-0)

参考

可知,若 k_{sys} 小于0,则该式右侧定义了一个刚度为 k_{sys} ,原点为0的弹簧,右侧表达了动态响应,稳态情况下应当趋于零。因此,在该式的控制下,系统终将到达0,如下图所示(本文所有的弹簧的原始长度均为0)

假设此时出现了一个物体,如下图所示

在小球趋近0的时候,会碰在物体上,假设物体的刚度为k,得到弹力为 \tau = k_{env}*(x-x_{env}) ,同样的,根据上面参考的文章,该式定义了一个刚度为 k_{env} ,原点为 x_{env} 的弹簧,如下图所示

则小球最终将在两个原点之间平衡,具体位置取决于两个弹簧的刚度。

继续考虑二阶系统 ma+cv+kx = \tau ,将该式中的tau分解为输入力和环境外力,得到 ma+cv+kx = \tau_{input} + \tau_{env} ,根据上述描述可以知道,由于有 \tau_{env} 的存在,x无法到达0。为了达到零,有三种方法:

  1. 增大 k_x ,使得上述两个弹簧的平衡点接近于0。
  2. 输入力计算中添加积分环节,对x进行积分,如果x不最终达到0,则输入力会一直增大,不断将物体向0拉近,最终平衡位置只能在0,否则输入力会一直增大,不可能稳定
  3. 对环境力进行补偿,输入力矩设置为 \tau_{input} = k_x x- \tau_{env} ,这样的话系统的整体表达为 ma+cv+kx = k_x x ,最终趋于0。

三种方式各有优劣,这里暂时不一一列举。但是需要知道的是,机器人一般都需要有精准的定位能力,因此机器人控制的目标一定是使物体到达0(或者其他设置的目标)

以上三种方法的一个直接结果就是,系统的输入力矩会非常大,至少要和环境力矩平衡。可以考虑我们给机器人发送指令,要求机器人到达0,但是在机器人和0之间有一堵墙,机器人撞到墙上的情况,机器人无法提供如此大的力矩,损坏或报错,而且无法到达0.

既然机器人无法到达0,那么我们就需要对机器人采用不同的控制方式。这里为了方便描述,我们采用上述的对环境力进行补偿的方法来说明问题。

在这种控制方式下,输入力矩设置为 \tau_{input} = k_x x- \tau_{env} ,外力被完全补偿,系统的整体表达为 ma+cv+kx = k_x x 。为了考虑环境外力,我们就需要主动「添加」环境力进来,使得系统整体描述为 ma+cv+kx = k_x x + k_f \tau_{env} , 这样的话系统的输入力矩就变为了 \tau_{input} = k_x x + k_f \tau_{env}- \tau_{env} .这种情况下,仍考虑 \tau_{env} = k_{env}*(x-x_{env}) ,得到

ma+cv+kx = k_x x +k_f k_{env}*(x-x_{env}) = k_{sys}x+k_f k_{env}*(x-x_{env}) ,

又回到上面的情况,只是环境刚度得到了修改。

以上便得到了阻抗控制的表达: \tau_{input} = k_x x + k_f \tau_{env}- \tau_{env} 。这是最简单的表达,亦即刚度控制的表达,可以在该公式中添加其他项目(如v和a),进行更加丰富的控制,但是总的意义是一致的。

以上讨论中,我们默认假设了Ksys,Kenv,Kf*Kenv为负,因此表达为一个弹簧(引力中心)。

当Ksys<0,Kf*Kenv<0时,二者都表现为引力弹簧,系统最终稳定在0和Xenv之间。另一种情况是Ksys>0,Kf*Kenv>0,二者均表现为斥力中心,此时系统仍有可能平衡在0和Xenv之间,但是一旦系统位置位于0和Xenv之外,则所受到的合力将使系统向无限远移动,而不是二者之间的平衡位置。

当Ksys>0,Kf*Kenv<0时,0处表现为一个斥力中心,Xenv处表现为一个引力中心,则系统最终位于Xenv外,在某些情况下,由于斥力会一直大于引力,则系统趋近于无穷远。

同样的,当Ksys<0,Kf*Kenv>0时,则系统最终位于0外,在某些情况下,由于斥力会一直大于引力,则系统趋近于无穷远。。

取一个理想加速度控制系统,其m=1,c=0,k=0。阻抗控制描述同上描述为 \tau_{input} = k_x x + k_f \tau_{env}- \tau_{env} 。为了让系统保持稳定,则必须做到Kx<0,Kf>0。

事实上,稳定位置满足 k_{sys}*x + k_f k_{env}(x-x_{env}) = 0 ,得到 x_{bal} = \frac{k_fk_{env}}{k_{sys}+k_fk_{env}}x_{env} 这里取 x_{env} = 1 ,横轴表示Ksys,纵轴表示Kf*Kenv,得到平衡位置如图所示

取一个理想加速度控制系统,其m=1,c=0,k=-1。环境刚度位k=-1000,如上绘图,得到

由于Kenv比较大,所以平衡位置基本都是在1左右。当y在0附近时,可能导致Ksys=Kf*Kenv,会引起系统响应的较大变化。

在楼上的试验台中,为什么会出现推机器人,但是机器人却向手冲过来的情况呢?最重要的原因是定义力的方向和定义位置的方向相反!