写在前面
不同于工程界常用的DH参数(Denavit-Hartenberg parameters),学术界比较常用的机械臂建模方法为指数乘积公式POE(The product of exponentials formula)。后者的优点是在运动学建模上比DH参数更简洁,可以和李群理论联系起来,方便扩展到动力学建模;缺点是建立的模型和实际机械臂数学上等效,但难以对应关节坐标系。由于该方法的相关介绍在网上比较少,所以我在这篇文章讲一下。
三维刚体运动
本节默认大家对群有一定了解,不懂的参考这里。简单的说群(group)是一种集合加上一种运算的代数结构,而对于李群来说,相应的集合和运算分别为流形(manifold)和左乘。
SO(3)和李群
首先,我们回顾一下特殊正交群(special orthogonal) S O ( 3 ) SO(3) SO(3),这是一个李群(Lie group),同时也是所有3D旋转矩阵(rotation matrix)的集合。特殊正交群 S O ( 3 ) SO(3) SO(3)对应的李代数(Lie algebra)为所有反对称矩阵(skew-symmetric matrix)的集合 s o ( 3 ) so(3) so(3)。李代数对应李群的正切空间,它描述了李群局部的导数。如果说 S O ( 3 ) SO(3) SO(3)是个流形(manifold),那么 s o ( 3 ) so(3) so(3)是流形对应的切空间(tangent space)。
对于刚体旋转,我们通常把 S O ( 3 ) SO(3) SO(3)当作构形空间(configuration space),那么刚体的角速度显然对应 s o ( 3 ) so(3) so(3),两者的关系如图1所示。
注意:图中 ω \omega ω范数为 θ \theta θ,相当于 ω θ \omega\theta ωθ且 ∥ ω ∥ = 1 \|\omega\|=1 ∥ω∥=1。
图1. S O ( 3 ) SO(3) SO(3)和 s o ( 3 ) so(3) so(3)的关系
定义
ω
θ
∈
R
3
\omega \theta\in\mathbb R^3
ωθ∈R3为旋转
R
R
R的指数坐标(exponential coordinates),由罗德里格斯公式(Rodrigues’ formula)可以轻松计算出,当
∥
ω
∥
=
1
\|\omega\|=1
∥ω∥=1时,
R
=
e
ω
^
θ
=
I
+
ω
^
sin
θ
+
ω
^
2
(
1
−
cos
θ
)
。
R=e^{\hat \omega\theta}=I+\hat \omega\sin\theta+\hat \omega^2(1-\cos \theta)。
R=eω^θ=I+ω^sinθ+ω^2(1−cosθ)。
这意味着,如果我们绕着轴
ω
\omega
ω以单位速度旋转
θ
\theta
θ时间,那么净旋转可表示为
e
ω
^
θ
e^{\hat \omega\theta}
eω^θ。显然指数坐标不唯一,有如下命题成立。
命题1:给定 R ∈ S O ( 3 ) R\in SO(3) R∈SO(3),存在 ω ∈ R 3 \omega\in\mathbb R^3 ω∈R3, ∥ ω ∥ = 1 \|\omega\|=1 ∥ω∥=1和 θ ∈ R \theta\in\mathbb R θ∈R,使得 R = e ω ^ θ R=e^{\hat \omega\theta} R=eω^θ1。
SE(3)和螺旋理论
接下来,我们继续讲刚体运动/变换(rigid motion/transformation),包括平动和旋转。刚体运动的构形空间由特殊欧氏群(special Euclidean group)
S
E
(
3
)
=
{
(
p
,
R
)
}
=
R
3
×
S
O
(
3
)
SE(3)=\{(p,R)\}=\mathbb R^3\times SO(3)
SE(3)={(p,R)}=R3×SO(3)表示,相应的李代数为
s
e
(
3
)
se(3)
se(3)。类似的,我们将
S
E
(
3
)
SE(3)
SE(3)中的构形记作
g
∈
S
E
(
3
)
g\in SE(3)
g∈SE(3),并定义运动旋量(twist)为
ξ
^
∈
s
e
(
3
)
\hat \xi\in se(3)
ξ^∈se(3),即
ξ
^
=
[
ω
^
v
0
0
]
∈
R
4
×
4
,
\hat \xi =\begin{bmatrix} \hat \omega & v\\ 0&0 \end{bmatrix}\in \mathbb R^{4\times 4},
ξ^=[ω^0v0]∈R4×4,
旋量坐标(twist coodinates)为
ξ
∈
R
6
\xi\in\mathbb R^6
ξ∈R6。定义
ξ
θ
∈
R
6
\xi\theta\in\mathbb R^6
ξθ∈R6为刚体变换
g
g
g的指数坐标,也有如下命题成立。
命题2:给定 g ∈ S E ( 3 ) g\in SE(3) g∈SE(3),存在 ξ ^ ∈ s e ( 3 ) \hat \xi\in se(3) ξ^∈se(3)( ∥ ω ∥ = 1 \|\omega\|=1 ∥ω∥=1)和 θ ∈ R \theta\in\mathbb R θ∈R,使得 g = e ξ ^ θ g=e^{\hat \xi\theta} g=eξ^θ。
对于刚体运动,计算
g
=
e
ξ
^
θ
g=e^{\hat \xi\theta}
g=eξ^θ稍微复杂一些,需要分类讨论,证明见参考文献1的41页命题2.8。
g
=
e
ξ
^
θ
=
{
[
I
v
θ
0
1
]
,
ω
=
0
,
[
e
ω
^
θ
(
I
−
e
ω
^
θ
)
(
ω
×
v
)
+
ω
ω
T
v
θ
0
1
]
,
ω
≠
0
。
g=e^{\hat \xi \theta}=\left\{ \begin{aligned} &\begin{bmatrix}I&v\theta\\ 0&1\end{bmatrix},&\omega=0,\\ &\begin{bmatrix}e^{\hat \omega\theta}&(I-e^{\hat\omega\theta})(\omega\times v)+\omega\omega^Tv\theta\\ 0&1\end{bmatrix},&\omega\neq 0。 \end{aligned} \right.
g=eξ^θ=⎩⎪⎪⎪⎨⎪⎪⎪⎧[I0vθ1],[eω^θ0(I−eω^θ)(ω×v)+ωωTvθ1],ω=0,ω=0。
考虑一个螺旋形式的刚体运动,即绕着一个轴旋转 θ \theta θ同时沿着轴向平动 d d d,这样的刚体运动称为螺旋运动(screw motion),如图2所示。
图2. 螺旋运动
定义平动和旋转的比率为
h
:
=
d
/
θ
∈
R
h:=d/\theta\in\mathbb R
h:=d/θ∈R,称为pitch,则螺旋运动在齐次坐标(homogeneous coodinates)下表示为
g
[
p
1
]
=
[
e
ω
^
θ
(
I
−
e
ω
^
θ
)
q
+
h
θ
ω
0
1
]
[
p
1
]
。
g\begin{bmatrix} p\\ 1 \end{bmatrix}=\begin{bmatrix} e^{\hat \omega \theta}&(I-e^{\hat \omega \theta})q +h\theta \omega\\ 0&1 \end{bmatrix}\begin{bmatrix} p\\ 1 \end{bmatrix}。
g[p1]=[eω^θ0(I−eω^θ)q+hθω1][p1]。
因此,相应的运动旋量为
ξ
^
=
[
ω
^
−
ω
×
q
+
h
ω
0
0
]
。
\hat \xi =\begin{bmatrix} \hat \omega & -\omega\times q+h\omega\\ 0&0 \end{bmatrix}。
ξ^=[ω^0−ω×q+hω0]。
机械臂运动学
机械臂可以看作是多个刚体组成的多体结构,各个刚体之间由关节(joint)连接。基本关节分为六类,称为低副(lower pairs),包括回转型(revolute)、棱柱型(prismatic)、螺旋型(helical)、圆柱形(cylindrical)、球型(spherical)和平面型(planar)关节。
对于常见机械臂,我们只需关注回转型和棱柱型即可,它们的运动旋量分别表示为
ξ
=
[
−
ω
×
q
ω
]
(
h
=
0
)
,
ξ
=
[
v
0
]
(
h
=
∞
)
,
\xi =\begin{bmatrix} -\omega\times q\\ \omega \end{bmatrix}(h=0),\xi =\begin{bmatrix} v\\ 0 \end{bmatrix}(h=\infty),
ξ=[−ω×qω](h=0),ξ=[v0](h=∞),
其中
ω
∈
R
3
\omega\in\mathbb R^3
ω∈R3是旋转轴向的单位向量,
q
∈
R
3
q\in\mathbb R^3
q∈R3是轴上任意一点,
v
∈
R
3
v\in\mathbb R^3
v∈R3是平动方向的单位向量。所有向量均关于基坐标系
S
S
S(base frame)给出。
前向运动学
机械臂操作中,末端执行器的构形是我们最关心的,因此定义末端坐标系 T T T(tool frame)。给定一系列关节坐标(joint variables) θ ∈ Q \theta\in\mathcal Q θ∈Q, Q \mathcal Q Q是关节空间(joint space),前向动力学(forward kinematics)由映射 g s t : Q → S E ( 3 ) g_{st}:\mathcal Q\to SE(3) gst:Q→SE(3)表示,该映射描述了末端坐标系相对基坐标系的构形。
考虑单自由度机械臂,即只有一个关节,其前向动力学为
g
s
t
(
θ
)
=
e
ξ
^
θ
g
s
t
(
0
)
。
g_{st}(\theta)=e^{\hat \xi \theta}g_{st}(0)。
gst(θ)=eξ^θgst(0)。
这意味着,通过一个螺旋运动
e
ξ
^
θ
e^{\hat \xi \theta}
eξ^θ,机械臂末端构形由
g
s
t
(
0
)
g_{st}(0)
gst(0)变为
g
s
t
(
θ
)
g_{st}(\theta)
gst(θ)。
同理,对于
n
n
n自由度机械臂,其前向动力学为
g
s
t
(
θ
)
=
e
ξ
^
1
θ
1
e
ξ
^
2
θ
2
⋯
e
ξ
^
n
θ
n
g
s
t
(
0
)
,
g_{st}(\theta)=e^{\hat \xi_1 \theta_1}e^{\hat \xi_2 \theta_2}\cdots e^{\hat \xi_n \theta_n}g_{st}(0),
gst(θ)=eξ^1θ1eξ^2θ2⋯eξ^nθngst(0),
称为指数乘积公式(the product of exponentials formula)。
POE和DH参数的关系
DH参数也可以写成螺旋运动的组合
g
s
t
(
θ
)
=
g
l
0
l
1
(
θ
1
)
g
l
1
l
2
(
θ
2
)
⋯
g
l
n
−
1
l
n
(
θ
n
)
g
l
n
t
,
g_{st}(\theta)=g_{l_0l_1}(\theta_1)g_{l_1l_2}(\theta_2)\cdots g_{l_{n-1}l_n}(\theta_n)g_{l_nt},
gst(θ)=gl0l1(θ1)gl1l2(θ2)⋯gln−1ln(θn)glnt,
其中
g
l
i
−
1
l
i
=
e
ξ
^
i
−
1
,
i
θ
i
g
l
i
−
1
l
i
(
0
)
g_{l_{i-1}l_i}=e^{\hat \xi_{i-1,i}\theta_i}g_{l_{i-1}l_i}(0)
gli−1li=eξ^i−1,iθigli−1li(0)由四个刚体运动组合而成,即
T
z
(
d
i
)
R
z
(
ϕ
i
)
T
x
(
a
i
)
R
x
(
α
i
)
T_z(d_i)R_z(\phi_i)T_x(a_i)R_x(\alpha_i)
Tz(di)Rz(ϕi)Tx(ai)Rx(αi)。对于回转关节,
ϕ
i
=
θ
i
\phi_i=\theta_i
ϕi=θi;对于棱柱关节,
d
i
=
θ
i
d_i=\theta_i
di=θi。
注意: ξ i \xi_i ξi转化为 ( d i , ϕ i , a i , α i ) (d_i,\phi_i,a_i,\alpha_i) (di,ϕi,ai,αi)的方法不唯一,这里给出一个参考文献2。
为了研究
ξ
i
−
1
,
i
\xi_{i-1,i}
ξi−1,i和
ξ
i
\xi_i
ξi之间的关系,我们先定义伴随变换(adjoint transformation)。如果说
g
a
b
g_{ab}
gab定义两个坐标系A,B之间的刚体运动变换,即
g
a
=
g
a
b
g
b
g_a= g_{ab}g_b
ga=gabgb,那么伴随变换则定义了它们之间的刚体速度(rigid body velocity)变换,即
V
a
b
a
=
Ad
g
a
b
V
a
b
b
V_{ab}^a=\operatorname{Ad}_{g_{ab}}V_{ab}^b
Vaba=AdgabVabb,其定义为
Ad
g
a
b
=
[
R
a
b
p
^
a
b
R
a
b
0
R
a
b
]
。
\operatorname{Ad}_{g_{ab}}=\begin{bmatrix} R_{ab}&\hat p_{ab} R_{ab}\\ 0&R_{ab} \end{bmatrix}。
Adgab=[Rab0p^abRabRab]。
ξ i − 1 , i \xi_{i-1,i} ξi−1,i和 ξ i \xi_i ξi之间的关系可表示为 ξ i = Ad g l 0 l i − 1 ( 0 ) ξ i − 1 , i \xi_i=\operatorname{Ad}_{g_{l_0 l_{i-1}}(0)}\xi_{i-1,i} ξi=Adgl0li−1(0)ξi−1,i,证明见参考文献1的93页。
Murray, R. M. (1994). A mathematical introduction to robotic manipulation. CRC press. ↩︎
Wu, L., Crawford, R., & Roberts, J. (2017). An Analytic Approach to Converting POE Parameters Into D–H Parameters for Serial-Link Robots. IEEE Robotics and Automation Letters, 2(4), 2174–2179. https://doi.org/10.1109/LRA.2017.2723470 ↩︎