六维力传感器标定方法
- 相关背景
- 标定策略
- 标定步骤
- 真实接触力计算
- 讨论
相关背景
随着机器人应用领域的扩展,出现了越来越多的接触式作业场景,如机器人打磨、易碎物品抓取、人形机器人精细化操作等。在这些应用中,需要对交互力/力矩进行较好控制,否则会导致任务失败的后果。此外,在交互力/力矩过大时可能会造成机器人系统及操作对象的损坏。
为了对交互力/力矩进行较好控制,首先需要精确获取交互力/力矩。尽管目前存在基于关节电流、关节双编码器方式对末端交互力/力矩进行估计的方法,然而受到各种因素的影响误差较大,对力控算法的研发带来较大影响。目前较为常见的方式为在机械臂末端安装多维力传感器,并在此基础上对三个维度的力和绕三个轴的力矩进行测量。然而作为一种高度非线性的设备,力传感器的读数受各种因素的影响,如噪声、传感器零漂、自身重力等。为了进行精准力控,需要首先对无关数据进行剔除。
尽管目前越来越多的商用协作臂推出了力控臂版本,并给出了基于示教器的标定接口,在使用中可自动剔除外力的影响,但仅能应对单台协作臂配备单个力传感器的场合。然而,随着应用的拓展,逐渐出现了需要多个力传感器的应用场合。在这种背景下,就需要自行对力传感器进行标定,同时对重力等因素影响进行剔除。此外,在特殊力控算法的研发中,需要对力/力矩信息进行特殊转换,而且需要和标定及外力剔除部分结合。在这种背景下,需要深入掌握力传感器离线标定方法。
标定策略
力传感器标定可结合牛顿-欧拉法与优化算法进行,为了提高计算速度,本文转而以若干组特殊姿态下的力/力矩信息为基础,并基于均值加权方式获取力传感器核心参数。针对力传感器,主要受以下因素的影响:
★ 噪声因素;
★ 传感器零漂;
★ 负载重力;
★ 负载重心。
针对噪声因素,可基于巴特沃斯低通滤波器进行处理,本文不再赘述,本文主要描述传感器零漂、负载重力、负载重心的确定方法。在此基础上,实际使用中结合力传感器读数、零漂值、负载重心、以及机械臂末端位姿,可实时获取真实接触力/力矩。
标定步骤
力传感器标定背后涉及的理论包含机器人运动学、牛顿-欧拉法等,为了便于读者编程实现,本文省略推导过程,直接给出标定量计算公式。
在标定前,首先假定部分变量:
◆
G
T
G_T
GT: 负载重力;
◆
p
1
⃗
=
[
p
x
S
p
y
S
p
z
S
]
T
\vec{p_1}=\begin{bmatrix}{p_{xS}}&{p_{yS}}&{p_{zS}}\end{bmatrix}^T
p1=[pxSpySpzS]T: 负载重心在力传感器中的位置;
◆
f
0
⃗
=
[
f
x
0
f
y
0
f
z
0
m
x
0
m
y
0
m
z
0
]
T
\vec{f_{0}}=\begin{bmatrix}{f_{x0}}&{f_{y0}}&{f_{z0}}&{m_{x0}}&{m_{y0}}&{m_{z0}}\end{bmatrix}^T
f0=[fx0fy0fz0mx0my0mz0]T: 传感器零飘,6维分别为x方向力零飘、y方向力零飘、z方向力零飘、x轴力矩零漂、y轴力矩零漂、z轴力矩零漂。
标定步骤如下所示:
步骤一、控制力传感器x轴竖直向下,在不施加任何外力的前提下获取N组力读数与力矩读数, 如下所示:
f
1
⃗
=
[
f
x
i
1
f
y
i
1
f
z
i
1
m
x
i
1
m
y
i
1
m
z
i
1
]
T
(
0
≤
i
<
N
)
\vec{f_{1}}=\begin{bmatrix}{f_{xi_1}}&{f_{yi_1}}&{f_{zi_1}}&{m_{xi_1}}&{m_{yi_1}}&{m_{zi_1}} \end{bmatrix}^T(0\leq{i}<{N})
f1=[fxi1fyi1fzi1mxi1myi1mzi1]T(0≤i<N)
步骤二、控制力传感器y轴竖直向下,在不施加任何外力的前提下获取N组力读数与力矩读数, 如下所示:
f
2
⃗
=
[
f
x
i
2
f
y
i
2
f
z
i
2
m
x
i
2
m
y
i
2
m
z
i
2
]
T
(
0
≤
i
<
N
)
\vec{f_{2}}=\begin{bmatrix}{f_{xi_2}}&{f_{yi_2}}&{f_{zi_2}}&{m_{xi_2}}&{m_{yi_2}}&{m_{zi_2}} \end{bmatrix}^T(0\leq{i}<{N})
f2=[fxi2fyi2fzi2mxi2myi2mzi2]T(0≤i<N)
步骤三、控制力传感器z轴竖直向下,在不施加任何外力的前提下获取N组力读数与力矩读数, 如下所示:
f
3
⃗
=
[
f
x
i
3
f
y
i
3
f
z
i
3
m
x
i
3
m
y
i
3
m
z
i
3
]
T
(
0
≤
i
<
N
)
\vec{f_{3}}=\begin{bmatrix}{f_{xi_3}}&{f_{yi_3}}&{f_{zi_3}}&{m_{xi_3}}&{m_{yi_3}}&{m_{zi_3}} \end{bmatrix}^T(0\leq{i}<{N})
f3=[fxi3fyi3fzi3mxi3myi3mzi3]T(0≤i<N)
步骤四、传感器零漂值基于下式计算:
{
f
x
0
=
∑
i
=
0
N
−
1
(
f
x
i
2
+
f
x
i
3
2
N
)
f
y
0
=
∑
i
=
0
N
−
1
(
f
y
i
1
+
f
y
i
3
2
N
)
f
z
0
=
∑
i
=
0
N
−
1
(
f
z
i
1
+
f
z
i
2
2
N
)
m
x
0
=
∑
i
=
0
N
−
1
m
x
i
1
N
m
y
0
=
∑
i
=
0
N
−
1
m
y
i
2
N
m
z
0
=
∑
i
=
0
N
−
1
m
z
i
3
N
\begin{cases} f_{x0}=\sum_{i=0}^{N-1}(\frac{f_{xi_2}+f_{xi_3}}{2N})\\ f_{y0}=\sum_{i=0}^{N-1}(\frac{f_{yi_1}+f_{yi_3}}{2N})\\ f_{z0}=\sum_{i=0}^{N-1}(\frac{f_{zi_1}+f_{zi_2}}{2N})\\ m_{x0}=\sum_{i=0}^{N-1}\frac{m_{xi_1}}{N}\\ m_{y0}=\sum_{i=0}^{N-1}\frac{m_{yi_2}}{N}\\ m_{z0}=\sum_{i=0}^{N-1}\frac{m_{zi_3}}{N} \end{cases}
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧fx0=∑i=0N−1(2Nfxi2+fxi3)fy0=∑i=0N−1(2Nfyi1+fyi3)fz0=∑i=0N−1(2Nfzi1+fzi2)mx0=∑i=0N−1Nmxi1my0=∑i=0N−1Nmyi2mz0=∑i=0N−1Nmzi3
步骤五、末端负载重力基于下式计算:
G
T
=
∑
i
=
0
N
−
1
(
f
z
i
3
−
f
z
0
)
N
G_{T}=\frac{\sum_{i=0}^{N-1}({f_{zi_3}-f_{z0})}}{N}
GT=N∑i=0N−1(fzi3−fz0)
步骤六、负载重心基于下式计算:
{
p
x
S
=
(
∑
i
=
0
N
−
1
(
(
m
z
i
2
−
m
z
0
)
−
(
m
y
i
3
−
m
y
0
)
G
T
)
2
N
)
p
y
S
=
(
∑
i
=
0
N
−
1
(
(
m
x
i
3
−
m
x
0
)
−
(
m
z
i
1
−
m
z
0
)
G
T
)
2
N
)
p
z
S
=
(
∑
i
=
0
N
−
1
(
(
m
y
i
1
−
m
y
0
)
−
(
m
x
i
2
−
m
x
0
)
G
T
)
2
N
)
\begin{cases} p_{xS}=(\frac{\sum_{i=0}^{N-1}(\frac{(m_{zi_2}-m_{z0})-(m_{yi_3}-m_{y0})}{G_T})}{2N})\\ p_{yS}=(\frac{\sum_{i=0}^{N-1}(\frac{(m_{xi_3}-m_{x0})-(m_{zi_1}-m_{z0})}{G_T})}{2N})\\ p_{zS}=(\frac{\sum_{i=0}^{N-1}(\frac{(m_{yi_1}-m_{y0})-(m_{xi_2}-m_{x0})}{G_T})}{2N}) \end{cases}
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧pxS=(2N∑i=0N−1(GT(mzi2−mz0)−(myi3−my0)))pyS=(2N∑i=0N−1(GT(mxi3−mx0)−(mzi1−mz0)))pzS=(2N∑i=0N−1(GT(myi1−my0)−(mxi2−mx0)))
至此,通过标定方法获取了全部力传感器参数。
真实接触力计算
假设力传感器读数滤波后读数为
f
⃗
f
i
l
t
e
r
\vec{f}_{filter}
ffilter, 基坐标系在末端工具坐标系中表示的旋转部分为:
A
=
[
n
x
o
x
a
x
n
y
o
y
a
y
n
z
o
z
a
z
]
A=\begin{bmatrix}{n_x}&{o_x}&{a_x}\\ {n_y}&{o_y}&{a_y}\\ {n_z}&{o_z}&{a_z}\\ \end{bmatrix}
A=⎣⎡nxnynzoxoyozaxayaz⎦⎤
由负载重心得到的反对称矩阵为:
B
=
[
0
−
p
z
S
p
y
S
p
z
S
0
−
p
x
S
−
p
y
S
p
x
S
0
]
B=\begin{bmatrix}{0}&{-p_{zS}}&{p_{yS}}\\ {p_{zS}}&{0}&{-p_{xS}}\\ {-p_{yS}}&{p_{xS}}&{0}\\ \end{bmatrix}
B=⎣⎡0pzS−pyS−pzS0pxSpyS−pxS0⎦⎤
则真实接触力和力矩由下式确定:
f
⃗
f
i
l
t
e
r
−
[
A
0
3
∗
3
B
A
A
]
[
0
0
−
G
T
0
0
0
]
−
[
f
x
0
f
y
0
f
z
0
m
x
0
m
y
0
m
z
0
]
\vec{f}_{filter}-\begin{bmatrix}{A}&{0_{3*3}}\\ {BA}&{A} \end{bmatrix}\begin{bmatrix}{0}\\{0}\\{-G_T}\\{0}\\{0}\\{0} \end{bmatrix}-\begin{bmatrix}{f_{x0}}\\{f_{y0}}\\{f_{z0}}\\{m_{x0}}\\{m_{y0}}\\{m_{z0}} \end{bmatrix}
ffilter−[ABA03∗3A]⎣⎢⎢⎢⎢⎢⎢⎡00−GT000⎦⎥⎥⎥⎥⎥⎥⎤−⎣⎢⎢⎢⎢⎢⎢⎡fx0fy0fz0mx0my0mz0⎦⎥⎥⎥⎥⎥⎥⎤
至此,真实接触力/力矩在力传感器坐标系中的表示则可基于上式获取。
讨论
力传感器标定及真实接触力/力矩确定过程对柔顺控制、精细化操作至关重要。在复杂力控算法的研发中,不仅需要前述计算过程,而且需要灵活构建利于控制算法的虚拟参考系,做到可靠转换与近似。