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

news2024/11/26 15:27:51

机器人学

文章目录

  • 机器人学
    • 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.coloradmin.cn/o/1659887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人人都是开发者?Baidu Comate智能代码助手改变你传统的编程之路

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引入一、人人都是开发者二、Baidu Comate 智能编码助手2.1 Baidu Comate 是什么?2.2 Baidu Comate 支持那…

DDD面试题:DDD聚合和表的对应关系是什么 ?(来自蚂蚁面试)

尼恩说在前面: 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如字节、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: DDD 的外部接口调用,应该放在…

idea护眼主题推荐

idea是一个非常好用的开发工具,程序员们天天都与它打交道,最近写代码眼睛的了干眼症,对屏幕特别敏感,所以关注了下主题相关的内容,jetbrains官方也有主题市场插件:https://plugins.jetbrains.com/search?t…

IDEA终端环境配置

Idea如何配置终端; 第一步:找到我的电脑,右击——属性——高级系统设置——环境变量 先配置path: 在后面加入:C:\Program Files (x86)\Java\jdk1.7.0_75\bin(每个人放置jdk的位置不同。) 新建classpath:…

【比邻智选】MR880A模组

🚀高性价比,5G/4G双模,稳定可靠 🌐功能丰富,5G特性一应俱全 🧩多封装兼容,适配性强,灵活升级智能设备

照片文件夹惊变白板?揭秘背后的原因及恢复秘籍

我们生活在一个数字化时代,照片已经成为记录生活的重要方式。然而,当你兴冲冲地打开保存珍贵记忆的文件夹时,却发现里面的照片全都变成了白板,这种心情无异于晴天霹雳。那么,这究竟是怎么回事呢? 照片文件夹…

基于springboot + vue 实现的简易博客系统

项目效果图 登陆页面 文章列表 发表文章 用户管理 栏目管理 数据统计 后端技术栈后端主要采用了: 1.SpringBoot 2.SpringSecurity 3.MyBatis 4.部分接口遵循Restful风格 5.MySQL 前端技术栈前端主要采用了: 1.Vue 2.axios 3.Elemen…

接口自动化框架篇:接口框架中的日志记录封装!

接口自动化框架中的日志记录是一个重要的环节,它能帮助我们追踪接口的执行情况、调试问题、分析测试结果等。通过规范的日志记录,我们可以更好地管理和维护接口自动化测试代码。 以下是一个从0到1的详细规范,来进行接口框架中的日志记录封装…

SalFAU-Net:显著性目标检测的显著性融合注意U-Net

SalFAU-Net:显著性目标检测的显著性融合注意U-Net 摘要IntroductionRelated Works SalFAU-Net: Saliency Fusion Attention U-Net for Salient Object Detection 摘要 显著目标检测(SOD)在计算机视觉中仍然是一个重要的任务,其应用范围从图像…

2024数维杯B题完整思路24页+配套代码1-4问+可视化结果图

后续参考论文也会进行一个更新 2024年数维杯数学建模B题主要关注生物质和煤共热解问题的研究 点击链接加入群聊【2024数维杯数学建模ABC题资料汇总】: 2024数维杯B题完整思路18页1-5问配套代码后续参考论文https://www.jdmm.cc/file/2710636 该段文字的第一个问题…

双层嵌线和线径的替代方案

电机只有三种嵌线方式 1.单层嵌线 2.双层嵌线 3.单双层嵌线 前面说的都是单层嵌线,下面介绍双层嵌线! 双层嵌线一般线径都比较粗! 线径只有几种规格的,大线径可用几根小线径替代! 满足的原则:大线径A的…

OpenHarmony 实战开发——编译4.0 bete2及master分支,添加参数--no-prebuilt-sdk跳过编译sdk

简介 用户应用程序泛指运行在设备的操作系统之上,为用户提供特定服务的程序,简称“应用”。一个应用所对应的软件包文件,称为“应用程序包”。 OpenHarmony 提供了应用程序包开发、安装、查询、更新、卸载的管理机制,方便开发者…

项目管理在软件工程中的实践方法

软件工程是一个复杂的过程,涉及到需求分析、设计、编码、测试和维护等多个阶段。有效的项目管理对于确保软件项目成功至关重要。以下是结合附件内容,关于项目管理在软件工程中实践的一些方法。 1. 明确项目愿景和目标 在项目启动之初,项目经…

做业务有时候确实是需要一些运气

无论是考试还是做业务,那些考得好或者是业绩做得突出的人,都喜欢谦虚地说一句:只是运气好,就是运气好而已,也没什么..... 有人说:发财也要靠好运气,一个人运气好真的如此重要吗?那么…

查看微信小程序主包大小

前言 略 查看微信小程序主包大小 在微信开发者工具右上角找到“详情->基本信息” 查看微信小程序主包构成 通过微信开发者工具中的“代码依赖分析”工具查看

农业智能小型气象站功能有哪些?

TH-NQ10农业智能小型气象站是一种结合了智能化技术的小型气象监测设备,主要用于农业生产环境中。它配备了各种传感器,用于实时监测和记录气象参数,如温度、湿度、风速、降雨量等,以及土壤参数,如土壤墒情、土壤温度等。…

【OceanBase诊断调优】—— SQL 执行报错而不能计入 SQL_AUDIT 的情况

通常,执行成果的 SQL 都会计入 SQL_AUDIT 中,而执行报错的 SQL 则需要依据其执行报错的阶段来决定是否计入 SQL_AUDIT 中。 在 OceanBase 数据库中,SQL 请求的执行流程如图所示。 如果 SQL 在进入 Executor 阶段前发生报错,则该 …

YOLOV5更换转置卷积,助力涨点!

由于转置卷积是nn库自带的,所以我们直接找到models文件夹中的yolo.py文件中的 parse_model函数,再在如下图的地方添加转置卷积模块 # YOLOv5 🚀 by Ultralytics, AGPL-3.0 license """ YOLO-specific modules.Usage:$ python models/yolo.py --cfg yolov5s.…

【Android Studio】开启真机调试

1 打开手机的开发者模式 各种款式的手机进入开发者模式的情况不同,但大致是在 【关于手机】中多次点击系统版本即可进入。这里以小米8为例,记录下流程。 1.1 进入手机开发者模式 【设置】->【我的设备】->【全部参数】->【MIUI版本】连续点击3…

科技查新中医学科研项目查新点如何确立与提炼?案例讲解

一、前言 医学科技查新包括立项查新和成果查新两个部分,其中医学立项查新,它是指在医学科研项目申报开题之前,通过在一定范围内进行该课题的相关文献检索 ( 可以根据项目委托人的具体要求,进行国内检索或者进行国外检索 ) &#x…