Skip to content


背景描述

阻抗控制是一种常见的柔顺控制、力控方法,其核心思想是让机器人表现出类似于一个带阻尼弹簧的特性。让机械臂与外界交互时能保持柔顺性,拓展机械臂的使用场景。

公式推导

一般情形

通常而言,我们可以将机器人的动力学方程写成如下形式

τ+τext=M(q)q¨+C(q,q˙)+g(q)

其中,M为机器人的质量矩阵,C为机器人的Coriolis矩阵,g为重力向量,τ为机器人的力向量,q为机器人的关节角度,q˙为机器人的关节角速度,τext为机器人的外力。

而期望的外界阻抗表现如下

τext=Kd(qqd)+Dd(q˙q˙d)+Md(q)(q¨q¨d)

其中,K为刚度系数,D是阻尼系数。假设,Md=M, 代入动力学方程得到如下方程,反应了外部力矩和电机角度形成了一种阻尼弹簧的效果。

τ=K(qdq)+D(q˙dq˙)+M(q)q¨d+C(q,q˙)+g(q)

单电机情况

通常情况下,我们会现在单电机上进行力控实验。此时,可以忽略Coriolis力,如果末端不加负载,也可以不考虑重力。这是最简单的情形。

但是,通常情况下,电机会有一定的摩擦力和粘滞力,我们用D(q˙)来表示。

需要指出的是函数D()满足如下条件

  1. 单调递增

  2. D(0)=0

这里我们可以将动力学方程简化为

τ+τextDq˙=Mq¨

如果我们希望表现为如下形式

τext=Mdq¨+Ddq˙+Kdq

故可以得到控制律如下

τ=(MMd)q¨+(DDd)q˙Kdq

通常,我们并不能得到精准的D, 所以,我们可以直接设定Dd=0通过调整τ的速度增益,直到振动,在每个振幅上都能既不收敛,也不发散,则可以辨识出D。此处为了简洁,假设D就是个常数即可。

实际算法

设电机输出力矩为τi,外载荷力矩为τe

已知在仅驱动电机和仅施加外载荷时,两个力矩和角度的关系如下

τi=Miq¨+Diq˙τe=Meq¨+Deq˙

故整体的动力学方程为

τi+τe=(Mi+Me)q¨+(Di+De)q˙

而我们期望的角度对外力矩的响应如下

τe=Mdq¨d+Ddq˙d+Kdqd

接下来设计控制律

1.(简单粗暴)

具体而言,令

τi=(ke1)τe+(MikeMd)q¨+(DikeDd)q˙keKdqke>1

代入动力学方程有

τe=(Me+keMd)keq¨+(De+keDd)keq˙+Kdq

ke充分大时,即便Me,De估计误差较大,也可以控制误差范围。

但是,这种方法,当力传感器波动较大时,会有比较明显的抖颤。