三维刚体运动与机械臂POE运动学建模

写在前面

不同于工程界常用的DH参数(Denavit-Hartenberg parameters),学术界比较常用的机械臂建模方法为指数乘积公式POE(The product of exponentials formula)。后者的优点是在运动学建模上比DH参数更简洁,可以和李群理论联系起来,方便扩展到动力学建模;缺点是建立的模型和实际机械臂数学上等效,但难以对应关节坐标系。由于该方法的相关介绍在网上比较少,所以我在这篇文章讲一下。

三维刚体运动

本节默认大家对群有一定了解,不懂的参考这里。简单的说(group)是一种集合加上一种运算的代数结构,而对于李群来说,相应的集合和运算分别为流形(manifold)和左乘。

SO(3)和李群

首先,我们回顾一下特殊正交群(special orthogonal)SO(3)SO(3),这是一个李群(Lie group),同时也是所有3D旋转矩阵(rotation matrix)的集合。特殊正交群SO(3)SO(3)对应的李代数(Lie algebra)为所有反对称矩阵(skew-symmetric matrix)的集合so(3)so(3)。李代数对应李群的正切空间,它描述了李群局部的导数。如果说SO(3)SO(3)是个流形(manifold),那么so(3)so(3)是流形对应的切空间(tangent space)。

对于刚体旋转,我们通常把SO(3)SO(3)当作构形空间(configuration space),那么刚体的角速度显然对应so(3)so(3),两者的关系如图1所示。

注意:图中ω\omega范数为θ\theta,相当于ωθ\omega\thetaω=1\|\omega\|=1


李群和李代数

图1. SO(3)SO(3)so(3)so(3)的关系

定义ωθR3\omega \theta\in\mathbb R^3为旋转RR指数坐标(exponential coordinates),由罗德里格斯公式(Rodrigues' formula)可以轻松计算出,当ω=1\|\omega\|=1时,

R=eω^θ=I+ω^sinθ+ω^2(1cosθ)R=e^{\hat \omega\theta}=I+\hat \omega\sin\theta+\hat \omega^2(1-\cos \theta)。

这意味着,如果我们绕着轴ω\omega以单位速度旋转θ\theta时间,那么净旋转可表示为eω^θe^{\hat \omega\theta}。显然指数坐标不唯一,有如下命题成立。

命题1:给定RSO(3)R\in SO(3),存在ωR3\omega\in\mathbb R^3ω=1\|\omega\|=1θR\theta\in\mathbb R,使得R=eω^θR=e^{\hat \omega\theta}[1]

SE(3)和螺旋理论

接下来,我们继续讲刚体运动/变换(rigid motion/transformation),包括平动和旋转。刚体运动的构形空间由特殊欧氏群(special Euclidean group)SE(3)={(p,R)}=R3×SO(3)SE(3)=\{(p,R)\}=\mathbb R^3\times SO(3)表示,相应的李代数为se(3)se(3)。类似的,我们将SE(3)SE(3)中的构形记作gSE(3)g\in SE(3),并定义运动旋量(twist)为ξ^se(3)\hat \xi\in se(3),即

ξ^=[ω^v00]R4×4\hat \xi =\begin{bmatrix} \hat \omega & v\\ 0&0 \end{bmatrix}\in \mathbb R^{4\times 4},

旋量坐标(twist coodinates)为ξR6\xi\in\mathbb R^6。定义ξθR6\xi\theta\in\mathbb R^6为刚体变换gg的指数坐标,也有如下命题成立。

命题2:给定gSE(3)g\in SE(3),存在ξ^se(3)\hat \xi\in se(3)(ω=1\|\omega\|=1)和θR\theta\in\mathbb R,使得g=eξ^θg=e^{\hat \xi\theta}

对于刚体运动,计算g=eξ^θg=e^{\hat \xi\theta}稍微复杂一些,需要分类讨论,证明见参考文献1的41页命题2.8。

g=eξ^θ={[Ivθ01]ω=0[eω^θ(Ieω^θ)(ω×v)+ωωTvθ01]ω0g=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.

考虑一个螺旋形式的刚体运动,即绕着一个轴旋转θ\theta同时沿着轴向平动dd,这样的刚体运动称为螺旋运动(screw motion),如图2所示。


螺旋运动

图2. 螺旋运动

定义平动和旋转的比率为h:=d/θRh:=d/\theta\in\mathbb R,称为pitch,则螺旋运动在齐次坐标(homogeneous coodinates)下表示为

g[p1]=[eω^θ(Ieω^θ)q+hθω01][p1]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}。

因此,相应的运动旋量为

ξ^=[ω^ω×q+hω00]\hat \xi =\begin{bmatrix} \hat \omega & -\omega\times q+h\omega\\ 0&0 \end{bmatrix}。

机械臂运动学

机械臂可以看作是多个刚体组成的多体结构,各个刚体之间由关节(joint)连接。基本关节分为六类,称为低副(lower pairs),包括回转型(revolute)、棱柱型(prismatic)、螺旋型(helical)、圆柱形(cylindrical)、球型(spherical)和平面型(planar)关节。

对于常见机械臂,我们只需关注回转型和棱柱型即可,它们的运动旋量分别表示为

ξ=[ω×qω](h=0)ξ=[v0](h=),\xi =\begin{bmatrix} -\omega\times q\\ \omega \end{bmatrix}(h=0),\xi =\begin{bmatrix} v\\ 0 \end{bmatrix}(h=\infty),

其中ωR3\omega\in\mathbb R^3是旋转轴向的单位向量,qR3q\in\mathbb R^3是轴上任意一点,vR3v\in\mathbb R^3是平动方向的单位向量。所有向量均关于基坐标系SS(base frame)给出。

前向运动学

机械臂操作中,末端执行器的构形是我们最关心的,因此定义末端坐标系TT(tool frame)。给定一系列关节坐标(joint variables)θQ\theta\in\mathcal QQ\mathcal Q关节空间(joint space),前向动力学(forward kinematics)由映射gst:QSE(3)g_{st}:\mathcal Q\to SE(3)表示,该映射描述了末端坐标系相对基坐标系的构形。

考虑单自由度机械臂,即只有一个关节,其前向动力学为

gst(θ)=eξ^θgst(0)g_{st}(\theta)=e^{\hat \xi \theta}g_{st}(0)。

这意味着,通过一个螺旋运动eξ^θe^{\hat \xi \theta},机械臂末端构形由gst(0)g_{st}(0)变为gst(θ)g_{st}(\theta)

同理,对于nn自由度机械臂,其前向动力学为

gst(θ)=eξ^1θ1eξ^2θ2eξ^nθngst(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),

称为指数乘积公式(the product of exponentials formula)。

POE和DH参数的关系

DH参数也可以写成螺旋运动的组合

gst(θ)=gl0l1(θ1)gl1l2(θ2)gln1ln(θn)glntg_{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},

其中gli1li=eξ^i1,iθigli1li(0)g_{l_{i-1}l_i}=e^{\hat \xi_{i-1,i}\theta_i}g_{l_{i-1}l_i}(0)由四个刚体运动组合而成,即Tz(di)Rz(ϕi)Tx(ai)Rx(αi)T_z(d_i)R_z(\phi_i)T_x(a_i)R_x(\alpha_i)。对于回转关节,ϕi=θi\phi_i=\theta_i;对于棱柱关节,di=θid_i=\theta_i

注意:ξi\xi_i转化为(di,ϕi,ai,αi)(d_i,\phi_i,a_i,\alpha_i)的方法不唯一,这里给出一个参考文献[2]

为了研究ξi1,i\xi_{i-1,i}ξi\xi_i之间的关系,我们先定义伴随变换(adjoint transformation)。如果说gabg_{ab}定义两个坐标系A,B之间的刚体运动变换,即ga=gabgbg_a= g_{ab}g_b,那么伴随变换则定义了它们之间的刚体速度(rigid body velocity)变换,即Vaba=AdgabVabbV_{ab}^a=\operatorname{Ad}_{g_{ab}}V_{ab}^b,其定义为

Adgab=[Rabp^abRab0Rab]\operatorname{Ad}_{g_{ab}}=\begin{bmatrix} R_{ab}&\hat p_{ab} R_{ab}\\ 0&R_{ab} \end{bmatrix}。

ξi1,i\xi_{i-1,i}ξi\xi_i之间的关系可表示为ξi=Adgl0li1(0)ξi1,i\xi_i=\operatorname{Ad}_{g_{l_0 l_{i-1}}(0)}\xi_{i-1,i},证明见参考文献1的93页。


  1. Murray, R. M. (1994). A mathematical introduction to robotic manipulation. CRC press. ↩︎

  2. 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 ↩︎