2. Spatial Vector Algebra
空间向量是一种为了研究刚体动力学而发明的、更高效和紧凑的数学表达“语言”。
它就像是用“成语”来代替“冗长的解释”,或者用“高级编程语言”来代替“繁琐的汇编指令”,目的是让表达、推导和计算都变得更简单。
- 什么是空间向量
“Spatial vectors are 6D vectors that combine the linear and angular aspects of rigid-body motions and forces.”
6 维向量 (6 D vectors):它不是我们熟悉的 3 D 空间中的向量,而是在一个抽象的 6 维空间中的向量。
结合线性和角量 (combine linear and angular):这是最关键的一点。一个空间向量同时包含了描述刚体运动或力所需的所有信息。
运动向量 = (线速度 v; 角速度 ω)
力向量 = (力 f; 力矩 τ)
目的:用于描述刚体的运动和作用力。
- 为什么使用空间向量
紧凑的符号系统, 简化的方程, 易于转化为代码。
- 本章内容:
从基本原理出发 (from first principles):不会直接扔给你结论,而是从基础概念一步步构建起整个空间向量代数体系。
直至单个刚体的运动方程 (up to the equation of motion):本章的目标是最终推导出单个刚体的空间运动方程。这是理解更复杂系统(如机器人手臂)的基础。
平面向量代数 (planar vector algebra):作为一个特例和简化,介绍如果刚体只在二维平面内运动(例如一个在桌面上移动的机器人),空间向量理论可以如何简化。这有助于理解和入门。
延伸阅读 (Appendix A & Chapter 3):
附录A:讲解如何在实际的计算机程序中实现空间向量的算术运算(即如何编写那个高效的“空间算术库”)。
第三章:本章只讲单个刚体,第三章将展示如何用空间向量这个强大的工具去分析一般的、复杂的刚体系统(如由多个连杆和关节构成的机器人)。
2.1 Mathematical Preliminaries
Vectors and Vector Spaces
“向量”不仅仅是我们高中认识的 (x, y, z) 坐标点。 在更高级的数学和物理中,向量被抽象为“向量空间”的元素。不同的向量空间有不同的规则和用途。本书主要使用四种空间,尤其是后两种为刚体动力学量身定做的空间。
| 向量空间 | 符号 | 中文名 | 本质与用途 | 关键特性 | 例子/类比 |
|---|---|---|---|---|---|
| 坐标向量空间 | $R^n$ | 坐标向量 | 纯数学的“数字列表”。它是其他所有抽象向量的一种数值表示方法。 | 是其他向量的“坐标”或“名字”。 |
[1.5, 2.0, 3.0]ᵀ可以表示一个力,也可以表示一个点。 |
| 欧几里得向量空间 | $E^n$ | 欧几里得向量 | 经典物理学中的向量。拥有长度和方向的概念。 | 定义了内积(点积),因此可以计算长度和夹角。 | 描述刚体运动的3D力、3D速度。 |
| 空间运动向量空间 | $M^6$ | 空间运动向量 | 描述刚体运动的6D向量。将线性和角运动合二为一。 | 非欧几里得(没有内积)。是本书为简化刚体动力学引入的核心工具之一。 | 空间速度 v^=(线速度,角速度) |
| 空间力向量空间 | $F^6$ | 空间力向量 | 描述刚体作用力的6D向量。将力和力矩合二为一。 | 非欧几里得。是本书为简化刚体动力学引入的另一个核心工具。 | 空间力 f^=(力,力矩) |
注意空间运动向量和空间力向量都是非欧几里得 (Not Euclidean) ,这是最需要理解的一点!在空间向量空间里,没有定义内积。
这意味着你不能直接计算一个空间向量的“长度”或两个空间向量之间的“夹角”。因为它的两个部分(线量和角量)物理量纲不同(例如,米/秒和弧度/秒),将它们强行相乘得到一个“长度”在物理上是没有意义的。
它们有自己的、更复杂的运算规则(如空间叉乘),这些规则完美地描述了刚体动力学。
Hats and Underlines
为了在特定情境下(尤其是本章引入新概念时)避免读者误解,作者引入了两个标记符号:帽子 (hats: ˆ ) 和 下划线 (underlines: _ )。
当空间向量(6D) 和传统的3D向量在同一个上下文中出现,并且可能使用相同的变量名时。给空间向量戴上帽子。
需要严格区分一个抽象的向量(一个物理概念)和它的坐标表示(一组数字)。给坐标向量加上下划线 _。
The Dual of a Vector Space
向量空间的“对偶性”(Duality) 对偶空间理论描述的就是两个向量空间之间存在着这样一种完美的“配对”关系,这种关系通过一种称为标量积(Scalar Product) 的运算来体现。
对偶空间的定义:有一个向量空间 V :比如我们熟悉的三维空间中的所有力向量组成的空间。存在它的对偶空间 V* , V* 也是一个向量空间,V* 的维度和 V 完全相同,在 V 和 V* 之间定义了一个标量积运算:从 V 中取一个向量 v,从 V* 中取一个向量 u,它们可以进行“乘积”运算,结果是一个数字(标量),记作 u · v 或 v · u。
对称性:对偶关系是相互的。如果 U = V*,那么反过来 V = U*。它们是彼此的对偶。
在刚体动力学中的具体应用:这个抽象的概念直接适用于空间向量代数:
- 空间运动向量空间
M^6:包含了所有描述刚体运动的6D向量(如空间速度v̂,包含线速度和角速度)。 - 空间力向量空间
F^6:包含了所有描述作用力的6D向量(如空间力f̂,包含力和力矩)。
它们互为对偶空间,即 $(M^6) = F^6$且 (F^6)* = M^6。*
它们之间的标量积具有明确的物理意义:功率(Power)。
如果 m ∈ M^6 是一个刚体的运动向量(速度),f ∈ F^6 是作用在该刚体上的力向量,那么它们的标量积 m · f 计算结果就是一个标量,这个标量的物理意义就是该力做功的功率。
这就为这对抽象的数学伙伴赋予了极其深刻的物理内涵。 功率是标量,正好符合标量积的输出结果。
非退化(Nondegenerate)要求,为了保证这对“伙伴”的关系是完美且有用的,它们的“配对”方式(标量积)必须满足一个关键性质:非退化。
定义:一个标量积是非退化的,当且仅当:对于 V 中的任何一个非零向量 v(v ≠ 0),在 V* 中至少存在一个向量 u,使得它们的标量积 v · u ≠ 0
为什么重要? 这个性质确保了两个空间中的向量都能被有效地区分开来。它避免了这样一种糟糕的情况:存在一个非零的 v,但它和 V* 中所有的 u 相乘结果都是0(就像一个无法被任何钥匙打开的锁,或者一个无法购买任何商品的货币)。
力 F在平动速度 v_lin上产生功率:P_trans = F · v_lin
力矩 τ在转动速度 ω上产生功率:P_rot = τ · ω
总功率就是这两部分之和:P_total = F · v_lin + τ · ω
Dual Base
对偶基:为了在一个对偶空间对 (U 和 V, 其中 U = V*) 中进行计算,我们需要为这两个空间各找一套基底(basis)。而“对偶基”指的就是这两套基底之间存在着一种完美的、一一对应的“互反”关系。
你可以想象成有两把相互匹配的标尺:一把用来测量 U 空间中的向量。另一把用来测量 V 空间中的向量。而“对偶”意味着这两把标尺的刻度是精心设计、相互契合的。
前提条件:两个对偶的空间,我们有两个向量空间 U 和 V,并且知道 U 是 V 的对偶空间,即 U = V*(这意味着 V 也是 U 的对偶空间 V = U*)。在我们的应用中,U 和 V 通常就是 F^6(空间力)和 M^6(空间运动)。
互反条件 (The Reciprocity Condition):这是理解对偶基的最关键一步。
我们在 U 空间中任意选取一套基底(basis),记为 $D={d_1,d_2,...,d_n}$ 。
我们在 V 空间中任意选取一套基底,记为 $E={e_1,e_2,...,e_n}$ 。
如果这两套基底满足以下条件:
$$ \boldsymbol{d}_i \cdot \boldsymbol{e}_j = \begin{cases} 1 & \text{if } i = j \\ 0 & \text{if } i \neq j \end{cases} $$
那么,我们就称基底 D和 E是对偶基。
唯一确定:如果其中一套基底(例如 E)已经固定,那么满足上述互反条件的另一套基底(D)是唯一确定的。也就是说,给你 V 空间的一套基,你只能找到唯一一套 U 空间的基与之构成对偶基。
记号:我们可以把由 E唯一确定的对偶基 D记为 E∗。同样,D确定的对偶基就是 D∗。
正交归一基:当 U和 V是同一个普通的欧几里得空间(U = V = E^n)时,情况变得特殊。- 什么样的基底自己和自己点乘满足 d_i · d_j = 1 (if i=j)且 d_i · d_j = 0 (if i≠j)呢?答案就是:正交归一基(Orthonormal Basis)!
结论:因此,正交归一基是对偶基的一个特例,它发生在“空间自对偶”(U = V)且“基相同”(D = E)的情况下。
Dual Coordinates
对偶坐标(特别是普吕克坐标 Plücker coordinates)是一种特殊的“编码规则”,它有两个巨大优势:
- 它让抽象的空间向量点积运算,变为了简单的矩阵乘法。
- 它让复杂的坐标变换规则,变得清晰且易于处理。
对偶坐标的黄金法则 (The Golden Rule)
$$ \boldsymbol{u} \cdot \boldsymbol{v} = \underline{\boldsymbol{u}}^{\mathrm{T}} \underline{\boldsymbol{v}} $$
左边 $\boldsymbol{u} \cdot \boldsymbol{v}$ :这是两个抽象的空间向量(例如,一个空间力 u 和一个空间运动 v)之间的标量积。它的物理意义是功率
右边 $\underline{\boldsymbol{u}}^{\mathrm{T}} \underline{\boldsymbol{v}}$ :其中 u 和 v 是坐标向量。它们是一组数字,分别代表抽象向量 u 和 v 在某个对偶坐标系下的值。uᵀ v 的操作就是标准的矩阵转置和乘法。对于一个列向量,uᵀ v 就是两个向量的点积。
这意味着,只要你选用了对偶坐标(比如Plücker坐标),计算两个空间向量的标量积(功率)就变得极其简单——你不需要知道它们具体的物理含义,只需要把代表它们的两个坐标数组拿来做一次矩阵乘法即可。这为编写高效的计算代码提供了极大的便利。
坐标分量:坐标分量就是将抽象物理向量在一组特定基底上进行投影测量后得到的数值结果。
关于坐标 $u_i$ 和 $v_i$ 定义的公式:
$$ u_{i} = \boldsymbol{e}_{i} \cdot \boldsymbol{u} \qquad \text{and} \qquad v_{i} = \boldsymbol{d}_{i} \cdot \boldsymbol{v} $$
• $u_i$ :是抽象向量 u 在 V 空间的基向量 e_i 上的“投影”(通过标量积测量)。
• $v_i$ :是抽象向量 v 在 U 空间的基向量 d_i 上的“投影”。
这为坐标向量中的每一个数字赋予了清晰的物理或几何意义。它告诉你,在选定了对偶基 D 和 E 之后,向量 u 的第 i 个坐标值,就等于 u 与 E 的第 i 个基向量 e_i 做点积的结果。
坐标变换的优美结论
当我们需要从一个坐标系变换到另一个坐标系时,对偶坐标展现了其另一个优美之处。
问题:如果我们想对坐标向量 $\underline{\boldsymbol{u}}$ 和 $\underline{\boldsymbol{v}}$ 进行坐标变换,我们需要两个变换矩阵:分别给 $\underline{\boldsymbol{u}}$ 和 $\underline{\boldsymbol{v}}$ 使用。
结论:如果 X 是作用于 u 的变换矩阵(即新坐标 u' = X * u),那么作用于 v 的变换矩阵 X* 不是任意的,它必须满足:
$$ X^* = X^{-T} $$
这里 $X^{-T}$ 是 $X$ 的逆矩阵的转置 $(X⁻¹)ᵀ$ 。
下面举例说明:
首先要清楚 $X$ 是什么,它是作用于空间向量的(如运动空间 M^6)的变换矩阵,那么作用于其对偶空间(如力空间 F^6)的变换矩阵就是 $X^* = X^{-T}$ ,这个规则保证了标量积(功率)在任何坐标系下计算结果都一致。
X 是一个 6x6 的矩阵,它定义了如何将一个运动向量(或力向量)从一个坐标系 {A} 的坐标表示,变换到另一个坐标系 {B} 的坐标表示。
它的本质是一个适用于力向量和运动向量的“坐标系转换器”。对比可以参考位姿的 4 x 4 变换矩阵.
变换矩阵 X 完全且唯一地由两个坐标系之间的相对位置和相对姿态(合称为“位姿”) 决定。 它封装了两个坐标系之间的所有几何关系,不依赖于任何特定的力或运动。
运动向量变换矩阵 X 的通用形式:
$$ ^A\mathbf{X}_B = \begin{bmatrix} ^A\mathbf{R}_B & \mathbf{0}_{3 \times 3} \\ ^A\mathbf{o}_B \times {}^A\mathbf{R}_B & ^A\mathbf{R}_B \end{bmatrix} $$
$^A\mathbf{X}_B$ : 表示坐标系 {B}到 {A}的运动向量变换矩阵。
$^A\mathbf{R}_B$ : 表示坐标系 {B}相对于 {A}的 3x3 旋转矩阵。这描述了二者的相对姿态(旋转关系)。
$^A\mathbf{o}_B$ : 表示坐标系 {B}的原点在 {A}系中的坐标位置(一个 3x1 向量)。这描述了二者的相对位置(平移关系)。
$\times$ 在这里表示叉乘运算符。 ${^A\mathbf{o}_B \times}$ 意味着由向量 ${^A\mathbf{o}B}$ 构成的叉乘矩阵。
$\mathbf{0}{3 \times 3}$ : 表示一个 3x3 的零矩阵。
例如我们有一个场景:
运动向量: 一个机器人的末端执行器有一个空间速度 v̂(包含线速度和角速度)。
力向量: 在末端执行器上作用有一个空间力 f̂(包含力和力矩)。
它们在两个坐标系下的关系为:
$v_a = X * v_b$ 运动向量从 {B} 系变换到 {A} 系
$f_a = X^* * f_b$ 力向量从 {B} 系变换到 {A} 系。我们现在不知道 X* 应该是什么
黄金法则:功率必须守恒
功率是一个物理标量,不应该随着我们描述它的坐标系改变而改变。因此,无论在哪个坐标系下计算,功率必须相等:
$$f_a \cdot v_a = f_b \cdot v_b$$
写成矢量形式:
$$ f_a^T v_a = f_b^T v_b $$
代入变换矩阵:
$$ (X^* f_b)^T (X v_b) = f_b^T v_b $$
根据矩阵转置法则:
$$ f_b^T (X^*)^T X v_b = f_b^T v_b $$
要使这个等式对所有的 $f_b$ 和 $v_b$ 都成立,必须满足:
$$ (X^*)^T X = I $$
这里 I 是单位矩阵。这意味着 (X*)ᵀ 必须是 X 的逆矩阵:
$$ (X^*)^T = X^{-1} $$
两边同时取转置,就得到了那个优美的结论:
$$ X^* = (X^{-1})^T = X^{-T} $$
Operators a· and a×:
通常,我们把 a · b 和 a × b 看作是两个向量之间的运算,其结果是另一个标量或向量。换一个角度,将 a · 和 a × 本身视为独立的数学对象——运算符(Operator)。
- 运算符:是一种函数或映射。它接受一个输入(称为操作数 Operand),然后产生一个输出。
- 操作数:就是被运算符作用的那个对象。
当 a 是一个坐标向量时(即一组数字,而不是一个抽象的物理向量),点乘运算符 a ·在矩阵运算下的表现形式就是 a 的转置 aᵀ。
叉乘运算符 a × 可以表示成一个方阵(通常是 3x3 或 6x6)。
$$ a \times b = [a \times] b = \begin{bmatrix} 0 & -a_z & a_y \\ a_z & 0 & -a_x \\ -a_y & a_x & 0 \end{bmatrix} \begin{bmatrix} b_x \\ b_y \\ b_z \end{bmatrix} $$
文中还提到了 a ×*,它是 a × 的对偶算子(Dual Operator)。这涉及到对偶空间的概念。简单来说,如果 a × 作用于运动空间(如速度),那么它的对偶算子 a ×* 就作用于力空间。
Dyads and Dyadics
并矢(Dyads)和并矢张量(Dyadics) 的概念
并矢和并矢张量是构建线性算子(一种输入是向量,输出也是向量的函数)的“积木”或基本单元。它们提供了一种非常直观的方式来理解和构造复杂的线性映射。
