刚体动力学算法第二章 空间向量代数(2)

2.8 坐标变换(Coordinate Transforms)

运动矢量从 A A A 坐标系到 B B B 坐标系的坐标变换通常写为 B X A { }^{B} \boldsymbol{X}_{A} BXA,力矢量的相同变换为 B X A ∗ { }^ {B} \boldsymbol{X}_{A}^{*} BXA。这两个方程的关系式为 B X A ∗ = B X A − T { }^{B} \boldsymbol{X}_{A}^{*}={ }^{B} \boldsymbol{X}_{A}^{-\mathrm{T }} BXA=BXAT(参见方程 2.13)。在本节中,我们将建立普吕克坐标系之间的坐标变换公式。

A A A B B B 表示两个普吕克坐标系。每个坐标系都由笛卡尔坐标系的位置和方向定义,并且每个坐标系还定义一个笛卡尔坐标系。为了方便起见,我们将对所有三个 entities 使用相同的名称;因此坐标系 A A A 定义了普吕克坐标系 A A A 和笛卡尔坐标系 A A A B B B 也类似。 B X A { }^{B} \boldsymbol{X}_{A} BXA 的公式仅取决于坐标系 B B B 相对于坐标系 A A A 的位置和方向,因此可以表示为两个更简单变换的乘积:一个取决于坐标系 B B B 的相对位置,另一个取决于其相对方向。

旋转(Rotation)

A A A B B B 是两个原点都在点 O O O 的笛卡尔坐标系。给定点 O O O m ^ ∈ M 6 \hat{\boldsymbol{m}} \in \mathrm{\boldsymbol{M}}^{6} m^M6 的任一运动矢量可以表示为三维矢量 m \boldsymbol{m} m m O \boldsymbol{m}_{O} mO,且 m ^ \hat{\boldsymbol{m}} m^ 的普吕克坐标系是 矢量 m \boldsymbol{m} m m O \boldsymbol{m}_{O} mO 的笛卡尔坐标系。因此,令 A m ^ , A m , A m O , B m ^ , B m { }^{A} \hat{\boldsymbol{m}},{ }^{A} \boldsymbol{m},{ }^{A} \boldsymbol{m}_{O},{ }^{B} \hat{\boldsymbol{m}},{ }^{B} \boldsymbol{m} Am^,Am,AmO,Bm^,Bm B m O { }^{B} \boldsymbol{m}_{O} BmO 表示 A A A B B B 坐标系中 m ^ , m \hat{\boldsymbol{m}}, \boldsymbol{m} m^,m m O \boldsymbol{m}_{O} mO 的坐标向量,设 E \boldsymbol{E} E 是将 3D 矢量从 A 坐标系转换为 B 坐标系(即 E = B E A \boldsymbol{E}={ }^{B} \boldsymbol{E}_{A} E=BEA)的 3 × 3 3 \times 3 3×3 旋转矩阵,可得出:
B m ^ = [ B m B m O ] = [ E A m E A m O ] = [ E 0 0 E ] A m ^ , { }^{B} \hat{\boldsymbol{m}}=\left[\begin{array}{c} { }^{B} \boldsymbol{m} \\ { }^{B} \boldsymbol{m}_{O} \end{array}\right]=\left[\begin{array}{c} \boldsymbol{E}^{A} \boldsymbol{m} \\ \boldsymbol{E}^{A} \boldsymbol{m}_{O} \end{array}\right]=\left[\begin{array}{cc} \boldsymbol{E} & \mathbf{0} \\ \mathbf{0} & \boldsymbol{E} \end{array}\right]{ }^{A} \hat{\boldsymbol{m}}, Bm^=[BmBmO]=[EAmEAmO]=[E00E]Am^,

因此

B X A = [ E 0 0 E ] (2.19) { }^{B} \boldsymbol{X}_{A}=\left[\begin{array}{cc} \boldsymbol{E} & \mathbf{0} \\ \mathbf{0} & \boldsymbol{E} \end{array}\right] \tag{2.19} BXA=[E00E](2.19)

力矢量的等效变换完全相同:

B X A ∗ = B X A − T = [ E 0 0 E ] (2.20) { }^{B} \boldsymbol{X}_{A}^{*}={ }^{B} \boldsymbol{X}_{A}^{-\mathrm{T}}=\left[\begin{array}{ll} \boldsymbol{E} & \mathbf{0} \\ \mathbf{0} & \boldsymbol{E} \end{array}\right] \tag{2.20} BXA=BXAT=[E00E](2.20)

平移(Translation)

假设 O O O P P P 是空间中的两个点,且每个点对应一个笛卡尔坐标系,两个坐标系的方向相同。任一运动矢量 m ^ ∈ M 6 \hat{\boldsymbol{m}} \in \mathrm{\boldsymbol{M}}^{6} m^M6 在点 O O O 处可以用 3 D 3 \mathrm{D} 3D 矢量 m \boldsymbol{m} m m O \boldsymbol{m}_{O} mO 表示, 且在点 P P P 处可以用向量 m \boldsymbol{m} m m P \boldsymbol{m}_{P} mP 表示,其中 m P = m O − O P → × m \boldsymbol{m}_{P}=\boldsymbol{m}_{O}-\overrightarrow{O P} \times \boldsymbol{m} mP=mOOP ×m (如公式 2.1 所示)。在这两种情况下, m ^ \hat{\boldsymbol{m}} m^ 的普吕克坐标是相应的一对 3 D 3 \mathrm{D} 3D 向量的笛卡尔坐标,因此我们有

m ^ P = [ m m P ] = [ m m O − r × m ] = [ 1 0 − r × 1 ] m ^ O , \hat{\boldsymbol{m}}_{P}=\left[\begin{array}{c} \boldsymbol{m} \\ \boldsymbol{m}_{P} \end{array}\right]=\left[\begin{array}{c} \boldsymbol{m} \\ \boldsymbol{m}_{O}-\boldsymbol{r} \times \boldsymbol{m} \end{array}\right]=\left[\begin{array}{cc} \mathbf{1} & \mathbf{0} \\ -\boldsymbol{r} \times & \mathbf{1} \end{array}\right] \hat{\boldsymbol{m}}_{O}, m^P=[mmP]=[mmOr×m]=[1r×01]m^O,

其中 r = O P → \boldsymbol{r}=\overrightarrow{O P} r=OP 。因此

P X O = [ 1 0 − r × 1 ] { }^{P} \boldsymbol{X}_{O}=\left[\begin{array}{cc} \mathbf{1} & \mathbf{0} \\ -\boldsymbol{r} \times & \mathbf{1} \end{array}\right] PXO=[1r×01]

力矢量的等效变换为

P X O ∗ = P X O − T = [ 1 − r × 0 1 ] . { }^{P} \boldsymbol{X}_{O}^{*}={ }^{P} \boldsymbol{X}_{O}^{-\mathrm{T}}=\left[\begin{array}{cc} \mathbf{1} & -\boldsymbol{r} \times \\ \mathbf{0} & \mathbf{1} \end{array}\right] . PXO=PXOT=[10r×1].

形式为 a × \boldsymbol{a} \times a×(发音为 ‘a-cross’)的表达式表示将 b \boldsymbol{b} b 映射到 a × b \boldsymbol{a} \times \boldsymbol{b} a×b 的运算符。如果 a \boldsymbol{a} a 是一个 3 D 3 \mathrm{D} 3D 坐标向量,则 a × \boldsymbol{a} \times a× 是公式给定 3 × 3 3 \times 3 3×3 矩阵
[ x y z ] × = [ 0 − z y z 0 − x − y x 0 ] \left[\begin{array}{l} x \\ y \\ z \end{array}\right] \times=\left[\begin{array}{ccc} 0 & -z & y \\ z & 0 & -x \\ -y & x & 0 \end{array}\right] xyz ×= 0zyz0xyx0

在这里插入图片描述

该运算符具有几个数学性质,如表 2.1 中列出。我们将把形式为 a × b × c \boldsymbol{a} \times \boldsymbol{b} \times \boldsymbol{c} a×b×c 的表达式解释为表示 ( a × )( b × ) c (\boldsymbol{a} \times)(\boldsymbol{b} \times) \boldsymbol{c} a×)(b×c,这与 a × ( b × c ) \boldsymbol{a} \times(\boldsymbol{b} \times \boldsymbol{c}) a×b×c 相同。任何其他解释都需要括号。同样,表达式 a + b × c \boldsymbol{a}+\boldsymbol{b} \times \boldsymbol{c} a+b×c E a × \boldsymbol{E} \boldsymbol{a} \times Ea× 分别表示 a + ( b × c ) \boldsymbol{a}+(\boldsymbol{b} \times \boldsymbol{c}) a+b×c E ( a × ) \boldsymbol{E}(\boldsymbol{a} \times) Ea×,以及任何其他解释都需要括号。

rbdl 代码

在 rbdl 库里,对应 a × \boldsymbol{a} \times a× 的对应代码为

inline Matrix3d VectorCrossMatrix (const Vector3d &vector) {
  return Matrix3d (
      0., -vector[2], vector[1],
      vector[2], 0., -vector[0],
      -vector[1], vector[0], 0.
      );
}

注:这也是一个三维向量的反对称阵

广义变换(General Transforms)

A A A B B B 是笛卡尔坐标系,原点分别为 O O O P P P;设 r \boldsymbol{r} r 表示在 A A A 坐标系的 O P → \overrightarrow{O P} OP 坐标向量;并让 E \boldsymbol{E} E 表示将 3 D 3 \mathrm{D} 3D 向量从 A A A 坐标此转换为 B B B 坐标系的旋转矩阵。从 A A A 坐标系到 B B B 坐标系的 Plücker 变换是 r \boldsymbol{r} r 平移和 E \boldsymbol{E} E 旋转的乘积。运动矢量变换的公式为
B X A = [ E 0 0 E ] [ 1 0 − r × 1 ] = [ E 0 − E r × E ] (2.24) { }^{B} \boldsymbol{X}_{A}=\left[\begin{array}{cc} \boldsymbol{E} & \mathbf{0} \\ \mathbf{0} & \boldsymbol{E} \end{array}\right]\left[\begin{array}{cc} \mathbf{1} & \mathbf{0} \\ -\boldsymbol{r} \times & \mathbf{1} \end{array}\right]=\left[\begin{array}{cc} \boldsymbol{E} & \mathbf{0} \\ -\boldsymbol{E} \boldsymbol{r} \times & \boldsymbol{E} \end{array}\right] \tag{2.24} BXA=[E00E][1r×01]=[EEr×0E](2.24)

力矢量的等价变换为

B X A ∗ = [ E 0 0 E ] [ 1 − r × 0 1 ] = [ E − E r × 0 E ] (2.25) { }^{B} \boldsymbol{X}_{A}^{*}=\left[\begin{array}{cc} \boldsymbol{E} & \mathbf{0} \\ \mathbf{0} & \boldsymbol{E} \end{array}\right]\left[\begin{array}{cc} \mathbf{1} & -\boldsymbol{r} \times \\ \mathbf{0} & \mathbf{1} \end{array}\right]=\left[\begin{array}{cc} \boldsymbol{E} & -\boldsymbol{E} \boldsymbol{r} \times \\ \mathbf{0} & \boldsymbol{E} \end{array}\right] \tag{2.25} BXA=[E00E][10r×1]=[E0Er×E](2.25)

这两个变换的逆为

A X B = [ 1 0 r × 1 ] [ E T 0 0 E T ] = [ E T 0 r × E T E T ] (2.26) { }^{A} \boldsymbol{X}_{B}=\left[\begin{array}{cc} \mathbf{1} & \mathbf{0} \\ \boldsymbol{r} \times & \mathbf{1} \end{array}\right]\left[\begin{array}{cc} \boldsymbol{E}^{\mathrm{T}} & \mathbf{0} \\ \mathbf{0} & \boldsymbol{E}^{\mathrm{T}} \end{array}\right]=\left[\begin{array}{cc} \boldsymbol{E}^{\mathrm{T}} & \mathbf{0} \\ \boldsymbol{r} \times \boldsymbol{E}^{\mathrm{T}} & \boldsymbol{E}^{\mathrm{T}} \end{array}\right] \tag{2.26} AXB=[1r×01][ET00ET]=[ETr×ET0ET](2.26)

A X B ∗ = [ 1 r × 0 1 ] [ E T 0 0 E T ] = [ E T r × E T 0 E T ] (2.27) { }^{A} \boldsymbol{X}_{B}^{*}=\left[\begin{array}{cc} \mathbf{1} & \boldsymbol{r} \times \\ \mathbf{0} & \mathbf{1} \end{array}\right]\left[\begin{array}{cc} \boldsymbol{E}^{\mathrm{T}} & \mathbf{0} \\ \mathbf{0} & \boldsymbol{E}^{\mathrm{T}} \end{array}\right]=\left[\begin{array}{cc} \boldsymbol{E}^{\mathrm{T}} & \boldsymbol{r} \times \boldsymbol{E}^{\mathrm{T}} \\ \mathbf{0} & \boldsymbol{E}^{\mathrm{T}} \end{array}\right] \tag{2.27} AXB=[10r×1][ET00ET]=[ET0r×ETET](2.27)

这个有点奇怪,看起来像少了一个 负号

为了进行比较,从 A A A B B B(齐次)坐标的 4 × 4 4 \times 4 4×4 齐次坐标变换矩阵的公式为
B T A = [ E − E r 0 1 ] (2.28) { }^{B} \boldsymbol{T}_{A}=\left[\begin{array}{cc} \boldsymbol{E} & -\boldsymbol{E} \boldsymbol{r} \\ \mathbf{0} & 1 \end{array}\right] \tag{2.28} BTA=[E0Er1](2.28)

rx ⁡ ( θ ) = [ 1 0 0 0 c s 0 − s c ] ry ⁡ ( θ ) = [ c 0 − s 0 1 0 s 0 c ] rz ⁡ ( θ ) = [ c s 0 − s c 0 0 0 1 ] ( c = cos ⁡ ( θ ) , s = sin ⁡ ( θ ) ) rot ⁡ ( E ) = [ E 0 0 E ] xlt ⁡ ( r ) = [ 1 0 − r × 1 ] rotx ⁡ ( θ ) = rot ⁡ ( rx ⁡ ( θ ) ) roty ⁡ ( θ ) = rot ⁡ ( ry ⁡ ( θ ) ) rotz ⁡ ( θ ) = rot ⁡ ( rz ⁡ ( θ ) ) \begin{aligned} & \operatorname{rx}(\theta)=\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & c & s \\ 0 & -s & c \end{array}\right] \quad \operatorname{ry}(\theta)=\left[\begin{array}{ccc} c & 0 & -s \\ 0 & 1 & 0 \\ s & 0 & c \end{array}\right] \quad \operatorname{rz}(\theta)=\left[\begin{array}{ccc} c & s & 0 \\ -s & c & 0 \\ 0 & 0 & 1 \end{array}\right] \\ & (c=\cos (\theta), \quad s=\sin (\theta)) \\ & \operatorname{rot}(\boldsymbol{E})=\left[\begin{array}{cc} \boldsymbol{E} & \mathbf{0} \\ \mathbf{0} & \boldsymbol{E} \end{array}\right] \quad \operatorname{xlt}(\boldsymbol{r})=\left[\begin{array}{cc} \mathbf{1} & \mathbf{0} \\ -\boldsymbol{r} \times & \mathbf{1} \end{array}\right] \quad \begin{array}{l} \operatorname{rotx}(\theta)=\operatorname{rot}(\operatorname{rx}(\theta)) \\ \operatorname{roty}(\theta)=\operatorname{rot}(\operatorname{ry}(\theta)) \\ \operatorname{rotz}(\theta)=\operatorname{rot}(\operatorname{rz}(\theta)) \\ \end{array} \end{aligned} rx(θ)= 1000cs0sc ry(θ)= c0s010s0c rz(θ)= cs0sc0001 (c=cos(θ),s=sin(θ))rot(E)=[E00E]xlt(r)=[1r×01]rotx(θ)=rot(rx(θ))roty(θ)=rot(ry(θ))rotz(θ)=rot(rz(θ))

Table 2.2: 旋转和普吕克变换函数

为了便于描述 Plücker 变换,我们偶尔会使用表 2.2 中列出的函数。就这些功能而言,等式 2.24 可以写成 B X A = rot ⁡ ( E ) xlt ⁡ ( r ) { }^{B} \boldsymbol{X}_{A}=\operatorname{rot}(\boldsymbol{E}) \operatorname{xlt}(\boldsymbol{r}) BXA=rot(E)xlt(r),等等。

最后,请注意,我们采用了以下约定来描述坐标变换: B X A { }^{B} \boldsymbol{X}_{A} BXA 的公式(或 B E A { }^{B} \boldsymbol{E} _{A} BEA ) 与如何移动坐标系 A A A 以便使其与坐标系 B B B 重合的描述相关联。例如,表达式“ rotx ⁡ ( θ ) \operatorname{rotx}(\theta) rotx(θ)”读起来就像语句“围绕 x x x轴旋转 θ \theta θ”语句的缩写版本,其值是坐标变换 B X A { }^{B} \boldsymbol{X}_{A} BXA 表示坐标系 B B B 相对于坐标系 A A A 绕公共 x x x 轴旋转 θ \theta θ 的情况。读者应该记住,有些作者使用不同的约定。

rbdl 代码

在 rbdl 的代码里,

  • 使用空间变换作为结构体 SpatialTransform 描述 X 。

  • 使用 Xrot 函数描述绕给定方向的轴的旋转。这里选取《现代机器人学》里关于旋转某一向量或坐标系的计算方法。(详细推导可以看罗德里得斯公式。)

Rot ⁡ ( ω ^ , θ ) = [ c θ + ω ^ 1 2 ( 1 − c θ ) ω ^ 1 ω ^ 2 ( 1 − c θ ) − ω ^ 3 s θ ω ^ 1 ω ^ 3 ( 1 − c θ ) + ω ^ 2 s θ ω ^ 1 ω ^ 2 ( 1 − c θ ) + ω ^ 3 s θ c θ + ω ^ 2 2 ( 1 − c θ ) ω ^ 2 ω ^ 3 ( 1 − c θ ) − ω ^ 1 s θ ω ^ 1 ω ^ 3 ( 1 − c θ ) − ω ^ 2   s θ ω ^ 2 ω ^ 3 ( 1 − c θ ) + ω ^ 1   s θ c θ + ω ^ 3 2 ( 1 − c θ ) ] \begin{aligned} & \operatorname{Rot}(\hat{\omega}, \theta)= \\ & {\left[\begin{array}{ccc} c_\theta+\hat{\omega}_1^2\left(1-c_\theta\right) & \hat{\omega}_1 \hat{\omega}_2\left(1-c_\theta\right)-\hat{\omega}_3 s_\theta & \hat{\omega}_1 \hat{\omega}_3\left(1-c_\theta\right)+\hat{\omega}_2 s_\theta \\ \hat{\omega}_1 \hat{\omega}_2\left(1-c_\theta\right)+\hat{\omega}_3 s_\theta & c_\theta+\hat{\omega}_2^2\left(1-c_\theta\right) & \hat{\omega}_2 \hat{\omega}_3\left(1-c_\theta\right)-\hat{\omega}_1 s_\theta \\ \hat{\omega}_1 \hat{\omega}_3\left(1-c_\theta\right)-\hat{\omega}_2 \mathrm{~s}_\theta & \hat{\omega}_2 \hat{\omega}_3\left(1-c_\theta\right)+\hat{\omega}_1 \mathrm{~s}_\theta & c_\theta+\hat{\omega}_3^2\left(1-c_\theta\right) \end{array}\right]} \end{aligned} Rot(ω^,θ)= cθ+ω^12(1cθ)ω^1ω^2(1cθ)+ω^3sθω^1ω^3(1cθ)ω^2 sθω^1ω^2(1cθ)ω^3sθcθ+ω^22(1cθ)ω^2ω^3(1cθ)+ω^1 sθω^1ω^3(1cθ)+ω^2sθω^2ω^3(1cθ)ω^1sθcθ+ω^32(1cθ)

  • Xrotx、Xroty、Xrotz、 Xtrans 都对应上述的旋转和普吕克变换函数

以下摘抄自《现代机器人学》的书

齐次变换矩阵是一个 4 × 4 4 \times 4 4×4 的矩阵,其表示方法为
T = [ R p 0 1 ] \boldsymbol{T}=\left[\begin{array}{cc} \boldsymbol{R} & \boldsymbol{p} \\ \mathbf{0} & 1 \end{array}\right] T=[R0p1]
其逆矩阵
T − 1 = [ R T − R T p 0 1 ] \boldsymbol{T}^{-1}=\left[\begin{array}{cc} \boldsymbol{R}^{T} & -\boldsymbol{R}^{T} \boldsymbol{p} \\ \mathbf{0} & 1 \end{array}\right] T1=[RT0RTp1]
定义 3.20. 给定 T = ( R , p ) ∈ S E ( 3 ) T=(R, p) \in S E(3) T=(R,p)SE(3), 其伴随变换矩阵 (adjoint representation) [ Ad ⁡ T ] \left[\operatorname{Ad}_T\right] [AdT]
[ Ad ⁡ T ] = [ R 0 [ p ] R R ] ∈ R 6 × 6 . \left[\operatorname{Ad}_T\right]=\left[\begin{array}{cc} R & 0 \\ {[p] R} & R \end{array}\right] \in \mathbb{R}^{6 \times 6} . [AdT]=[R[p]R0R]R6×6.
命题 3.21 对任一 T ∈ S E ( 3 ) T \in S E(3) TSE(3) ,总是满足:
[ Ad ⁡ T ] − 1 = [ Ad ⁡ T − 1 ] , \left[\operatorname{Ad}_T\right]^{-1}=\left[\operatorname{Ad}_{T^{-1}}\right], [AdT]1=[AdT1],
对运动旋量的结果小结

命题 3.22. 给定一个(空间)固定坐标系 { s } \{\mathrm{s}\} {s},和物体坐标系 { b } \{\mathrm{b}\} {b},和一个可微的齐次变换 T s b ( t ) ∈ S E ( 3 ) T_{s b}(t) \in S E(3) Tsb(t)SE(3),其中
T s b ( t ) = [ R ( t ) p ( t ) 0 1 ] , T_{s b}(t)=\left[\begin{array}{cc} R(t) & p(t) \\ 0 & 1 \end{array}\right], Tsb(t)=[R(t)0p(t)1],
那么
T s b − 1 T ˙ s b = [ V b ] = [ [ ω b ] v b 0 0 ] ∈ se ⁡ ( 3 ) T_{s b}^{-1} \dot{T}_{s b}=\left[\mathcal{V}_b\right]=\left[\begin{array}{cc} {\left[\omega_b\right]} & v_b \\ 0 & 0 \end{array}\right] \in \operatorname{se}(3) Tsb1T˙sb=[Vb]=[[ωb]0vb0]se(3)
是物体运动旋量的矩阵表示,而
T ˙ s b T s b − 1 = [ V s ] = [ [ ω s ] v s 0 0 ] ∈ se ⁡ ( 3 ) \dot{T}_{s b} T_{s b}^{-1}=\left[\mathcal{V}_s\right]=\left[\begin{array}{cc} {\left[\omega_s\right]} & v_s \\ 0 & 0 \end{array}\right] \in \operatorname{se}(3) T˙sbTsb1=[Vs]=[[ωs]0vs0]se(3)
是空间运动旋量的矩阵表示。运动旋量 V s \mathcal{V}_s Vs V b \mathcal{V}_b Vb 之间的关系表达式为
V s = [ ω s v s ] = [ R 0 [ p ] R R ] [ ω b v b ] = [ Ad ⁡ T s b ] V b V b = [ ω b v b ] = [ R T 0 − R T [ p ] R T ] [ ω s v s ] = [ Ad ⁡ T b s ] V s . \begin{aligned} & \mathcal{V}_s=\left[\begin{array}{c} \omega_s \\ v_s \end{array}\right]=\left[\begin{array}{cc} R & 0 \\ {[p] R} & R \end{array}\right]\left[\begin{array}{c} \omega_b \\ v_b \end{array}\right]=\left[\operatorname{Ad}_{T_{s b}}\right] \mathcal{V}_b \\ & \mathcal{V}_b=\left[\begin{array}{c} \omega_b \\ v_b \end{array}\right]=\left[\begin{array}{cc} R^{\mathrm{T}} & 0 \\ -R^{\mathrm{T}}[p] & R^{\mathrm{T}} \end{array}\right]\left[\begin{array}{c} \omega_s \\ v_s \end{array}\right]=\left[\operatorname{Ad}_{T_{b s}}\right] \mathcal{V}_s . \end{aligned} Vs=[ωsvs]=[R[p]R0R][ωbvb]=[AdTsb]VbVb=[ωbvb]=[RTRT[p]0RT][ωsvs]=[AdTbs]Vs.
写为更为通用的形式,对于任意的两个坐标系 { c } \{\mathrm{c}\} {c} { d } \{\mathrm{d}\} {d},在 { c } \{\mathrm{c}\} {c}中表示的运动旋量 V c \mathcal{V}_c Vc与在 { d } \{\mathrm{d}\} {d}中表示的运动旋量 V d \mathcal{V}_d Vd之间有关系
V c = [ Ad ⁡ T c d ] V d , V d = [ Ad ⁡ T d c ] V c \mathcal{V}_c=\left[\operatorname{Ad}_{T_{c d}}\right] \mathcal{V}_d, \quad \mathcal{V}_d=\left[\operatorname{Ad}_{T_{d c}}\right] \mathcal{V}_c Vc=[AdTcd]Vd,Vd=[AdTdc]Vc

两本书的公式符号区别:

E = R E = R E=R p = − E r p = -E r p=Er 。因为在《现代机器人学》里,假设 R 是 A 坐标系变换到 B 坐标系,p 是 A 坐标系的原点在 B 坐标系中的表示;而 《刚体动力学算法》里,r 是 B 坐标系的原点在 A 坐标系中的表示。

例如伴随变换中的第二行第一列,在 《刚体动力学算法》里: − E r × -\boldsymbol{E} \boldsymbol{r} \times Er× 。根据 《现代机器人学》里的命题 3.8 R [ ω ] R T = [ R ω ] R[\omega]R^{T}=[R\omega] R[ω]RT=[Rω] 。 因此 , − E r × = − E [ r ] E T E = − [ − p ] E = [ p ] E -Er\times = -E[r]E^TE=-[-p]E = [p]E Er×=E[r]ETE=[p]E=[p]E 。到这一步把公式里的 E 全部换成 R ,就能和 《现代机器人学》里的伴随变换矩阵一样了。


齐次变换矩阵和伴随变换矩阵的区别

齐次变换矩阵和伴随变换矩阵在机器人学里的物理意义的区别

  • 齐次变换矩阵(Homogeneous Transformation Matrix):
    • 齐次变换矩阵描述了从一个参考坐标系到另一个参考坐标系的刚体变换,即姿态和位置的变换关系。
    • 对于机器人来说,它用于将机械臂末端执行器相对于机器人基座的位姿(平移和旋转)表示为一个矩阵形式。
    • 具体而言,对于一个机器人的末端执行器,其位姿(包括位置和姿态)可以通过齐次变换矩阵 T 表示为一个 4×4 的矩阵。
    • 齐次变换矩阵在机器人学中广泛应用于描述机器人末端执行器的位姿变换,可以用于控制机器人的运动、路径规划和逆运动学求解等问题。
  • 伴随变换矩阵(Adjoint Transformation Matrix):
    • 伴随变换矩阵是齐次变换矩阵在刚体运动过程中的衍生概念。它描述了刚体坐标系的变换对于刚体上一点速度和力矩的影响。
    • 对于一个机器人的末端执行器来说,伴随变换矩阵用于将机器人基座坐标系下的速度和力矩转换到末端执行器坐标系下。这样可以方便地进行力矩控制、扭矩传递和动力学计算等任务。
    • 伴随变换矩阵通常表示为一个 6×6 的矩阵形式。
    • 伴随变换矩阵在机器人学中被广泛应用于运动学和动力学计算,通过将力矩和速度在不同坐标系间进行转换,实现了机器人末端执行器的运动规划和控制。

《机器人手册》里的相关内容

另外,在 《机器人手册》 的书里,也有与《刚体动力学算法》空间向量代数理论上的对应关系。

反对称阵

S ( p ‾ ) S(\underline{p}) S(p) 为斜对角阵, 对于任意的 3 维矢量 v ‾ \underline{v} v, 满 足 S ( p ‾ ) v ‾ = p ‾ × v ‾ S(\underline{p}) \underline{v}=\underline{p} \times \underline{v} S(p)v=p×v, 用公式表示为。(反对称阵,类似于前面讲述的 a × \boldsymbol{a} \times a×
S ( p ‾ ) = ( 0 − p z p y p z 0 − p x − p y p x 0 ) \boldsymbol{S}(\underline{\boldsymbol{p}})=\left(\begin{array}{ccc} 0 & -p_z & p_y \\ p_z & 0 & -p_x \\ -p_y & p_x & 0 \end{array}\right) S(p)= 0pzpypz0pxpypx0

变换矩阵求逆

(注:这里的 X 对应的是 《现代机器人学》里的伴随变换矩阵)

设构型 A A A 相对于构型 B B B 的位置和姿态通过一个 位置矢量 B p ‾ A { }^B \underline{p}_A BpA 和一个 4 × 4 4 \times 4 4×4 的旋转矩阵 B R A { }^B \boldsymbol{R}_A BRA (见 1.2 节) 来描述, 则 B X A { }^B \boldsymbol{X}_A BXA
B X A = ( 1 0 S ( B p A ) 1 ) ( B R A 0 0 B R A ) = ( B R A 0 S ( B p A ) B R A B R A ) \begin{aligned} { }^B \boldsymbol{X}_A & =\left(\begin{array}{cc} \mathbf{1} & \mathbf{0} \\ \boldsymbol{S}\left({ }^B \boldsymbol{p}_A\right) & \mathbf{1} \end{array}\right)\left(\begin{array}{cc} { }^B \boldsymbol{R}_A & \mathbf{0} \\ \mathbf{0} & { }^B \boldsymbol{R}_A \end{array}\right) \\ & =\left(\begin{array}{cc} { }^B \boldsymbol{R}_A & \mathbf{0} \\ \boldsymbol{S}\left({ }^B \boldsymbol{p}_A\right){ }^B \boldsymbol{R}_A & { }^B \boldsymbol{R}_A \end{array}\right) \end{aligned} BXA=(1S(BpA)01)(BRA00BRA)=(BRAS(BpA)BRA0BRA)
它的逆为
A X B = ( A R B 0 0 A R B ) ( 1 0 − S ( B p A ) 1 ) { }^A \boldsymbol{X}_B=\left(\begin{array}{cc} { }^A \boldsymbol{R}_B & \mathbf{0} \\ \mathbf{0} & { }^A \boldsymbol{R}_B \end{array}\right)\left(\begin{array}{cc} \mathbf{1} & \mathbf{0} \\ -\boldsymbol{S}\left({ }^B \boldsymbol{p}_A\right) & \mathbf{1} \end{array}\right) AXB=(ARB00ARB)(1S(BpA)01)
(内心os:它怎么也不化简一下。其实相乘一下,跟《现代机器人学》里的伴随变换矩阵的逆变换是一样的。)

直接引用结论:
 有效空间算术公式   表 达 式   计 算  X v ( R ω ; R ( v 0 − p × ω ) ) X F f ( R ( n o − p × f ) ; R f ) X − 1 ( R T ; − R p ) X − 1 v ( R T ω ; R T v O + p × R T ω ) ( X F ) − 1 f ( R T n o + p × R T f ; R T f ) X 1 X 2 ( R 1 R 2 ; p 2 + R 2 T p 1 ) I 1 + I 2 ( m 1 + m 2 ; h 1 + h 2 ; I ‾ 1 + I ‾ 2 ) I v ( I ‾ ω + h × v O ; m v O − h × ω ) ( m ; R T h + m p ; R T I ‾ R − X T I X S ( p ) S ( R T h ) − S ( R T h + m p ) S ( p ) )  注:  X T I X  的含义参见式 (2.32)。  \begin{aligned} &\begin{array}{c|c} \hline {\text { 有效空间算术公式 }} \\ \hline \text { 表 达 式 } & \text { 计 算 } \\ \hline X \mathbf{v} & \left(\boldsymbol{R} \boldsymbol{\omega} ; \boldsymbol{R}\left(\boldsymbol{v}_0-\boldsymbol{p} \times \boldsymbol{\omega}\right)\right) \\ \hline \boldsymbol{X}^F \mathbf{f} & \left(\boldsymbol{R}\left(\boldsymbol{n}_o-\boldsymbol{p} \times \boldsymbol{f}\right) ; \boldsymbol{R} \boldsymbol{f}\right) \\ \hline \boldsymbol{X}^{-1} & \left(\boldsymbol{R}^{\mathrm{T}} ;-\boldsymbol{R} p\right) \\ \hline \boldsymbol{X}^{-1} \mathbf{v} & \left(\boldsymbol{R}^{\mathrm{T}} \boldsymbol{\omega} ; \boldsymbol{R}^{\mathrm{T}} \boldsymbol{v}_O+\boldsymbol{p} \times \boldsymbol{R}^{\mathrm{T}} \boldsymbol{\omega}\right) \\ \hline\left(\boldsymbol{X}^F\right)^{-1} \mathbf{f} & \left(\boldsymbol{R}^{\mathrm{T}} \boldsymbol{n}_o+\boldsymbol{p} \times \boldsymbol{R}^{\mathrm{T}} \boldsymbol{f} ; \boldsymbol{R}^{\mathrm{T}} \boldsymbol{f}\right) \\ \hline \boldsymbol{X}_1 \boldsymbol{X}_2 & \left(\boldsymbol{R}_1 \boldsymbol{R}_2 ; \boldsymbol{p}_2+\boldsymbol{R}_2^{\mathrm{T}} \boldsymbol{p}_1\right) \\ \hline \boldsymbol{I}_1+\boldsymbol{I}_2 & \left(m_1+m_2 ; \boldsymbol{h}_1+\boldsymbol{h}_2 ; \overline{\boldsymbol{I}}_1+\overline{\boldsymbol{I}}_2\right) \\ \hline \boldsymbol{I} \mathbf{v} & \left(\overline{\boldsymbol{I}} \boldsymbol{\omega}+\boldsymbol{h} \times \boldsymbol{v}_O ; m \boldsymbol{v}_O-\boldsymbol{h} \times \boldsymbol{\omega}\right) \\ \hline & \left(m ; \boldsymbol{R}^{\mathrm{T}} \boldsymbol{h}+m \boldsymbol{p} ; \boldsymbol{R}^{\mathrm{T}} \overline{\boldsymbol{I}} \boldsymbol{R}-\right. \\ \boldsymbol{X}^{\mathrm{T}} \boldsymbol{I} \boldsymbol{X} & \left.\boldsymbol{S}(\boldsymbol{p}) \boldsymbol{S}\left(\boldsymbol{R}^{\mathrm{T}} \boldsymbol{h}\right)-\boldsymbol{S}\left(\boldsymbol{R}^{\mathrm{T}} \boldsymbol{h}+m \boldsymbol{p}\right) \boldsymbol{S}(\boldsymbol{p})\right) \\ \hline \end{array}\\ &\text { 注: } \boldsymbol{X}^{\mathrm{T}} \boldsymbol{I} \boldsymbol{X} \text { 的含义参见式 (2.32)。 } \end{aligned}  有效空间算术公式     XvXFfX1X1v(XF)1fX1X2I1+I2IvXTIX   (Rω;R(v0p×ω))(R(nop×f);Rf)(RT;Rp)(RTω;RTvO+p×RTω)(RTno+p×RTf;RTf)(R1R2;p2+R2Tp1)(m1+m2;h1+h2;I1+I2)(Iω+h×vO;mvOh×ω)(m;RTh+mp;RTIRS(p)S(RTh)S(RTh+mp)S(p)) XTIX 的含义参见式 (2.32) 


代码解释
成员变量
  • E :一个 3 × 3 3 \times 3 3×3 的旋转矩阵,对应《现代机器人学》和 《机器人手册》里理论公式的 R \boldsymbol{R} R ,对应《刚体动力学算法》里的 E \boldsymbol{E} E
  • r :三维向量,对应 《现代机器人学》和 《机器人手册》里理论公式的 $ p $ 。对应《刚体动力学算法》里的 r \boldsymbol{r} r
构造函数
  • 默认构造函数里,旋转是单位阵,平移是 0 矢量
  • 拷贝构造可以传入 E 和 r
函数 apply
  • 计算的表达式 是 $ X * v$ ,计算结果为 (E * w, - E * rxw + E * v)$

  • v_rxw 计算的是 v − r × ω \boldsymbol{v} - \boldsymbol{r} \times \boldsymbol{\omega} vr×ω 。(具体原因参考有效空间算术公式表,或者运动旋量与伴随变换的关系)

  • 旋转矩阵与六维向量相乘。

  • 输入是一个六维空间矢量,输出也是六维空间矢量

函数 applyTranspose
  • 输入是一个六维空间矢量,输出也是六维空间矢量
  • 计算的表达式为 X T ∗ f X^T * f XTf ,返回结果 $ (E^T * n + rx * E^T * f, E^T * f)$
函数 apply
  • X ∗ I X − 1 X^* I X^{-1} XIX1
函数 applyTranspose
  • X T I X X^T I X XTIX
函数 applyAdjoint

矩阵构造对应于力矢量的等价变换

给定空间向量
f s p = [ n f ] \boldsymbol{f}_{sp} = \left[\begin{array}{cc} \boldsymbol{n}\\ \boldsymbol{f} \end{array}\right] fsp=[nf]
该伴随运算的应用定义为
$$
\begin{aligned}
& Adjoint(\boldsymbol{X}) \boldsymbol{f}_{sp} =\left[\begin{array}{cc}
\boldsymbol{E} & -\boldsymbol{E} \boldsymbol{r} \times \
\mathbf{0}& \boldsymbol{E}
\end{array}\right]\left[\begin{array}{c}
\boldsymbol{n}\
\boldsymbol{f}
\end{array}\right]=\left[\begin{array}{c}
\boldsymbol{E}(\boldsymbol{n} - \boldsymbol{r} \times \boldsymbol{f} )\
\boldsymbol{E}\boldsymbol{f} \
\end{array}\right]

\
\end{aligned}
$$

函数 toMatrix

返回值为运动矢量的变换矩阵
[ E 0 − E r × E ] \left[\begin{array}{cc} \boldsymbol{E} & \mathbf{0} \\ -\boldsymbol{E} \boldsymbol{r} \times & \boldsymbol{E} \end{array}\right] [EEr×0E]

函数 toMatrixAdjoint

返回值为力矢量的等价变换
[ E − E r × 0 E ] \left[\begin{array}{cc} \boldsymbol{E} & -\boldsymbol{E} \boldsymbol{r} \times \\ \mathbf{0} & \boldsymbol{E} \end{array}\right] [E0Er×E]

函数toMatrixTranspose

返回值为
[ E T − ( E r × ) T 0 E T ] \left[\begin{array}{cc} \boldsymbol{E}^{T} & -(\boldsymbol{E} \boldsymbol{r} \times )^{T}\\ \mathbf{0} & \boldsymbol{E}^{T} \end{array}\right] [ET0(Er×)TET]

函数 inverse

返回值为 ( E 的逆, - E * r )

运算符重载 *

返回值

E X E X r + X E T r \boldsymbol{E} \boldsymbol{X}_{E} \\ \boldsymbol{X}_{r} + \boldsymbol{X}^{T}_{E} \boldsymbol{r} EXEXr+XETr
对应《现代机器人学》里的公式

Whether we pre-multiply or post-multiply T s b T_{s b} Tsb by T = ( R , p ) T=(R, p) T=(R,p) determines whether the ω ^ \hat{\omega} ω^-axis and p p p are interpreted as in the fixed frame { s } \{\mathrm{s}\} {s} or in the body frame { b } \{b\} {b} :
T s b ′ = T T s b = Trans ⁡ ( p ) Rot ⁡ ( ω ^ , θ ) T s b = [ R p 0 1 ] [ R s b p s b 0 1 ] = [ R R s b R p s b + p 0 1 ] T s b ′ ′ = T s b T = T s b Trans ⁡ ( p ) Rot ⁡ ( ω ^ , θ ) = [ R s b p s b 0 1 ] [ R p 0 1 ] = [ R s b R R s b p + p s b 0 1 ] . (3.66 & 3.67) \begin{aligned} T_{s b^{\prime}} & =T T_{s b}=\operatorname{Trans}(p) \operatorname{Rot}(\hat{\omega}, \theta) T_{s b} \\ & =\left[\begin{array}{cc} R & p \\ 0 & 1 \end{array}\right]\left[\begin{array}{cc} R_{s b} & p_{s b} \\ 0 & 1 \end{array}\right]=\left[\begin{array}{cc} R R_{s b} & R p_{s b}+p \\ 0 & 1 \end{array}\right] \\ T_{s b^{\prime \prime}} & =T_{s b} T=T_{s b} \operatorname{Trans}(p) \operatorname{Rot}(\hat{\omega}, \theta) \\ & =\left[\begin{array}{cc} R_{s b} & p_{s b} \\ 0 & 1 \end{array}\right]\left[\begin{array}{cc} R & p \\ 0 & 1 \end{array}\right]=\left[\begin{array}{cc} R_{s b} R & R_{s b} p+p_{s b} \\ 0 & 1 \end{array}\right] . \end{aligned} \tag{3.66 \& 3.67} TsbTsb′′=TTsb=Trans(p)Rot(ω^,θ)Tsb=[R0p1][Rsb0psb1]=[RRsb0Rpsb+p1]=TsbT=TsbTrans(p)Rot(ω^,θ)=[Rsb0psb1][R0p1]=[RsbR0Rsbp+psb1].(3.66 & 3.67)

运算符重载 * =

和上述乘号运算符重载基本一致

2.9 空间叉积(Spatial Cross Products)

r ∈ E 3 \boldsymbol{r} \in \mathrm{E}^{3} rE3 是一个欧几里得向量,它以角速度 ω \boldsymbol{\omega} ω 旋转,但没有其他变化。这个向量的导数由众所周知的公式 r ˙ = ω × r \dot{\boldsymbol{r}}=\boldsymbol{\omega} \times \boldsymbol{r} r˙=ω×r 给出。在这种情况下, ω × \boldsymbol{\omega} \times ω× 类似微分算子,将 r \boldsymbol{r} r 映射到 r ˙ \dot{\boldsymbol{r}} r˙

事实证明,这个想法可以扩展到空间向量,但我们需要有两个运算符:一个用于运动,一个用于力。因此,设 m ^ ∈ M 6 \hat{\boldsymbol{m}} \in \mathrm{\boldsymbol{M}}^{6} m^M6 f ^ ∈ F 6 \hat{\boldsymbol{f}} \in \mathrm{\boldsymbol{F}}^{6} f^F6 是两个以速度 v ^ ∈ M 6 \hat{\boldsymbol{v}} \in \mathrm{\boldsymbol{M}}^{6} v^M6 移动的空间向量(例如, because they are fixed in a rigid body having that velocity),但不会以其他方式改变。我们现在定义了两个新的运算符, × \times × x ∗ x^{*} x,它们是满足以下方程:
m ^ ˙ = v ^ × m ^ (2.29) \dot{\hat{\boldsymbol{m}}}=\hat{\boldsymbol{v}} \times \hat{\boldsymbol{m}} \tag{2.29} m^˙=v^×m^(2.29)

f ^ ˙ = v ^ × ∗ f ^ (2.30) \dot{\hat{\boldsymbol{f}}}=\hat{\boldsymbol{v}} \times{ }^{*} \hat{\boldsymbol{f}} \tag{2.30} f^˙=v^×f^(2.30)

运算符 x ∗ x^{*} x 可以看作是 × \times × 的对偶。这两个算子之间的关系类似于坐标变换矩阵 X \boldsymbol{X} X X ∗ \boldsymbol{X}^{*} X 之间的关系。

在这里插入图片描述

Figure 2.5: Spatial cross-product tables

这些算子可以通过图 2.5 所示的乘法表明确定义。这些表格中的每个 条目都是最上面一行所列基础矢量的时间导数,假定其速度等于左边一列所列基矢量的速度。例如,图 2.5(a) 所示坐标系的运动速度为 d O x \boldsymbol{d}_{O x} dOx ,即绕直线 O x O x Ox 以单位角速度旋转。在 δt 时间单位内,该运动对直线 O x O x Ox 没有影响,但却使 O y O y Oy y − z y-z yz 平面上旋转 δ t \delta t δt 弧度。因此,我们有 d O x ( t + δ t ) = d O x ( t ) \boldsymbol{d}_{O x}(t+\delta t)=\boldsymbol{d}_{O x}(t) dOx(t+δt)=dOx(t),但 d O y ( t + δ t ) = d O y ( t ) + δ t d O z \boldsymbol{d}_{O y}(t+\delta t)=\boldsymbol{d}_{O y}(t)+\delta t \boldsymbol{d}_{O z} dOy(t+δt)=dOy(t)+δtdOz 。因此,对时间导数为
d d t d O x = lim ⁡ δ t → 0 d O x ( t + δ t ) − d O x ( t ) δ t = lim ⁡ δ t → 0 d O x ( t ) − d O x ( t ) δ t = 0 \begin{aligned} \frac{\mathrm{d}}{\mathrm{d} t} \boldsymbol{d}_{O x} & =\lim _{\delta t \rightarrow 0} \frac{\boldsymbol{d}_{O x}(t+\delta t)-\boldsymbol{d}_{O x}(t)}{\delta t} \\ & =\lim _{\delta t \rightarrow 0} \frac{\boldsymbol{d}_{O x}(t)-\boldsymbol{d}_{O x}(t)}{\delta t}=\mathbf{0} \end{aligned} dtddOx=δt0limδtdOx(t+δt)dOx(t)=δt0limδtdOx(t)dOx(t)=0

d d t d O y = lim ⁡ δ t → 0 d O y ( t + δ t ) − d O y ( t ) δ t = lim ⁡ δ t → 0 d O y ( t ) + δ t d O z − d O y ( t ) δ t = d O z . \begin{aligned} \frac{\mathrm{d}}{\mathrm{d} t} \boldsymbol{d}_{O y} & =\lim _{\delta t \rightarrow 0} \frac{\boldsymbol{d}_{O y}(t+\delta t)-\boldsymbol{d}_{O y}(t)}{\delta t} \\ & =\lim _{\delta t \rightarrow 0} \frac{\boldsymbol{d}_{O y}(t)+\delta t \boldsymbol{d}_{O z}-\boldsymbol{d}_{O y}(t)}{\delta t}=\boldsymbol{d}_{O z} . \end{aligned} dtddOy=δt0limδtdOy(t+δt)dOy(t)=δt0limδtdOy(t)+δtdOzdOy(t)=dOz.

这就解释了第一张表格中第一行的前两个条目。同样,图 2.5(b) 展示了一个坐标系,它的运动速度等于 d x \boldsymbol{d}_{x} dx ,这意味着它在 x x x 方向上以单位线速度平移。在 δ t \delta t δt 个时间单位内,该运动对直线 O x Ox Ox 没有影响,但却使 O y Oy Oy x x x 方向上移动了 δ t \delta t δt 个长度单位。因此我们可以得 d O x ( t + δ t ) = d O x ( t ) \boldsymbol{d}_{O x}(t+\delta t)=\boldsymbol{d}_{O x}(t) dOx(t+δt)=dOx(t),可得 d ˙ O x = 0 \dot{\boldsymbol{d}}_{O x}=\mathbf{0} d˙Ox=0, 但 d O y ( t + δ t ) = d O y ( t ) + δ t d z \boldsymbol{d}_{O y}(t+\delta t)=\boldsymbol{d}_{O y}(t)+\delta t \boldsymbol{d}_{z} dOy(t+δt)=dOy(t)+δtdz, 可得 d ˙ O y = d z \dot{\boldsymbol{d}}_{O y}=\boldsymbol{d}_{z} d˙Oy=dz 。 这就解释了第一个表格中第四行的前两个条目。所有其他条目的计算方法与此类似。

使用图 2.5 中的表,我们可以推导出 Plücker 坐标系中表示运算符 v ^ × \hat{\boldsymbol{v}} \times v^× v ^ × ∗ \hat{\boldsymbol{v}} \times * v^× 6 × 6 6 \times 6 6×6 矩阵为
v ^ O × = [ ω v O ] × = [ ω × 0 v O × ω × ] (2.31) \hat{\boldsymbol{v}}_{O} \times=\left[\begin{array}{c} \boldsymbol{\omega} \\ \boldsymbol{v}_{O} \end{array}\right] \times=\left[\begin{array}{cc} \boldsymbol{\omega} \times & \mathbf{0} \\ \boldsymbol{v}_{O} \times & \boldsymbol{\omega} \times \end{array}\right] \tag{2.31} v^O×=[ωvO]×=[ω×vO×0ω×](2.31)

v ^ O × ∗ = [ ω v O ] × ∗ = [ ω × v O × 0 ω × ] = − ( v ^ O × ) T (2.32) \hat{\boldsymbol{v}}_{O} \times^{*}=\left[\begin{array}{c} \boldsymbol{\omega} \\ \boldsymbol{v}_{O} \end{array}\right] \times^{*}=\left[\begin{array}{cc} \boldsymbol{\omega} \times & \boldsymbol{v}_{O} \times \\ \mathbf{0} & \boldsymbol{\omega} \times \end{array}\right]=-\left(\hat{\boldsymbol{v}}_{O} \times\right)^{\mathrm{T}} \tag{2.32} v^O×=[ωvO]×=[ω×0vO×ω×]=(v^O×)T(2.32)

两个空间坐标矢量的叉积为

[ ω v O ] × [ m m O ] = [ ω × m ω × m O + v O × m ] (2.33) \left[\begin{array}{c} \boldsymbol{\omega} \\ \boldsymbol{v}_{O} \end{array}\right] \times\left[\begin{array}{c} \boldsymbol{m} \\ \boldsymbol{m}_{O} \end{array}\right]=\left[\begin{array}{c} \boldsymbol{\omega} \times \boldsymbol{m} \\ \boldsymbol{\omega} \times \boldsymbol{m}_{O}+\boldsymbol{v}_{O} \times \boldsymbol{m} \end{array}\right] \tag{2.33} [ωvO]×[mmO]=[ω×mω×mO+vO×m](2.33)

[ ω v O ] × ∗ [ f O f ] = [ ω × f O + v O × f ω × f ] (2.34) \left[\begin{array}{c} \boldsymbol{\omega} \\ \boldsymbol{v}_{O} \end{array}\right] \times^{*}\left[\begin{array}{c} \boldsymbol{f}_{O} \\ \boldsymbol{f} \end{array}\right]=\left[\begin{array}{c} \boldsymbol{\omega} \times \boldsymbol{f}_{O}+\boldsymbol{v}_{O} \times \boldsymbol{f} \\ \boldsymbol{\omega} \times \boldsymbol{f} \end{array}\right] \tag{2.34} [ωvO]×[fOf]=[ω×fO+vO×fω×f](2.34)

表 2.3 列出了这些算子的各种特性。

在这里插入图片描述

表 2.3: 空间叉积算子的特性

rbdl 代码

crossm 和 crossf 对应公式 2.31 - 2.34

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值