机器人学【一、刚体运动】

机器人学

文章目录

  • 机器人学
    • 1. 刚体运动
      • 1.1 刚体变换
        • 刚体
        • 刚体变换
      • 1.2 三维空间中的旋转运动
        • 求质点坐标的相对变换
        • 旋转矩阵的合成法则
        • 用线性算子来计算叉积
        • 叉积的右手法则
        • 叉积用于计算线速度
        • 旋转的指数坐标
        • Rodrigues公式
        • 计算旋转矩阵的例子
        • 四元数
      • 1.3 三维空间中的刚体运动
        • 齐次坐标表示法
        • 齐次表示刚体变换的逆
        • 刚体变换的组合
        • 计算刚体运动的例子
        • 刚体运动的指数坐标和运动旋量
    • Reference

1. 刚体运动

1.1 刚体变换

三维空间中可以用坐标 ( x , y , z ) ∈ R 3 (x,y,z)\in\mathcal{R}^3 (x,y,z)R3来描述质点的位置,而质点的运动轨迹可以使用参数形式来进行表示: p ( t ) = ( x ( t ) , y ( t ) , z ( t ) ) ∈ R 3 p(t)=(x(t),y(t),z(t))\in\mathcal{R}^3 p(t)=(x(t),y(t),z(t))R3。在机器人学中,我们通常关心的问题通常不是一个质点的运动,而是一组质点共同的运动。如果一条杆上的质点保持相对距离不变,我们认为其是一个不变的形体,可以严格定义刚体如下:

刚体

刚体(rigid body)是任意两质点之间距离保持不变的质点的集合,并与物体的任意运动和作用在物体上的任意力无关。用数学的表示即是:
∣ ∣ p ( t ) − q ( t ) ∣ ∣ = ∣ ∣ p ( 0 ) − q ( 0 ) ∣ ∣ ||p(t) - q(t)|| = ||p(0) - q(0)|| ∣∣p(t)q(t)∣∣=∣∣p(0)q(0)∣∣

刚体变换

刚体变换(rigid body transformation),满足以下条件的变换 g : R 3 → R 3 g:\mathcal{R}^3 \to \mathcal{R}^3 g:R3R3,被称为刚体变换:

  1. 长度不变,对于任意的点 p , q ∈ R 3 p,q\in\mathcal{R}^3 p,qR3,均有 ∣ ∣ g ( p ) − g ( q ) ∣ ∣ = ∣ ∣ p − q ∣ ∣ ||g(p)-g(q)|| = ||p-q|| ∣∣g(p)g(q)∣∣=∣∣pq∣∣
  2. 叉积不变,对于任意的矢量 v , w ∈ R 3 v,w\in\mathcal{R}^3 v,wR3,均有 g ∗ ( v × w ) = g ∗ ( v ) × g ∗ ( w ) g_{*}(v\times w)=g_{*}(v)\times g_{*}(w) g(v×w)=g(v)×g(w)

刚体上任意两点之间的距离以及任意两矢量之间的叉积固定不变并不意味着刚体上质点建不能有相对运动,只是这些运动只能是旋转而不能是移动。

1.2 三维空间中的旋转运动

设A为惯性坐标系,B为与刚体固连的动坐标系, x a b , y a b , z a b ∈ R 3 x_{ab},y_{ab},z_{ab}\in\mathcal{R}^3 xab,yab,zabR3为坐标系B中主坐标轴相对于A坐标系的坐标,依次排列这三个坐标矢量,就构成了一个3x3的矩阵:
R a b = [ x a b , y a b , z a b ] ∈ R 3 × 3 R_{ab} = [x_{ab},y_{ab},z_{ab}] \in \mathcal{R}^{3\times3} Rab=[xab,yab,zab]R3×3

按照这种方式构建的矩阵被称为旋转矩阵(rotation matrix):物体相对于定坐标系的每一次旋转都对应一个该形式的旋转矩阵。旋转矩阵也可称为位姿(configuration)

旋转矩阵满足以下的性质,设 R ∈ R 3 × 3 R\in\mathcal{R}^{3\times3} RR3×3为旋转矩阵, r 1 , r 2 , r 3 ∈ R 3 r_1,r_2,r_3\in\mathcal{R}^3 r1,r2,r3R3为其列矢量,因为旋转矩阵 R R R的列矢量是相互正交的所以则有:
r i T r j = { 0 , if  i ≠ j 1 , if  i = j r_{i}^Tr_j = \left\{ \begin{align} 0, \text{if } i\ne j \\ 1, \text{if } i=j \end{align} \right. riTrj={0,if i=j1,if i=j
写成矩阵的形式则有, R R T = R T R = I RR^T=R^TR=I RRT=RTR=I d e t R = ± 1 det R = \pm1 detR=±1

群(group)定义如下,对于元素可用算子 ∘ \circ 构成二元运算的集合 G G G,若满足以下条件则被成为群:

  1. 封闭性:若 g 1 , g 2 ∈ R 3 × 3 g_1,g_2\in\mathcal{R}^{3\times3} g1,g2R3×3,则 g 1 ∘ g 2 ∈ G g_1 \circ g_2\in G g1g2G
  2. 单位性:对于任意的 g ∈ G g\in G gG,一定存在一个单位元素 e e e,使得 g ∘ e = e ∘ g = g g\circ e=e\circ g =g ge=eg=g
  3. 可逆性:对于任意的 g ∈ G g\in G gG,一定存在唯一的逆 g − 1 ∈ G g^{-1}\in G g1G,使得 g ∘ g − 1 = g − 1 ∘ g = e g\circ g^{-1}=g^{-1}\circ g=e gg1=g1g=e
  4. 结合性:若 g 1 , g 2 , g 3 ∈ G g_1,g_2,g_3\in G g1,g2,g3G,则有 ( g 1 ∘ g 2 ) ∘ g 3 = g 1 ∘ ( g 2 ∘ g 3 ) (g_1\circ g_2)\circ g_3 = g_1\circ (g_2\circ g_3) (g1g2)g3=g1(g2g3)

所有旋转矩阵的集合满足群的性质,被称为 S O ( 3 ) SO(3) SO(3),符号 S O ( 3 ) SO(3) SO(3)是special orthogonal的缩写, S O ( 3 ) SO(3) SO(3)是一个群。

求质点坐标的相对变换

如果坐标系A和坐标系B之间只存在旋转变换, q q q在B坐标系中的坐标为 q b = ( x b , y b , z b ) q_b=(x_b,y_b,z_b) qb=(xb,yb,zb),且已知坐标系B相对于坐标系A的旋转矩阵为 R a b = [ x a b , y a b , z a b ] ∈ R 3 × 3 R_{ab} = [x_{ab},y_{ab},z_{ab}] \in \mathcal{R}^{3\times3} Rab=[xab,yab,zab]R3×3,那么 q q q在A坐标系中的坐标为
q a = [ x a b y a b z a b ] [ x b y b z b ] = R a b q b q_a = \begin{bmatrix} x_{ab} & y_{ab} & z_{ab} \end{bmatrix} \begin{bmatrix} x_{b} \\ y_{b} \\ z_{b} \end{bmatrix} = R_{ab}q_b qa=[xabyabzab] xbybzb =Rabqb
即旋转矩阵 R a b R_{ab} Rab表示一点从坐标系B到坐标系A坐标的旋转变换(不包含平移变换)。

旋转矩阵的合成法则

旋转矩阵可以通过矩阵相乘加以结合,从而形成新的旋转矩阵。如果坐标系C相对于坐标系B的姿态为 R b c R_{bc} Rbc,坐标系B相对于另一坐标系A的姿态为 R a b R_{ab} Rab,那么,坐标系C相对于坐标系A的位形为
R a c = R a b R b c R_{ac} = R_{ab}R_{bc} Rac=RabRbc

用线性算子来计算叉积

有两个矢量 a = [ a 1 , a 2 , a 3 ] T , b = [ b 1 , b 2 , b 3 ] T a=[a_1,a_2,a_3]^T,b=[b_1,b_2,b_3]^T a=[a1,a2,a3]T,b=[b1,b2,b3]T,两矢量的叉积结果为:
a × b = [ a 2 b 3 − a 3 b 2 a 3 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 ] a\times b = \begin{bmatrix} a_2b_3 - a_3b_2 \\ a_3b_1 - a_1b_3 \\ a_1b_2 - a_2b_1 \end{bmatrix} a×b= a2b3a3b2a3b1a1b3a1b2a2b1
可以表示为 a × b = a ^ b a\times b=\hat{a}b a×b=a^b,其中
a ^ = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] \hat{a} = \begin{bmatrix} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{bmatrix} a^= 0a3a2a30a1a2a10
这样可以简便地计算叉积。

叉积的右手法则

叉积的概念非常有用,可以通过两个向量的叉乘,生成第三个垂直于a,b的法向量,从而构建X、Y、Z坐标系。如下图所示,用右手从叉积符号前的矢量转向叉积符号后的矢量,大拇指的指向就为结果矢量的方向。叉积在三维空间中的意义是生成一个垂直于两个矢量的新矢量,叉积在二维空间中的意义是两矢量所构成的平行四边形的面积。

Image
叉积用于计算线速度

线速度 v v v是角速度 ω \omega ω角速度的方向为旋转轴的方向)与垂直于旋转轴且指向质点的矢量 r r r的叉积,
v = ω × r v = \omega \times r v=ω×r
如图所示:

Image
旋转的指数坐标

ω ∈ R 3 \omega\in\mathcal{R}^3 ωR3是表示旋转方向的单位矢量, θ ∈ R \theta\in\mathcal{R} θR为旋转角度,物体的每次转动都存在一个旋转矩阵 R ∈ S O ( 3 ) R\in SO(3) RSO(3)与之对应,因此可以将旋转矩阵 R R R表示为旋转轴 ω \omega ω和旋转角度 θ \theta θ的函数。推导过程如下:

已知刚体上一质点的速度 v v v与角速度 w w w满足关系 v = w × r v=w\times r v=w×r r r r为旋转轴到质点的矢量。考虑旋转体上一质点 q q q的速度,物体以单位角速度绕 ω \omega ω匀速旋转,那么 q q q点的速度 q ˙ \dot{q} q˙可以表示为:
q ˙ ( t ) = ω × q ( t ) = ω ^ q ( t ) \dot{q}(t) = \omega \times q(t) = \hat{\omega} q(t) q˙(t)=ω×q(t)=ω^q(t)
求解这个微分方程可以得到
q ( t ) = e ω ^ t q ( 0 ) q(t) = e^{\hat{\omega}t}q(0) q(t)=eω^tq(0)
其中 q ( 0 ) q(0) q(0)是质点 q q q的起始位置, e ω ^ t e^{\hat{\omega}t} eω^t是矩阵指数,由矩阵分析的知识可以知道,该矩阵指数可以进行展开如下:
e ω ^ t = I + ω ^ t + ( ω ^ t ) 2 2 ! + ( ω ^ t ) 3 3 ! + ⋯ e^{\hat{\omega}t} = I + \hat{\omega}t + \frac{(\hat{\omega}t)^2}{2!} + \frac{(\hat{\omega}t)^3}{3!} + \cdots eω^t=I+ω^t+2!(ω^t)2+3!(ω^t)3+
又由于已经规定了旋转的角速度为单位角速度,那么旋转矩阵就可以写成旋转轴 ω \omega ω和旋转角度 θ \theta θ的函数了:
R ( ω , θ ) = e ω ^ θ R(\omega,\theta) = e^{\hat{\omega}\theta} R(ω,θ)=eω^θ
算子 ω ^ \hat{\omega} ω^是反对称阵,满足 ω ^ T = − ω ^ \hat{\omega}^T=-\hat{\omega} ω^T=ω^,我们将所有这种 3 × 3 3\times3 3×3的反对称阵组成的矢量空间记为 s o ( 3 ) ∈ S O ( 3 ) so(3)\in SO(3) so(3)SO(3)

Image
Rodrigues公式

对于前面提到的矩阵指数 e ω ^ θ e^{\hat{\omega}\theta} eω^θ,我们难以直接计算,我们需要借助Taylor展开来进行化简。首先,我们需要指导算子 ω ^ \hat{\omega} ω^的幂是怎么计算的:
ω ^ 2 = ω ω T − ∣ ∣ ω ∣ ∣ 2 I ω ^ 3 = − ∣ ∣ ω ∣ ∣ 2 ω ^ \hat{\omega}^2 = \omega\omega^T - ||\omega||^2I \\ \hat{\omega}^3 = - ||\omega||^2\hat{\omega} ω^2=ωωT∣∣ω2Iω^3=∣∣ω2ω^
且规定了以单位速度进行旋转,则 ∣ ∣ ω ∣ ∣ = 1 ||\omega||=1 ∣∣ω∣∣=1,那么之前的Taylor展开可以化简为:
e ω ^ θ = I + ( θ − θ 3 3 ! + θ 5 5 ! − ⋯ ) ω ^ + ( θ 2 2 ! − θ 4 4 ! + θ 6 6 ! − ⋯ ) ω ^ 2 e^{\hat{\omega}\theta} = I + \Big(\theta - \frac{\theta^3}{3!} + \frac{\theta^5}{5!} - \cdots \Big)\hat{\omega} + \Big(\frac{\theta^2}{2!} - \frac{\theta^4}{4!} + \frac{\theta^6}{6!} - \cdots \Big) \hat{\omega}^2 eω^θ=I+(θ3!θ3+5!θ5)ω^+(2!θ24!θ4+6!θ6)ω^2
然后再根据 sin ⁡ θ \sin \theta sinθ cos ⁡ θ \cos \theta cosθ的Taylor展开可以进一步化简为:
e ω ^ θ = I + ω ^ sin ⁡ θ + ω ^ 2 ( 1 − cos ⁡ θ ) \textcolor{red}{e^{\hat{\omega}\theta} = I + \hat{\omega}\sin \theta + \hat{\omega}^2(1-\cos \theta)} eω^θ=I+ω^sinθ+ω^2(1cosθ)
∣ ∣ w ∣ ∣ ≠ 1 ||w||\ne 1 ∣∣w∣∣=1的时候,上述公式可以修正为:
e ω ^ θ = I + ω ^ ∣ ∣ ω ∣ ∣ sin ⁡ ( ∣ ∣ ω ∣ ∣ θ ) + ω ^ 2 ∣ ∣ ω ∣ ∣ 2 ( 1 − cos ⁡ ( ∣ ∣ ω ∣ ∣ θ ) ) \textcolor{red}{e^{\hat{\omega}\theta} = I + \frac{\hat{\omega}}{||\omega||}\sin (||\omega||\theta) + \frac{\hat{\omega}^2}{||\omega||^2}(1-\cos (||\omega||\theta))} eω^θ=I+∣∣ω∣∣ω^sin(∣∣ω∣∣θ)+∣∣ω2ω^2(1cos(∣∣ω∣∣θ))
这就是用于计算旋转矩阵 R R R的Rodrigues公式。

计算旋转矩阵的例子

让我们举一个例子,假设我们要绕单位向量 u = [ 0 , 0 , 1 ] T u=[0,0,1]^T u=[0,0,1]T(绕z轴)旋转 θ = π 2 \theta=\frac{\pi}{2} θ=2π弧度,我们使用Rodrigues’ formula来计算旋转矩阵:

首先计算反对称矩阵 u ^ \hat{u} u^
u ^ = [ 0 − u z u y u z 0 − u x − u y u x 0 ] = [ 0 − 1 0 1 0 0 0 0 0 ] u ^ 2 = [ − 1 0 0 0 − 1 0 0 0 0 ] \hat{u} = \begin{bmatrix} 0 & -u_z & u_y \\ u_z & 0 & -u_x \\ -u_y & u_x & 0 \end{bmatrix} = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 0 \end{bmatrix} \\ \hat{u}^2 = \begin{bmatrix} -1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 0 \end{bmatrix} u^= 0uzuyuz0uxuyux0 = 010100000 u^2= 100010000
然后带入Rodrigues公式
R z ( θ ) = I + sin ⁡ θ u ^ + ( 1 − cos ⁡ θ ) u ^ 2 = [ 1 1 1 ] + [ 0 − sin ⁡ θ 0 − sin ⁡ θ 0 0 0 0 0 ] + [ cos ⁡ θ − 1 0 0 0 cos ⁡ θ − 1 0 0 0 0 ] = [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] θ = π 2 = [ 0 − 1 0 1 0 0 0 0 1 ] \begin{align} R_z(\theta) & = I + \sin\theta \hat{u} + (1-\cos \theta)\hat{u}^2 \\ & = \begin{bmatrix} 1 & & \\ & 1 & \\ & & 1 \end{bmatrix} + \begin{bmatrix} 0 & -\sin\theta & 0 \\ -\sin\theta & 0 & 0 \\ 0 & 0 & 0 \end{bmatrix} + \begin{bmatrix} \cos\theta-1 & 0 & 0 \\ 0 & \cos\theta-1 & 0\\ 0 & 0 & 0 \end{bmatrix} \\ & = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0\\ 0 & 0 & 1 \end{bmatrix}_{\theta=\frac{\pi}{2}} \\ & = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0\\ 0 & 0 & 1 \end{bmatrix} \end{align} Rz(θ)=I+sinθu^+(1cosθ)u^2= 111 + 0sinθ0sinθ00000 + cosθ1000cosθ10000 = cosθsinθ0sinθcosθ0001 θ=2π= 010100001

四元数

四元数(quafernions)是复数的推广,四元数通过四个数来描述旋转运动,给出了 S O ( 3 ) SO(3) SO(3)的一个全局参数表示法。四元数是一个矢量,其一般的表示形式为:
Q = q 0 + q 1 i + q 2 j + q 3 k Q = q_0 + q_1 i + q_2 j + q_3 k Q=q0+q1i+q2j+q3k
其中 q 0 q_0 q0 Q Q Q的标量部分, q = ( q 1 , q 2 , q 3 ) q=(q_1,q_2,q_3) q=(q1,q2,q3)为矢量部分。

1.3 三维空间中的刚体运动

通常来说,刚体运动包括旋转和平移两部分。如图描述固定于刚体上的动坐标系B相对于惯性坐标系A的位姿,设坐标系A的原点至坐标系B的原点的位置矢量为 p a b ∈ R 3 p_{ab}\in\mathcal{R}^3 pabR3,B系相对于A系的姿态为 R a b ∈ S O ( 3 ) R_{ab}\in SO(3) RabSO(3)。B系相对于A系的运动包括平移 p a b p_{ab} pab和旋转 R a b R_{ab} Rab,所以系统的位姿由 g a b = ( p a b , R a b ) g_{ab}=(p_{ab},R_{ab}) gab=(pab,Rab)确定,系统的位形空间为 R 3 \mathcal{R}^3 R3 S O ( 3 ) SO(3) SO(3)的乘积空间,记为 S E ( 3 ) SE(3) SE(3),意为:Special Euclidean
S E ( 3 ) = ∣ ( p , R ) : p ∈ R 3 , R ∈ S O ( 3 ) ∣ = R 3 × S O ( 3 ) SE(3) = |(p,R):p\in\mathcal{R}^3,R\in SO(3)| = \mathcal{R}^3 \times SO(3) SE(3)=(p,R):pR3,RSO(3)=R3×SO(3)

Image

与旋转的情况类似,元素 g = ( p , R ) ∈ S E ( 3 ) g=(p, R)\in SE(3) g=(p,R)SE(3)既可以用于确定刚体的位形,又可以用于由一点的坐标到另一坐标系的坐标变换。若, q a , q b ∈ R 3 q_a,q_b\in\mathcal{R}^3 qa,qbR3是分别属于A系和B系的坐标,当已知 q b q_b qb时, q a q_a qa可以通过坐标变换来得到
q a = g a b ( q b ) q a = p a b + R a b q b \begin{align} q_a & = g_{ab}(q_b) \\ q_a & = p_{ab} + R_{ab}q_b \end{align} qaqa=gab(qb)=pab+Rabqb
其中 g a b = ( p a b , R a b ) ∈ S E ( 3 ) g_{ab}=(p_{ab},R_{ab})\in SE(3) gab=(pab,Rab)SE(3)表示B系相对于A系的位形,用符号 g ( q ) g(q) g(q)来表示这一刚体变换,即:
g ( q ) = p + R q g(q) = p + Rq g(q)=p+Rq

齐次坐标表示法

为了使包含平移和旋转的刚体变换更简单(像纯旋转变化那样通过一个矩阵运算就能表示),所以引入了齐次坐标表示法。

首先给质点的坐标增加一个维度,最后一个维度设置为1,组成一个四维矢量(称为齐次坐标):
q ˉ = [ q 1 , q 2 , q 3 , 1 ] T \bar{q} = [q_1, q_2, q_3, 1]^T qˉ=[q1,q2,q3,1]T
矢量是通过质点的坐标相减获得的,所以矢量的齐次表示为:
v ˉ = [ v 1 , v 2 , v 3 , 0 ] T \bar{v} = [v_1, v_2, v_3, 0]^T vˉ=[v1,v2,v3,0]T
矢量和点的齐次坐标表示的第四个分量分别为0和1,请注意这一个差别。将上述的刚体变换 q a = p a b + R a b q b q_a = p_{ab} + R_{ab}q_b qa=pab+Rabqb写成矩阵的形式:
q ˉ a = [ q a 1 ] = [ R a b p a b 0 1 ] [ q b 1 ] = : g ˉ a b q ˉ b \bar{q}_a = \begin{bmatrix} q_a \\ 1 \end{bmatrix} = \begin{bmatrix} R_{ab} & p_{ab} \\ 0 & 1 \\ \end{bmatrix} \begin{bmatrix} q_b \\ 1 \end{bmatrix} =: \bar{g}_{ab}\bar{q}_b qˉa=[qa1]=[Rab0pab1][qb1]=:gˉabqˉb
g ˉ a b \bar{g}_{ab} gˉab称为 g a b ∈ S E ( 3 ) g_{ab}\in SE(3) gabSE(3)的齐次表示。通常,若 g = ( p , R ) ∈ S E ( 3 ) g=(p,R)\in SE(3) g=(p,R)SE(3),那么
g ˉ = [ R p 0 1 ] \bar{g} = \begin{bmatrix} R & p \\ 0 & 1 \end{bmatrix} gˉ=[R0p1]

齐次表示刚体变换的逆

如果 g = ( p , R ) ∈ S E ( 3 ) g = (p,R) \in SE(3) g=(p,R)SE(3),那么 g ˉ \bar{g} gˉ的逆可以由矩阵的逆来进行确定
g ˉ − 1 = [ R T − R T p 0 1 ] \bar{g}^{-1} = \begin{bmatrix} R^T & -R^Tp \\ 0 & 1 \end{bmatrix} gˉ1=[RT0RTp1]

刚体变换的组合

刚体变换的组合将构成新的刚体变换,若 g b c ∈ S E ( 3 ) g_{bc}\in SE(3) gbcSE(3)表示坐标系C相对于坐标系B的位形, g a b g_{ab} gab表示B系相对于A系的为形,那么通过齐次表示可以获得C系相对于A系的位形
g ˉ a c = g ˉ a b g ˉ b c = [ R a b p a b 0 1 ] [ R b c p b c 0 1 ] = [ R a b R b c R a b p b c + p a b 0 1 ] \begin{align} \bar{g}_{ac} & = \bar{g}_{ab} \bar{g}_{bc} \\ & = \begin{bmatrix} R_{ab} & p_{ab} \\ 0 & 1 \end{bmatrix} \begin{bmatrix} R_{bc} & p_{bc} \\ 0 & 1 \end{bmatrix} \\ & = \begin{bmatrix} R_{ab}R_{bc} & R_{ab}p_{bc} + p_{ab} \\ 0 & 1 \end{bmatrix} \end{align} gˉac=gˉabgˉbc=[Rab0pab1][Rbc0pbc1]=[RabRbc0Rabpbc+pab1]

计算刚体运动的例子

考虑刚体绕平行于z轴且经过点 ( 0 , l 1 , 0 ) ∈ R 3 (0, l_1, 0)\in\mathcal{R}^3 (0,l1,0)R3的一条直线的旋转运动,如图所示,求刚体位形的齐次表示

Image

由之前的例子可以知道,B系相对于A系的姿态矩阵为:
R a b = [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] R_{ab} = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0\\ 0 & 0 & 1 \end{bmatrix} Rab= cosθsinθ0sinθcosθ0001
B系原点在A系中的坐标为
p a b = [ 0 l 1 0 ] p_{ab} = \begin{bmatrix} 0 \\ l_1 \\ 0 \end{bmatrix} pab= 0l10
所以刚体位形的齐次表示矩阵为
g ˉ a b ( θ ) = [ R a b p a b 0 1 ] = [ cos ⁡ θ − sin ⁡ θ 0 0 sin ⁡ θ cos ⁡ θ 0 l 1 0 0 1 0 0 0 0 1 ] \bar{g}_{ab}(\theta) = \begin{bmatrix} R_{ab} & p_{ab} \\ 0 & 1 \end{bmatrix} = \left[ \begin{array}{ccc|c} \cos\theta & -\sin\theta & 0 & 0\\ \sin\theta & \cos\theta & 0 & l_1\\ 0 & 0 & 1 & 0 \\ \hline 0 & 0 & 0 & 1 \end{array} \right] gˉab(θ)=[Rab0pab1]= cosθsinθ00sinθcosθ0000100l101
在本文以下的表述中,刚体运动 g g g的齐次表示不再使用 g ˉ \bar{g} gˉ来加以区分。

刚体运动的指数坐标和运动旋量

定义:运动旋量(twist) ξ = [ v , ω ] T \xi=[v, \omega]^T ξ=[v,ω]T,通常包含两个部分,分别是线速度 v v v和角速度 ω \omega ω

考虑一个单臂机器人的旋转例子,如下图所示:

Image

臂端点 p ( t ) p(t) p(t)的线速度为:
p ˙ ( t ) = ω × ( p ( t ) − q ) \dot{p}(t) = \omega \times (p(t) - q) p˙(t)=ω×(p(t)q)
将上述式子写成齐次的形式
[ p ˙ 0 ] = [ w ^ − ω × q 0 0 ] [ p 1 ] [ p ˙ 0 ] = ξ ^ [ p 1 ] \begin{align} \begin{bmatrix} \dot{p} \\ 0 \end{bmatrix} & = \begin{bmatrix} \hat{w} & -\omega \times q \\ 0 & 0 \end{bmatrix} \begin{bmatrix} p \\ 1 \end{bmatrix} \\ \begin{bmatrix} \dot{p} \\ 0 \end{bmatrix} & = \hat{\xi} \begin{bmatrix} p \\ 1 \end{bmatrix} \end{align} [p˙0][p˙0]=[w^0ω×q0][p1]=ξ^[p1]
其中

ξ ^ = [ w ^ − ω × q 0 0 ] , v = − ω × q \hat{\xi}=\begin{bmatrix} \hat{w} & -\omega \times q \\ 0 & 0 \end{bmatrix} ,v=-\omega \times q ξ^=[w^0ω×q0],v=ω×q
上述微分方程的解为:
p ˉ ( t ) = e ξ ^ t p ˉ ( 0 ) \bar{p}(t) = e^{\hat{\xi}t}\bar{p}(0) pˉ(t)=eξ^tpˉ(0)
其中 e ξ ^ t ∈ R 4 × 4 e^{\hat{\xi}t}\in R^{4\times 4} eξ^tR4×4被称为矩阵 ξ ^ t \hat{\xi}t ξ^t的矩阵指数,可以展开为:
e ξ ^ t = I + ξ ^ t + ( ξ ^ t ) 2 2 ! + ( ξ ^ t ) 3 3 ! + ⋯ e^{\hat{\xi}t} = I + \hat{\xi}t + \frac{(\hat{\xi}t)^2}{2!} + \frac{(\hat{\xi}t)^3}{3!}+\cdots eξ^t=I+ξ^t+2!(ξ^t)2+3!(ξ^t)3+
如果是单位旋转角速度,那么 t t t可以完全由 θ \theta θ进行代替。

从这个例子我们可以得到旋量的意义和计算方式:
ξ = [ v ω ] = [ − ω × q ω ] ξ ^ = [ ω ^ v 0 0 ] \xi = \begin{bmatrix} v \\ \omega \end{bmatrix} = \begin{bmatrix} -\omega \times q \\ \omega \end{bmatrix} \\ \hat{\xi} = \begin{bmatrix} \hat{\omega} & v \\ 0 & 0 \end{bmatrix} ξ=[vω]=[ω×qω]ξ^=[ω^0v0]
包含了一个绕轴 ω \omega ω的旋转,和沿着 ω \omega ω轴线的平移运动,如下图所示

Image

可以把这个运动想象成拧螺丝,如下图所示

Image

矩阵指数 e ξ ^ θ e^{\hat{\xi}\theta} eξ^θ可以通过如下方式来进行计算
g = e ξ ^ θ = [ e ω ^ θ ( I − e ω ^ θ ) ( ω × v ) + ω ω T v θ 0 1 ] g =e^{\hat{\xi}\theta} = \begin{bmatrix} e^{\hat{\omega}\theta} & (I-e^{\hat{\omega}\theta})(\omega\times v) + \omega \omega^T v\theta \\ 0 & 1 \end{bmatrix} g=eξ^θ=[eω^θ0(Ieω^θ)(ω×v)+ωωTvθ1]
其中 e ω ^ θ = I + ω ^ sin ⁡ θ + ω ^ 2 ( 1 − cos ⁡ θ ) e^{\hat{\omega}\theta} = I + \hat{\omega}\sin \theta + \hat{\omega}^2(1-\cos \theta) eω^θ=I+ω^sinθ+ω^2(1cosθ),这是 S E ( 3 ) SE(3) SE(3)中的元素,它与前面的刚体变换不同,它描述的不是点在不同坐标系之间的变换,而是点由初始位置 p ( 0 ) ∈ R 3 p(0)\in\mathcal{R}^3 p(0)R3 p ( θ ) ∈ R 3 p(\theta)\in\mathcal{R}^3 p(θ)R3经过了如下刚体运动的位置坐标之间的变换
p ( θ ) = e ξ ^ θ p ( 0 ) p(\theta) = e^{\hat{\xi}\theta} p(0) p(θ)=eξ^θp(0)
上式子中, p ( 0 ) p(0) p(0) p ( θ ) p(\theta) p(θ)均在同一参考系中。运动旋量的指数可以理解为描述刚体由起始位置到最终位形的变换

Reference

[1]机器人操作的数学导论-MLS中文版

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/610115.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二分查找入门、二分查找模板

二分查找的具体实现是一个难点,挺复杂的,可以背住一个模板,然后以后再慢慢学习。下面是y总的二分模板(比较难懂,之后再学) y总的模板 二分的本质是在一个边界内,定义了两种不同的形状,其中某点是这两个性…

Golang | Leetcode Golang题解之第68题文本左右对齐

题目: 题解: // blank 返回长度为 n 的由空格组成的字符串 func blank(n int) string {return strings.Repeat(" ", n) }func fullJustify(words []string, maxWidth int) (ans []string) {right, n : 0, len(words)for {left : right // 当前…

详细解析DBC文件

《AUTOSAR谱系分解(ETAS工具链)》之总目录_autosar的uart模块-CSDN博客

Docker Desktop 修改容器的自启动设置

Docker Desktop 允许用户控制容器的自启动行为。如果你不希望某个容器在 Docker 启动时自动启动,你可以通过以下步骤来更改设置: 1. 打开 Docker Desktop 应用。 2. 点击右上角的设置(Settings)按钮,或者使用快捷键 Cm…

Hive Aggregation 聚合函数

Hive Aggregation 聚合函数 基础聚合 增强聚合

找最大数字-第12届蓝桥杯国赛Python真题解析

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第60讲。 找最大数字&#…

67万英语单词学习词典ACCESS\EXCEL数据库

这似乎是最多记录的英语单词学习词典,包含复数、过去分词等形式的单词。是一个针对想考级的人员辅助背单词学英语必备的数据,具体请自行查阅以下的相关截图。 有了数据才能想方设法做好产品,结合权威的记忆理论,充分调动用户的眼…

OpenSearch 与 Elasticsearch:7 个主要差异及如何选择

OpenSearch 与 Elasticsearch:7 个主要差异及如何选择 1. 什么是 Elasticsearch? Elasticsearch 是一个基于 Apache Lucene 构建的开源、RESTful、分布式搜索和分析引擎。它旨在处理大量数据,使其成为日志和事件数据管理的流行选择。 Elasti…

国产猫粮哪家强?福派斯三文鱼猫粮成新宠!

1️⃣ 品质保证:福派斯三文鱼猫粮是一款由国内知名宠物食品品牌生产的猫粮产品。该品牌有着严格的品质控制,确保每一粒猫粮都符合国家相关标准和规范,为猫咪提供安全、健康的食品。 2️⃣ 营养丰富:福派斯三文鱼猫粮采用新鲜三文鱼…

B/S模式的web通信(高并发服务器)

这里写目录标题 目标实现的目标 服务器代码(采用epoll实现服务器)整体框架main函数init_listen_fd函数(负责对lfd初始化的那一系列操作)epoll_run函数do_accept函数do_read函数内容补充:http中的getline函数 详解do_re…

ipv4手动设置网络的相关知识

基本知识 1.IP地址 IP地址 网络地址 主机地址(又称:主机号和网络号组成) 192.168.100.168(IP地址) 192.168.1.0 (网络地址) 0.0.0.168(主机地址) 2.家庭网络基础组成 3.子网掩码 作用:告诉计算机哪…

芝加哥量子曼哈顿项目:200 亿美元的量子计算园区

内容来源:量子前哨(ID:Qforepost) 文丨王珩 排版丨沛贤 深度好文:1000字丨5分钟阅读 摘要:芝加哥商业媒体称,伊利诺伊州政府正在大力推动耗资200亿美元、占地150英亩的芝加哥量子计算园区建设…

5月游戏市场迎来新的体验,网易两款游戏重磅出炉

易采游戏网5月9日消息,随着科技的飞速发展,手机游戏已经成为人们休闲娱乐的重要方式。在这个领域,网易作为国内领先的游戏开发商,一直致力于为玩家带来高品质的游戏体验。近日,网易携手国际大厂Square Enix&#xff0c…

ESP32引脚入门指南(四):从理论到实践(PWM)

引言 ESP32 作为物联网领域的明星微控制器,除了强大的Wi-Fi和蓝牙功能,还内置了丰富的外设资源,其中就包括高级的PWM(脉冲宽度调制)功能。本文将深入探讨ESP32的PWM引脚,解析其工作原理,并通过…

OV SSL比DV SSL更好吗

直接说结论,OV证书相较于DV证书而言,性能更加强大,加密等级以及加密方式也更优,从安全的角度上来说,OV证书会比DV证书拥有更多的优势。 不同于DV SSL证书申请只需要验证域名所有权,申请OV SSL证书除了会验…

Java的事件处理机制

Java事件处理机制 Java事件处理是采取“委派事件模型”。当事件发生时,产生事件的对象,会把此“信息”传递给“事件的监听者”处理,这里所说的“信息”实际上就是java.awt.event事件类库里某个类所创建的对象,把它称为“事件的对…

基于Springboot+Vue的Java项目-电影院购票系统开发实战(附演示视频+源码+LW)

大家好!我是程序员衣一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

国内护眼台灯品牌哪些实用?推荐五款物美价廉的台灯品牌

近年来,我们注意到儿童近视的现象呈现出增多且趋于低龄化的趋势。这一变化,部分原因可以归咎于孩子们越来越多地使用电子产品,另一部分则与他们面临的学业压力增加有关。鉴于此,家长们在挑选儿童学习用品时变得格外谨慎&#xff0…

华为OD机试【城市聚集度】(java)(200分)

1、题目描述 一张地图上有N个城市,城市和城市之间有且只有一条道路相连,要么直接相连,要么通过其他城市中转相连(可中转一次或多次)。城市与城市之间的道路都不会成环。 当切断通往某城市i的所有道路后,地图上将分成多个连通的城…

百融云创回购计划加速落实 机构看好中长期吸引力

单日回购近400万港元B类股份,一站式服务的AI科技领航者百融云创(百融云-W,6608.HK)的回购计划正在加速落实。 此前,在百融云创2023年年度业绩公告的同时,该公司一并披露将在2024年不时在公开市场购回总金额不超过2.5亿…
最新文章