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

写在前面

不同于工程界常用的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(1cosθ)
这意味着,如果我们绕着轴 ω \omega ω以单位速度旋转 θ \theta θ时间,那么净旋转可表示为 e ω ^ θ e^{\hat \omega\theta} eω^θ。显然指数坐标不唯一,有如下命题成立。

命题1:给定 R ∈ S O ( 3 ) R\in SO(3) RSO(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) gSE(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) gSE(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(Ieω^θ)(ω×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(Ieω^θ)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 qR3是轴上任意一点, v ∈ R 3 v\in\mathbb R^3 vR3是平动方向的单位向量。所有向量均关于基坐标系 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:QSE(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θ2eξ^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)gln1ln(θ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) gli1li=eξ^i1,iθigli1li(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} ξi1,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} ξi1,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=Adgl0li1(0)ξi1,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 ↩︎

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中,可以使用旋转矩阵来实现三维空间的刚体运动。旋转矩阵是一种正交矩阵,它可以保持长度、角度、面积等特征不变的仿射变换,即内积和度量不变。旋转矩阵的逆等于它的转置,同时行列式的值为正负1。 在MATLAB中,可以使用makehgtform函数来创建旋转矩阵。例如,如果给定一个单位向量normal和旋转角度theta,可以使用下面的代码创建旋转矩阵Matrix_Rot: theta=acos(costheta); Matrix_Rot=makehgtform('axisrotate',normal,theta); 其中,normal是旋转轴的单位向量,theta是旋转角度。这样,Matrix_Rot就是表示刚体运动的旋转矩阵。 更多关于旋转矩阵的信息,可以参考维基百科的页面和博客文章。关于MATLAB中的刚体运动和旋转矩阵的应用,还可以参考博客文章。 总结起来,MATLAB中的三维空间刚体运动可以通过旋转矩阵来实现,旋转矩阵是一种正交矩阵,它可以保持长度、角度、面积等特征不变的仿射变换。在MATLAB中,可以使用makehgtform函数来创建旋转矩阵。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [3D视觉(三)刚体运动及matlab实现](https://blog.csdn.net/piaoxuezhong/article/details/78524498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值