刚体动力学算法 Chapter 3 刚体系统动力学(1)

Chapter 3 刚体系统动力学

动力学算法的目的是对运动方程进行数值求解,但在我们能够进行求解之前,我们首先需要知道这个方程是什么。本章介绍了一个一般刚体系统的运动方程,并提供了多种从简单方程构建这些方程的方法。这些方法构成了后续章节中出现的各种算法的基础。然而,本章的重点主要是刚体动力学的数学,而不是特定的算法。

刚体系统是由刚体组成的集合,这些刚体可以通过关节连接在一起,并且可能受到各种力的作用。关节的效果是对所连接的两个刚体施加运动约束:在某些方向上允许相对运动,而在其他方向上不允许。更准确地说,关节的效果是将一个约束力引入系统中。这个力具有特殊的性质,我们并不知道它的具体值,但我们知道它对系统产生的效果-它取决于它需要多大的值,以使得结果运动符合运动约束。本章的很大一部分涉及描述运动约束的方法,并将其应用于刚体运动方程。

第3.1节和第3.2节提供了对该主题的高层次介绍:

  • 第3.1节以各种标准形式呈现了运动方程;
  • 第3.2节解释了如何从描述子系统、单个刚体和运动约束的方程构建这些方程。

接下来的三节更详细地讨论了运动约束的话题:

  • 第3.3节展示了如何将其表示为向量子空间;
  • 第3.4节介绍了刚体系统中可能出现的约束类型的标准分类;
  • 第3.5节提供了关节约束的详细模型。(我们将关节定义为对两个刚体的相对运动施加任何运动约束。)

最后,第3.6节和第3.7节展示了如何获得连接在一起的单个刚体和刚体集合的显式运动方程。这两节讲述了在制定运动方程时使用空间向量的方法。

3.1 运动方程

对于一般刚体系统的运动方程,通常可以写成以下的规范形式:

H(q)q¨+C(q,q˙)=τ(3.1) \boldsymbol{H}(\boldsymbol{q}) \ddot{\boldsymbol{q}}+\boldsymbol{C}(\boldsymbol{q}, \dot{\boldsymbol{q}})=\boldsymbol{\tau} \tag{3.1} H(q)q¨+C(q,q˙)=τ(3.1)

在这个方程中,q,q˙\boldsymbol{q}, \dot{\boldsymbol{q}}q,q˙q¨\ddot{\boldsymbol{q}}q¨ 分别是广义坐标、速度和加速度的向量,τ\boldsymbol{\tau}τ 是广义力的向量。H\boldsymbol{H}H 是广义惯性矩阵,用 H(q)\boldsymbol{H}(\boldsymbol{q})H(q) 表示它依赖于 q\boldsymbol{q}q。类似地,C\boldsymbol{C}C 是广义偏置力,用 C(q,q˙)\boldsymbol{C}(\boldsymbol{q}, \dot{\boldsymbol{q}})C(q,q˙) 表示它同时依赖于 q\boldsymbol{q}qq˙\dot{\boldsymbol{q}}q˙。一旦理解了这些依赖关系,可以使用较短的符号 H\boldsymbol{H}HC\boldsymbol{C}C 来表示。偏置力是能产生零加速度的 τ\boldsymbol{\tau}τ 值。它包括考虑到的科里奥利力、离心力、重力以及作用在系统上除 τ\boldsymbol{\tau}τ 之外的任何其他力。H\boldsymbol{H}HC\boldsymbol{C}C 共同构成了运动方程的系数,τ\boldsymbol{\tau}τq¨\ddot{\boldsymbol{q}}q¨ 是变量。除了在运动方程中的角色之外,H\boldsymbol{H}H 还有一个重要的性质:系统的动能可以表示为

T=12q˙THq˙(3.2) T=\frac{1}{2} \dot{\boldsymbol{q}}^{\mathrm{T}} \boldsymbol{H} \dot{\boldsymbol{q}} \tag{3.2} T=21q˙THq˙(3.2)

方程3.1 中的每个量都是坐标向量或矩阵。考虑到,至少简要地考虑一下,这些量代表的对象类型。为此,我们用符号 Mn\mathrm{\boldsymbol{M}}^{n}MnFn\mathrm{\boldsymbol{F}}^{n}Fn 表示 nnn 维运动矢量和力矢量空间,其中 nnn 是由 方程3.1 描述的系统的自由度。现在我们可以说 q˙\dot{\boldsymbol{q}}q˙q¨\ddot{\boldsymbol{q}}q¨ 表示 Mn\mathrm{\boldsymbol{M}}^{n}Mn 的元素,而 τ\boldsymbol{\tau}τC\boldsymbol{C}C 表示 Fn\mathrm{\boldsymbol{F}}^{n}Fn 的元素,而 H\boldsymbol{H}H 是从 Mn\mathrm{\boldsymbol{M}}^{n}MnFn\mathrm{\boldsymbol{F}}^{n}Fn 的映射。然而,q\boldsymbol{q}q 并不表示一个向量,而是表示系统配置空间中的一个点,该空间是一个 nnn 维流形。

根据定义,要满足使得 τTq˙\boldsymbol{\tau}^{\mathrm{T}} \dot{\boldsymbol{q}}τTq˙ 是由 τ\boldsymbol{\tau}τ 传递给系统的功率,因此,不能随机选择一组广义力变量。这意味着广义坐标系在 Mn\mathrm{\boldsymbol{M}}^{n}MnFn\mathrm{\boldsymbol{F}}^{n}Fn 上实际上是对偶坐标系。这又意味着广义运动和力向量与空间向量具有许多代数性质相似,如第2章中所述。唯一的例外是在广义运动和广义力上没有定义叉积运算符。

严格来说,H\boldsymbol{H}HC\boldsymbol{C}C 不仅依赖于 q\boldsymbol{q}qq˙\dot{\boldsymbol{q}}q˙,还取决于刚体系统本身。因此,更准确的写法应该是 H(模型,q)\boldsymbol{H}(\text{模型}, \boldsymbol{q})H(模型,q)C(模型,q,q˙)\boldsymbol{C}(\text{模型}, \boldsymbol{q}, \dot{\boldsymbol{q}})C(模型,q,q˙),其中符号“模型”指的是描述特定刚体系统的数据集,包括组成部分:刚体和关节的数量、它们的连接方式、刚体的惯性参数等。我们称这种描述为系统模型,它是第4章的主题。现在,只需要知道这样一个模型存在,并且诸如 H\boldsymbol{H}HC\boldsymbol{C}C 这样的量依赖于它。

我们最终的目标是能够计算出方程3.1中出现的一个或多个量的数值。特别是,我们对以下两个计算感兴趣:正向动力学,即给定 τ\boldsymbol{\tau}τ 计算 q¨\ddot{\boldsymbol{q}}q¨,以及逆向动力学,即给定 q¨\ddot{\boldsymbol{q}}q¨ 计算 τ\boldsymbol{\tau}τ。我们可以简洁地表示这些计算如下:
q¨=FD( model ,q,q˙,τ)(3.3) \ddot{\boldsymbol{q}}=\mathrm{FD}(\text { model }, \boldsymbol{q}, \dot{\boldsymbol{q}}, \boldsymbol{\tau}) \tag{3.3} q¨=FD( model ,q,q˙,τ)(3.3)

τ=ID(model⁡,q,q˙,q¨),(3.4) \boldsymbol{\tau}=\mathrm{ID}(\operatorname{model}, \boldsymbol{q}, \dot{\boldsymbol{q}}, \ddot{\boldsymbol{q}}), \tag{3.4} τ=ID(model,q,q˙,q¨),(3.4)

其中,$\mathrm{FD} $ 和 $\mathrm{ID} $ 是分别表示正向动力学计算和逆向动力学计算的函数。通过将这些方程与 公式3.1 进行比较,可以清楚地看出,$\mathrm{FD} $ 和 $\mathrm{ID} $ 必须分别计算为 H−1(τ−C)\boldsymbol{H}^{-1}(\boldsymbol{\tau}-\boldsymbol{C})H1(τC)Hq¨+C\boldsymbol{H} \ddot{\boldsymbol{q}}+\boldsymbol{C}Hq¨+C。然而,实现它们的算法不一定需要计算 C\boldsymbol{C}CH\boldsymbol{H}HH−1\boldsymbol{H}^{-1}H1 。因此,公式3.3 和 3.4 的有用属性在于它们清楚地显示了每个计算的输入和输出,但并不暗示任何特定的计算方法。

公式3.1 假设位置变量是速度变量的积分。这并不总是成立的。例如,如果系统包含非完整约束(见第3.4节),那么位置变量将比速度变量多。或者,某些类型的运动更适合由冗余的位置变量集来描述,这再次导致位置变量比速度变量多。即使位置和速度变量的数量相同,后者可能偶尔也可能是前者的导数以外的其他值。无论原因如何,我们可以通过用替代的速度变量向量 α\boldsymbol{\alpha}α 替换 q˙\dot{\boldsymbol{q}}q˙ 来简单地改写 公式3.1,得到

H(q)α˙+C(q,α)=τ(3.5) \boldsymbol{H}(\boldsymbol{q}) \dot{\boldsymbol{\alpha}}+\boldsymbol{C}(\boldsymbol{q}, \boldsymbol{\alpha})=\boldsymbol{\tau} \tag{3.5} H(q)α˙+C(q,α)=τ(3.5)

然后对 公式3.3 和 3.4 进行相应修改。为了仿真,我们仍然需要知道 q˙\dot{\boldsymbol{q}}q˙ 的值,以便可以将其积分得到 q\boldsymbol{q}q 。因此, 公式3.5 必须补充一个方程,从 q\boldsymbol{q}qα\boldsymbol{\alpha}α 计算 q˙\dot{\boldsymbol{q}}q˙ 。这个方程可以写成

q˙=Q(q)α(3.6) \dot{\boldsymbol{q}}=\boldsymbol{Q}(\boldsymbol{q}) \boldsymbol{\alpha} \tag{3.6} q˙=Q(q)α(3.6)

其中 Q\boldsymbol{Q}Q 是一个依赖于 q\boldsymbol{q}q 和系统模型的矩阵。或者,它可以写成

q˙=qdfn⁡(model⁡,q,α)(3.7) \dot{\boldsymbol{q}}=\operatorname{qdfn}(\operatorname{model}, \boldsymbol{q}, \boldsymbol{\alpha}) \tag{3.7} q˙=qdfn(model,q,α)(3.7)

其中qdfn表示从 q\boldsymbol{q}qα\boldsymbol{\alpha}α 计算 q˙\dot{\boldsymbol{q}}q˙。公式3.6显示了 q˙\dot{\boldsymbol{q}}q˙q\boldsymbol{q}qq˙\dot{\boldsymbol{q}}q˙α\boldsymbol{\alpha}α 之间的数学关系的数学结构,它表明 q˙\dot{\boldsymbol{q}}q˙ 线性地依赖于 α\boldsymbol{\alpha}α 。而公式3.7则显示了计算的输入和输出,而不暗示任何特定的计算方法。

仍然谈到仿真问题,大多数仿真器都期望给出一组一阶微分方程。我们可以通过定义一个状态变量 x=[qTαT]T\boldsymbol{x}=\left[\boldsymbol{q}^{\mathrm{T}} \boldsymbol{\alpha}^{\mathrm{T}}\right]^{\mathrm{T}}x=[qTαT]T 来满足这个要求,并以状态空间形式表示正向动力学:

x˙=[q˙α˙]=[QαH−1(τ−C)](3.8) \dot{\boldsymbol{x}}=\left[\begin{array}{c} \dot{\boldsymbol{q}} \\ \dot{\boldsymbol{\alpha}} \end{array}\right]=\left[\begin{array}{c} \boldsymbol{Q} \boldsymbol{\alpha} \\ \boldsymbol{H}^{-1}(\boldsymbol{\tau}-C) \end{array}\right] \tag{3.8} x˙=[q˙α˙]=[QαH1(τC)](3.8)

如果 FDx\mathrm{FD}_{x}FDx表示状态空间正向动力学计算函数,则

x˙=FDx(model⁡,x,τ)=[qdfn(model⁡,q,α)FD(model⁡,q,α,τ)](3.9) \dot{\boldsymbol{x}}=\mathrm{FD}_{x}(\operatorname{model}, \boldsymbol{x}, \boldsymbol{\tau})=\left[\begin{array}{c} \mathrm{qdfn}(\operatorname{model}, \boldsymbol{q}, \boldsymbol{\alpha}) \\ \mathrm{FD}(\operatorname{model}, \boldsymbol{q}, \boldsymbol{\alpha}, \boldsymbol{\tau}) \end{array}\right] \tag{3.9} x˙=FDx(model,x,τ)=[qdfn(model,q,α)FD(model,q,α,τ)](3.9)

在接下来的章节中,我们将主要研究可以通过公式3.1描述的系统,而不是通过 公式3.5 描述的更一般的系统。这是因为我们将获得的大部分结果可以直接适应更一般类型的系统。大多数动力学算法对于公式3.1和3.5之间的区别是无关紧要的,除非涉及到编程细节的层面。

最后还有一个需要提及的可能性。有时识别和使用一个明确的独立速度变量集是不切实际或不可取的。在这种情况下,仍然使用公式3.1 或 公式3.5 作为运动方程;但现在 q˙\dot{\boldsymbol{q}}q˙q¨\ddot{\boldsymbol{q}}q¨ (或 α\boldsymbol{\alpha}αα˙\dot{\boldsymbol{\alpha}}α˙ )受到一组运动约束的限制,所以运动方程必须补充一个第二个方程来描述这些约束。这个主题将在下一节中详细介绍。

3.2 构建运动方程

构建刚体系统的运动方程是一系列数学运算的结果。起点是单个刚体 和/或 子系统的运动方程集合,我们对它们执行的两个主要操作是:

  • 整合多个方程形成更大子系统的方程
  • 应用额外的运动约束

通过按特定顺序执行这些操作,我们定义了获取所需运动方程的特定过程,由此也定义了计算该方程数值的特定算法(或算法类)。以下是一些常见的过程:

  1. 整合所有刚体的方程(将它们的方程合并为一个方程),然后施加所有约束。
  2. 获取生成树(spanning tree)的运动方程,然后施加所有剩余的约束。
  3. 从单一刚体/子系统开始,添加更多的刚体/子系统,并添加相关约束,重复这个过程。
  4. 将子系统配对,施加配对子系统的约束,重复这个过程。

方法1 是许多简单动力学算法的典型方法。它很容易理解,但会产生稀疏矩阵。采用这种方法的算法必须使用稀疏矩阵技术,否则与其他算法相比速度会太慢。方法1的示例可见第3.7节。

方法2适用于闭环系统,并在第8章中详细介绍。闭环系统的生成树在第4章中被定义为一个动力学树,它考虑了原始系统中的所有刚体,但只考虑部分运动约束。方法2的关键是可以使用非常高效的算法来计算生成树的动力学。

方法3大致上是关节-刚体算法的工作原理,不过它使用的是关节-刚体方程而不是完整的运动方程。该算法在第7章中进行了描述。

方法4由分治算法(divide-and-conquer algorithms,Featherstone, 1999a,b)使用。采用这种方法的算法适用于并行计算机上的实现。

聚合运动方程

假设我们有一组 NNN 个刚体子系统,其中第 iii 个子系统的运动方程为 Hiq¨i+Ci=τi\boldsymbol{H}_{i} \ddot{\boldsymbol{q}}_{i}+\boldsymbol{C}_{i}=\boldsymbol{\tau}_{i}Hiq¨i+Ci=τi。如果我们希望将它们视为单个系统,则该系统的运动方程为
[H10⋯00H2⋯0⋮⋮⋱⋮00⋯HN][q¨1q¨2⋮q¨N]+[C1C2⋮CN]=[τ1τ2⋮τN](3.10) \left[\begin{array}{cccc} \boldsymbol{H}_{1} & \mathbf{0} & \cdots & \mathbf{0} \\ \mathbf{0} & \boldsymbol{H}_{2} & \cdots & \mathbf{0} \\ \vdots & \vdots & \ddots & \vdots \\ \mathbf{0} & \mathbf{0} & \cdots & \boldsymbol{H}_{N} \end{array}\right]\left[\begin{array}{c} \ddot{\boldsymbol{q}}_{1} \\ \ddot{\boldsymbol{q}}_{2} \\ \vdots \\ \ddot{\boldsymbol{q}}_{N} \end{array}\right]+\left[\begin{array}{c} \boldsymbol{C}_{1} \\ \boldsymbol{C}_{2} \\ \vdots \\ \boldsymbol{C}_{N} \end{array}\right]=\left[\begin{array}{c} \boldsymbol{\tau}_{1} \\ \boldsymbol{\tau}_{2} \\ \vdots \\ \boldsymbol{\tau}_{N} \end{array}\right] \tag{3.10} H1000H2000HNq¨1q¨2q¨N+C1C2CN=τ1τ2τN(3.10)

请注意,单个刚体也是一个刚体子系统。因此,我们可以从一组 NNN 个刚体开始,或者甚至是由单个刚体和其他系统任意混合而成的系统。如果子系统 iii 恰好是单个刚体,则我们可以使用其空间运动方程 Iiai+pi=fi\boldsymbol{I}_{i} \boldsymbol{a}_{i}+\boldsymbol{p}_{i}=\boldsymbol{f}_{i}Iiai+pi=fi 代替广义坐标方程(即,我们使用 Ii\boldsymbol{I}_{i}Ii 代替 Hi\boldsymbol{H}_{i}Hi 等)。这样做的原因是因为空间运动矢量和空间力矢量是广义运动矢量和力矢量的特例;也就是说,M6\mathrm{M}^{6}M6F6\mathrm{F}^{6}F6Mn\mathrm{\boldsymbol{M}}^{n}MnFn\mathrm{\boldsymbol{F}}^{n}Fn的特例,M6\mathrm{M}^{6}M6F6\mathrm{F}^{6}F6 上的普吕克坐标是 Mn\mathrm{\boldsymbol{M}}^{n}MnFn\mathrm{\boldsymbol{F}}^{n}Fn 上的广义坐标的特例。因此,我们可以自由地将空间速度与广义速度混合使用,对于加速度和力也是如此。

运动约束

运动约束是对系统的运动变量施加的代数约束。它们可以用两种不同的方式表达,如下所示:
 position  velocity  acceleration  implicit: ϕ(q)=0Kq˙=0Kq¨=k explicit: q=γ(y)q˙=Gy˙q¨=Gy¨+g(3.11) \begin{array}{lccc} & \text { position } & \text { velocity } & \text { acceleration } \\ \text { implicit: } & \boldsymbol{\phi}(\boldsymbol{q})=\mathbf{0} & \boldsymbol{K} \dot{\boldsymbol{q}}=\mathbf{0} & \boldsymbol{K} \ddot{\boldsymbol{q}}=\boldsymbol{k} \\ \text { explicit: } & \boldsymbol{q}=\boldsymbol{\gamma}(\boldsymbol{y}) & \dot{\boldsymbol{q}}=\boldsymbol{G} \dot{\boldsymbol{y}} & \ddot{\boldsymbol{q}}=\boldsymbol{G} \ddot{\boldsymbol{y}}+\boldsymbol{g} \end{array} \tag{3.11}  implicit:  explicit:  position ϕ(q)=0q=γ(y) velocity Kq˙=0q˙=Gy˙ acceleration Kq¨=kq¨=Gy¨+g(3.11)

其中

K=∂ϕ∂q,k=−K˙q˙,G=∂γ∂y and g=G˙y˙. \boldsymbol{K}=\frac{\partial \boldsymbol{\phi}}{\partial \boldsymbol{q}}, \quad \boldsymbol{k}=-\dot{\boldsymbol{K}} \dot{\boldsymbol{q}}, \quad \boldsymbol{G}=\frac{\partial \boldsymbol{\gamma}}{\partial \boldsymbol{y}} \quad \text { and } \quad \boldsymbol{g}=\dot{\boldsymbol{G}} \dot{\boldsymbol{y}} . K=qϕ,k=K˙q˙,G=yγ and g=G˙y˙.

隐式运动约束是指通过方程或等式隐含地定义的约束。这些约束可能涉及到机器人的几何形状、运动范围或物理限制等。通常,隐式运动约束以一种不直接明确给出的方式存在。例如,一个简单的约束可以是机器人的末端执行器必须保持在某个平面上。这个约束可以通过将末端执行器的位置矢量与该平面的法向量做点积,等于零来隐含地表示。

相比之下,显示运动约束是直接以等式或不等式的形式给出的约束条件。这些约束通常以数学表达式的形式描述,明确地规定了机器人的运动限制。例如,显示运动约束可以是机器人关节的角度不能超过特定的范围,或者末端执行器必须保持在一个特定的空间区域内。

这些不是最一般的方程。最一般的情况在 第3.4节 中讨论。如果 ϕ\boldsymbol{\phi}ϕγ\boldsymbol{\gamma}γ 都描述相同的约束,则有:
ϕ∘γ=0,KG=0 and Kg=k.(3.12) \boldsymbol{\phi} \circ \boldsymbol{\gamma} = \mathbf{0}, \quad \boldsymbol{K G}=\mathbf{0} \quad \text { and } \quad \boldsymbol{K g}=\boldsymbol{k} . \tag{3.12} ϕγ=0,KG=0 and Kg=k.(3.12)

运动约束是由约束力引起的。一个无约束(或较少受约束)的刚体系统具有运动方程

Hq¨+C=τ,(3.13) \boldsymbol{H} \ddot{\boldsymbol{q}}+\boldsymbol{C}=\boldsymbol{\tau}, \tag{3.13} Hq¨+C=τ,(3.13)

并且该系统要受到运动约束的影响,则受约束系统的运动方程是

Hq¨+C=τ+τc,(3.14) \boldsymbol{H} \ddot{\boldsymbol{q}}+\boldsymbol{C}=\boldsymbol{\tau}+\boldsymbol{\tau}_{c}, \tag{3.14} Hq¨+C=τ+τc,(3.14)

其中 τc\boldsymbol{\tau}_{c}τc 是约束力。这个力是未知的,但它具有一个重要的特性,允许我们计算它的值,或者根据需要从方程中消去它:

约束力对与运动约束兼容的每个速度自由度的每个方向都不产生功(Jourdain原理的虚功原理)。(The constraint force delivers zero power along every direction of velocity freedom that is compatible with the motion constraints. (Jourdain’s principle of virtual power.))

虚功原理

如果一个刚体或系统处于平衡状态,那么它所受到的外力对其所做的虚功(做功的力沿着实际运动方向)必须为零。也就是说,在平衡状态下,刚体或系统所受到的力对其所做的实际功等于零。

在机器人运动学中,我们可以应用虚功原理来分析机器人的约束和主动力。以下是虚功原理的一般表达形式:

δW=0\delta W = 0δW=0

其中,δW\delta WδW表示外力对刚体或系统所做的虚功,也称为虚位移功。它是各个力在相应的虚位移上的投影之和。

对于机器人而言,可以将虚功原理应用于分析机器人关节的平衡和约束条件。假设机器人具有 nnn 个关节,则可以对每个关节 jjj 应用虚功原理,得到虚功原理的方程形式:

δWj=Fj⋅δqj=0\delta W_j = \boldsymbol{F}_j \cdot \delta\boldsymbol{q}_j = 0δWj=Fjδqj=0

其中,Fj\boldsymbol{F}_jFj 表示作用在关节 jjj 上的合力,δqj\delta\boldsymbol{q}_jδqj 表示关节 jjj 的虚位移。这个方程表明,合力对关节虚位移的投影为零。

应用虚功原理可以得到机器人关节的运动学方程和约束条件。通过对所有关节的虚功原理进行组合,可以获得机器人的整体运动方程,并用于控制和规划机器人的运动。

需要注意的是,虚功原理只能用于分析静力平衡或准静态条件下的运动,即假设刚体或系统的运动速度非常小。

实际上,这个说法意味着 τc\boldsymbol{\tau}_{c}τc 必须满足 τc⋅q˙=0\boldsymbol{\tau}_{c} \cdot \dot{\boldsymbol{q}}=0τcq˙=0,不仅对于 q˙\dot{\boldsymbol{q}}q˙ 的一个值,而是对于约束所允许的每个值都成立。如果系统受到隐式运动约束的影响,那么可以证明 τc\boldsymbol{\tau}_{c}τc 的形式为

τc=KTλ(3.15) \boldsymbol{\tau}_{c}=\boldsymbol{K}^{\mathrm{T}} \boldsymbol{\lambda} \tag{3.15} τc=KTλ(3.15)

其中 λ\boldsymbol{\lambda}λ 是一组未知的力变量;如果系统受到显式运动约束的影响,那么 τc\boldsymbol{\tau}_{c}τc 具有以下性质

GTτc=0.(3.16) \boldsymbol{G}^{\mathrm{T}} \boldsymbol{\tau}_{c}=\mathbf{0} . \tag{3.16} GTτc=0.(3.16)

这些方程很容易验证。如果 τc=KTλ\boldsymbol{\tau}_{c}=\boldsymbol{K}^{\mathrm{T}} \boldsymbol{\lambda}τc=KTλ,则 τc⋅q˙=λTKq˙\boldsymbol{\tau}_{c} \cdot \dot{\boldsymbol{q}}=\boldsymbol{\lambda}^{\mathrm{T}} \boldsymbol{K} \dot{\boldsymbol{q}}τcq˙=λTKq˙,并且只要 Kq˙=0\boldsymbol{K} \dot{\boldsymbol{q}}=\mathbf{0}Kq˙=0,这个表达式就为零。同样,如果 q˙=Gy˙\dot{\boldsymbol{q}}=\boldsymbol{G} \dot{\boldsymbol{y}}q˙=Gy˙,则 q˙⋅τc=y˙TGTτc\dot{\boldsymbol{q}} \cdot \boldsymbol{\tau}_{c}=\dot{\boldsymbol{y}}^{\mathrm{T}} \boldsymbol{G}^{\mathrm{T}} \boldsymbol{\tau}_{c}q˙τc=y˙TGTτc,只要 GTτc=0\boldsymbol{G}^{\mathrm{T}} \boldsymbol{\tau}_{c}=\mathbf{0}GTτc=0,这个表达式就为零。λ\boldsymbol{\lambda}λ 的元素可以视为一组Lagrange乘子。

施加隐式运动约束

要将隐性运动约束施加于刚体系统,我们只需将方程3.15代入方程3.14,并将结果与方程3.11中的隐性加速度约束方程组合即可。结果是
[HKTK0][q¨−λ]=[τ−Ck](3.17) \left[\begin{array}{cc} \boldsymbol{H} & \boldsymbol{K}^{\mathrm{T}} \\ \boldsymbol{K} & \mathbf{0} \end{array}\right]\left[\begin{array}{c} \ddot{\boldsymbol{q}} \\ -\boldsymbol{\lambda} \end{array}\right]=\left[\begin{array}{c} \boldsymbol{\tau}-\boldsymbol{C} \\ \boldsymbol{k} \end{array}\right] \tag{3.17} [HKKT0][q¨λ]=[τCk](3.17)

这是一个关于 n+ncn+n_{c}n+nc 个未知数 n+ncn+n_{c}n+nc 个方程的集合,其中 n=dim⁡(q¨)n=\operatorname{dim}(\ddot{\boldsymbol{q}})n=dim(q¨) 是无约束系统的自由度,nc=dim⁡(λ)=dim⁡(ϕ)n_{c}=\operatorname{dim}(\boldsymbol{\lambda})=\operatorname{dim}(\boldsymbol{\phi})nc=dim(λ)=dim(ϕ) 是对系统施加的约束的数量。可以证明系数矩阵的秩是 n+nicn+n_{i c}n+nic,其中 nic=rank⁡(K)n_{i c}=\operatorname{rank}(\boldsymbol{K})nic=rank(K) 是对系统施加的独立约束的数量。因此,如果 nic=ncn_{i c}=n_{c}nic=nc,则系数矩阵是非奇异的,可以解出 q¨\ddot{\boldsymbol{q}}q¨λ\boldsymbol{\lambda}λ 的值。然而,如果 nic<ncn_{i c}<n_{c}nic<nc,则仍然可以解出 q¨\ddot{\boldsymbol{q}}q¨,但是 λ\boldsymbol{\lambda}λ 中将有 nc−nicn_{c}-n_{i c}ncnic 个不确定度。当 nic<ncn_{i c}<n_{c}nic<nc 时,系统被称为超约束。理想情况下,我们总希望 nic=ncn_{i c}=n_{c}nic=nc,但在实践中并不总是可能保证这一点。

施加显式运动约束

要将显式运动约束施加于刚体系统,我们将 方程3.14 与 方程3.16 以及 方程3.11 中的显式加速度约束方程组合。得到的方程为
[H−10−10G0GT0][q¨τcy¨]=[τ−C−g0](3.18) \left[\begin{array}{ccc} H & -1 & 0 \\ -1 & 0 & G \\ 0 & G^{\mathrm{T}} & 0 \end{array}\right]\left[\begin{array}{c} \ddot{q} \\ \tau_{c} \\ \ddot{y} \end{array}\right]=\left[\begin{array}{c} \boldsymbol{\tau}-\boldsymbol{C} \\ -\boldsymbol{g} \\ \mathbf{0} \end{array}\right] \tag{3.18} H1010GT0G0q¨τcy¨=τCg0(3.18)

对这个方程应用高斯消元法的一步操作得到

[H−100H−1G0GT0][q¨τcy¨]=[τ−CH−1(τ−C)−g0], \left[\begin{array}{ccc} \boldsymbol{H} & -\mathbf{1} & \mathbf{0} \\ \mathbf{0} & \boldsymbol{H}^{-1} & \boldsymbol{G} \\ \mathbf{0} & \boldsymbol{G}^{\mathrm{T}} & \mathbf{0} \end{array}\right]\left[\begin{array}{c} \ddot{\boldsymbol{q}} \\ \boldsymbol{\tau}_{c} \\ \ddot{\boldsymbol{y}} \end{array}\right]=\left[\begin{array}{c} \boldsymbol{\tau}-\boldsymbol{C} \\ \boldsymbol{H}^{-1}(\boldsymbol{\tau}-\boldsymbol{C})-\boldsymbol{g} \\ \mathbf{0} \end{array}\right], H001H1GT0G0q¨τcy¨=τCH1(τC)g0,

从中我们可以提取出

[H−1GGT0][τcy¨]=[H−1(τ−C)−g0](3.19) \left[\begin{array}{cc} \boldsymbol{H}^{-1} & \boldsymbol{G} \\ \boldsymbol{G}^{\mathrm{T}} & \mathbf{0} \end{array}\right]\left[\begin{array}{c} \boldsymbol{\tau}_{c} \\ \ddot{\boldsymbol{y}} \end{array}\right]=\left[\begin{array}{c} \boldsymbol{H}^{-1}(\boldsymbol{\tau}-\boldsymbol{C})-\boldsymbol{g} \\ \mathbf{0} \end{array}\right] \tag{3.19} [H1GTG0][τcy¨]=[H1(τC)g0](3.19)

对这个方程应用高斯消元法得到

[H−1G0−GTHG][τcy¨]=[H−1(τ−C)g−GT(τ−C−Hg)] \left[\begin{array}{cc} \boldsymbol{H}^{-1} & \boldsymbol{G} \\ \mathbf{0} & -\boldsymbol{G}^{\mathrm{T}} \boldsymbol{H} \boldsymbol{G} \end{array}\right]\left[\begin{array}{c} \boldsymbol{\tau}_{c} \\ \ddot{\boldsymbol{y}} \end{array}\right]=\left[\begin{array}{c} \boldsymbol{H}^{-1}(\boldsymbol{\tau}-\boldsymbol{C}) \boldsymbol{g} \\ -\boldsymbol{G}^{\mathrm{T}}(\boldsymbol{\tau}-\boldsymbol{C}-\boldsymbol{H} \boldsymbol{g}) \end{array}\right] [H10GGTHG][τcy¨]=[H1(τC)gGT(τCHg)]

从中我们得到

GTHGy¨=GT(τ−C−Hg)(3.20) \boldsymbol{G}^{\mathrm{T}} \boldsymbol{H} \boldsymbol{G} \ddot{\boldsymbol{y}}=\boldsymbol{G}^{\mathrm{T}}(\boldsymbol{\tau}-\boldsymbol{C}-\boldsymbol{H} \boldsymbol{g}) \tag{3.20} GTHGy¨=GT(τCHg)(3.20)

最后,如果我们进行代换 u=GTτ\boldsymbol{u}=\boldsymbol{G}^{\mathrm{T}} \boldsymbol{\tau}u=GTτ,其中 u\boldsymbol{u}u 是一组新的广义力,那么我们得到

HGy¨+CG=u(3.21) \boldsymbol{H}_{G} \ddot{\boldsymbol{y}}+\boldsymbol{C}_{G}=\boldsymbol{u} \tag{3.21} HGy¨+CG=u(3.21)

其中

HG=GTHG and CG=GT(C+Hg) \boldsymbol{H}_{G}=\boldsymbol{G}^{\mathrm{T}} \boldsymbol{H} \boldsymbol{G} \quad \text { and } \quad \boldsymbol{C}_{G}=\boldsymbol{G}^{\mathrm{T}}(\boldsymbol{C}+\boldsymbol{H} \boldsymbol{g}) HG=GTHG and CG=GT(C+Hg)

因此,我们得到了一个新的受约束系统的运动方程,其代数形式与无约束系统的运动方程(3.13式)相同。

现在需要说明几点。首先,方程(3.19)可以看作是方程(3.17)的对偶,即运动和力的变量位置互换。然而,在实践中,方程(3.17)比方程(3.19)更有用。其次,方程(3.20)可以直接从方程(3.14)得出,首先通过左乘 GT\boldsymbol{G}^{\mathrm{T}}GT 消除 τc\boldsymbol{\tau}_{c}τc,然后使用方程(3.11)中的显式加速度约束替换 q¨\ddot{\boldsymbol{q}}q¨。这个方法有时被称为投影法(projection method),因为第一步相当于将运动方程投影到 GT\boldsymbol{G}^{\mathrm{T}}GT 的值域空间上。第三,HG\boldsymbol{H}_{G}HG 继承了 H\boldsymbol{H}H 的对称性和正定性的特性。它还具有约束系统的动能为

T=12y˙THGy˙(3.22) T=\frac{1}{2} \dot{\boldsymbol{y}}^{\mathrm{T}} \boldsymbol{H}_{G} \dot{\boldsymbol{y}} \tag{3.22} T=21y˙THGy˙(3.22)

最后,我们可以证明 u⋅y˙\boldsymbol{u} \cdot \dot{\boldsymbol{y}}uy˙ 是传递给约束系统的功率:

u⋅y˙=(GTτ)Ty˙=τTGy=τ⋅q˙(3.23) \boldsymbol{u} \cdot \dot{\boldsymbol{y}}=\left(\boldsymbol{G}^{\mathrm{T}} \boldsymbol{\tau}\right)^{\mathrm{T}} \dot{\boldsymbol{y}}=\boldsymbol{\tau}^{\mathrm{T}} \boldsymbol{G} \boldsymbol{y}=\boldsymbol{\tau} \cdot \dot{\boldsymbol{q}} \tag{3.23} uy˙=(GTτ)Ty˙=τTGy=τq˙(3.23)

因此,u\boldsymbol{u}u 符合广义力向量的定义。

3.3 向量子空间

向量子空间是描述和分析运动约束的自然数学工具,因为它们捕捉了约束的基本特性。例如,方程(3.13)中的系统在 Mn\mathrm{\boldsymbol{M}}^{n}Mn 中可以自由运动,因为 q˙\dot{\boldsymbol{q}}q˙Mn\mathrm{\boldsymbol{M}}^{n}Mn 的元素,并且没有约束。然而,方程(3.14)中的系统只受到子空间 S⊂MnS \subset \mathrm{M}^{n}SMn 的约束。如果约束被隐式描述,那么 S=null⁡(K)S=\operatorname{null}(\boldsymbol{K})S=null(K);如果约束被显式描述,那么 S=S=S= range (G)(\boldsymbol{G})(G)。如果 K1\boldsymbol{K}_{1}K1K2\boldsymbol{K}_{2}K2 都描述相同的约束,则它们必须共享的一点是 null⁡(K1)=null⁡(K2)=S\operatorname{null}\left(\boldsymbol{K}_{1}\right)=\operatorname{null}\left(\boldsymbol{K}_{2}\right)=Snull(K1)=null(K2)=S。同样,如果 G1\boldsymbol{G}_{1}G1G2\boldsymbol{G}_{2}G2 描述相同的约束,则它们必须共享的一点是 range (G1)=range⁡(G2)=S\left(\boldsymbol{G}_{1}\right)=\operatorname{range}\left(\boldsymbol{G}_{2}\right)=S(G1)=range(G2)=S。因此,子空间 SSS 而不是某个特定的矩阵捕捉了约束的本质。因此,本节回顾了一些关于向量子空间及其应用的基础知识。

向量子空间是指由一组向量张成的向量集合所形成的线性子空间。这个子空间由所选向量的线性组合所生成,并包含了所有这些线性组合的线性组合。向量子空间具有其特定的维数和性质。

更具体地说,给定一个向量空间V,它的一个子集S中的向量元素可以通过线性组合来生成一个向量子空间。这意味着我们可以从S中选择任意数量的向量,对它们进行标量乘法和向量加法操作,从而得到一个新的向量,该向量也属于S。换句话说,向量子空间是原始向量子集中的所有线性组合所生成的。

向量子空间遵循向量空间的定义,即它满足以下几个条件:

  • 包含零向量,即原点
  • 对于任意两个向量在子空间中的加法封闭
  • 对于任意一个向量与标量的乘法封闭

向量子空间的维数由生成子空间的向量数量决定。如果生成子空间的向量数量为n,则该子空间的维数为n。此外,向量子空间的基向量也是表示该子空间的基础,它们是线性无关的,并且可用于表示子空间中的任何向量。

基础知识

向量空间的子空间是指一个既是子集又是向量空间的集合。因此,子空间是指对于加法和标量乘法封闭的任意子集。设 VVV 是一个向量空间,Y={y1,y2,…}Y=\left\{\boldsymbol{y}_{1}, \boldsymbol{y}_{2}, \ldots\right\}Y={y1,y2,}VVV 的任意子集。数量 span⁡(Y)\operatorname{span}(Y)span(Y) 表示由 YYY 的所有元素的线性组合构成的集合,因此它也是一个子空间。因此,满足 Y=span⁡(Y)Y=\operatorname{span}(Y)Y=span(Y) 的子集是一个子空间。如果 SSSVVV 的子空间,Y={y1,y2,…}Y=\left\{\boldsymbol{y}_{1}, \boldsymbol{y}_{2}, \ldots\right\}Y={y1,y2,}SSS 的一组基,则 S=span⁡(Y)S=\operatorname{span}(Y)S=span(Y),且 dim⁡(S)=∣Y∣\operatorname{dim}(S)=|Y|dim(S)=Y(即子空间 SSS 的维数等于 YYY 中元素的个数)。零维子空间是只包含零向量的集合。由于子空间本身也是一个向量空间,所以子空间可以有子空间,依此类推。

没有特殊的符号表示"是子空间"。相反,我们使用子集的符号。因此,我们用 Y⊆VY \subseteq VYV 表示 YYYVVV 的子集,用 S⊆VS \subseteq VSV 表示 SSS 是一个子空间。必须阅读上下文来确定所指的含义。表达式 S⊂VS \subset VSV 表示 SSSVVV 的子空间,这意味着 dim⁡(S)<dim⁡(V)\operatorname{dim}(S)<\operatorname{dim}(V)dim(S)<dim(V)

假设 S⊆VS \subseteq VSV,并且 dim⁡(S)=m\operatorname{dim}(S)=mdim(S)=mdim⁡(V)=n\operatorname{dim}(V)=ndim(V)=n。则 mmm 必须满足 0≤m≤n0 \leq m \leq n0mn。如果 m=0m=0m=0,则 S={0}S=\{\mathbf{0}\}S={0};如果 m=nm=nm=n,则 S=VS=VS=V;但是如果 mmm 取任何其他值,则存在无穷多个具有该维数的子空间。唯一确定一个 mmm 维子空间所需的参数数量为 m(n−m)m(n-m)m(nm)

矩阵表示

表示子空间的最简单方法是将其表示为矩阵的范围或零空间。我们主要使用前者。设 SSSnnn 维向量空间 VVV 的一个 mmm 维子空间,S={s1,…,sm}\mathcal{S}=\left\{\boldsymbol{s}_{1}, \ldots, \boldsymbol{s}_{m}\right\}S={s1,,sm}SSS 的一组基。则任意向量 v∈S\boldsymbol{v} \in SvS 可以表示为 v=∑i=1msiαi\boldsymbol{v}=\sum_{i=1}^{m} \boldsymbol{s}_{i} \alpha_{i}v=i=1msiαi 的形式,其中 αi\alpha_{i}αiv\boldsymbol{v}vS\mathcal{S}S 坐标系下的坐标。如果 si\boldsymbol{s}_{i}si 本身是坐标向量,在 VVV 的某个基下表示,则它们可以组合成一个 n×mn \times mn×m 矩阵 S=[s1⋯sm]\boldsymbol{S}=\left[\begin{array}{lll}\boldsymbol{s}_{1} & \cdots & \boldsymbol{s}_{m}\end{array}\right]S=[s1sm],满足 range⁡(S)=S\operatorname{range}(\boldsymbol{S})=Srange(S)=S。此时,v\boldsymbol{v}v 可以表示为 v=Sα\boldsymbol{v}=\boldsymbol{S} \boldsymbol{\alpha}v=Sα,其中 α=[α1⋯αm]T\boldsymbol{\alpha}=\left[\begin{array}{lll}\alpha_{1} & \cdots & \alpha_{m}\end{array}\right]^{\mathrm{T}}α=[α1αm]T

矩阵 S\boldsymbol{S}S 同时定义了一个子空间和一组基。事实上,在 S\boldsymbol{S}S 中的 mnmnmn 个数中,我们可以说有 m(n−m)m(n-m)m(nm) 个定义了子空间,m2m^{2}m2 个定义了基。如果 S′={s1′,…,sm′}\mathcal{S}^{\prime}=\left\{\boldsymbol{s}_{1}^{\prime}, \ldots, \boldsymbol{s}_{m}^{\prime}\right\}S={s1,,sm}SSS 的另一组基,则矩阵 S′=[s1′⋯sm′]\boldsymbol{S}^{\prime}=\left[\begin{array}{lll}\boldsymbol{s}_{1}^{\prime} & \cdots & \boldsymbol{s}_{m}^{\prime}\end{array}\right]S=[s1sm]S\boldsymbol{S}S 定义了相同的子空间,但是不同的基。此时,S′\boldsymbol{S}^{\prime}S 可以表示为 S′=SA\boldsymbol{S}^{\prime}=\boldsymbol{S} \boldsymbol{A}S=SA 的形式,其中 A\boldsymbol{A}A 是从 S′\mathcal{S}^{\prime}S 坐标系到 S\mathcal{S}S 坐标系的坐标变换。(A\boldsymbol{A}A 的元素满足 sj′=∑i=1msiAij\boldsymbol{s}_{j}^{\prime}=\sum_{i=1}^{m} \boldsymbol{s}_{i} A_{i j}sj=i=1msiAij。)因此,任何可逆矩阵 A\boldsymbol{A}A 和矩阵 SA\boldsymbol{S} \boldsymbol{A}SA 都描述了与 S\boldsymbol{S}S 相同的子空间。

向量空间的零空间(Null Space),也被称为核空间(Kernel),是指线性映射中被映射到零向量的向量所形成的子空间。

给定一个线性映射(或线性变换)T:V→WT:V→WTVW,其中 VVVWWW 是两个向量空间。那么,映射 TTT 的零空间是所有在 VVV 中的向量 vvv,使得 T(v)=0T(v) = 0T(v)=0 的向量 vvv 组成的子空间。简而言之,零空间就是被 TTT 变换到零向量的所有向量的集合。

以矩阵表示的线性映射为例,对于矩阵A:Rn→RmA:R^n→R^mARnRm,其零空间是所有满足Av=0Av = 0Av=0的向量 vvv 的集合。这些向量是矩阵 AAA 的零特征值对应的特征向量。零空间的维数等于矩阵的列数减去矩阵的秩,可以用来描述线性映射的退化性和约束条件。

向量的分解

对一个向量进行的最基本操作之一是将其分解为两个子空间中的分量。给定向量 v∈V\boldsymbol{v} \in VvV 和子空间 S1,S2⊆VS_{1}, S_{2} \subseteq VS1,S2V,我们的目标是将 v\boldsymbol{v}v 表示为 v=v1+v2\boldsymbol{v}=\boldsymbol{v}_{1}+\boldsymbol{v}_{2}v=v1+v2 的形式,其中 v1∈S1\boldsymbol{v}_{1} \in S_{1}v1S1v2∈S2\boldsymbol{v}_{2} \in S_{2}v2S2。如果 v∈span⁡(S1∪S2)\boldsymbol{v} \in \operatorname{span}\left(S_{1} \cup S_{2}\right)vspan(S1S2),则可以进行这种分解;如果 S1∩S2={0}S_{1} \cap S_{2}=\{\mathbf{0}\}S1S2={0}(即 S1S_{1}S1S2S_{2}S2 没有非零元素相同),则此分解是唯一的。如果我们希望对任何 v\boldsymbol{v}v 进行可能且唯一的分解,则 S1S_{1}S1S2S_{2}S2 必须满足的条件是:
S1∩S2={0} and dim⁡(S1)+dim⁡(S2)=dim⁡(V)(3.24) S_{1} \cap S_{2}=\{\mathbf{0}\} \quad \text { and } \quad \operatorname{dim}\left(S_{1}\right)+\operatorname{dim}\left(S_{2}\right)=\operatorname{dim}(V) \tag{3.24} S1S2={0} and dim(S1)+dim(S2)=dim(V)(3.24)

这些条件意味着 span⁡(S1∪S2)=V\operatorname{span}\left(S_{1} \cup S_{2}\right)=Vspan(S1S2)=V。如果 S1S_{1}S1S2S_{2}S2 满足式子 3.24,那么我们可以说 VVVS1S_{1}S1S2S_{2}S2 的 direct sum,记作
V=S1⊕S2(3.25) V=S_{1} \oplus S_{2} \tag{3.25} V=S1S2(3.25)
这个等式简单地表示任何 VVV 中的元素都可以唯一地分解为 S1S_{1}S1 中的一个元素和 S2S_{2}S2 中的一个元素的和。基本上,式子 3.24 和 3.25 表达了同样的意思。

现在让我们进行分解。给定一个向量 v∈V\boldsymbol{v} \in VvV 和两个表示子空间的矩阵 S1\boldsymbol{S}_{1}S1S2\boldsymbol{S}_{2}S2,满足式子 3.25;任务是找到满足下式的 α1\boldsymbol{\alpha}_{1}α1α2\boldsymbol{\alpha}_{2}α2
v=S1α1+S2α2=[S1S2][α1α2](3.26) \boldsymbol{v}=\boldsymbol{S}_{1} \boldsymbol{\alpha}_{1}+\boldsymbol{S}_{2} \boldsymbol{\alpha}_{2}=\left[\begin{array}{ll} \boldsymbol{S}_{1} & \boldsymbol{S}_{2} \end{array}\right]\left[\begin{array}{l} \boldsymbol{\alpha}_{1} \\ \boldsymbol{\alpha}_{2} \end{array}\right] \tag{3.26} v=S1α1+S2α2=[S1S2][α1α2](3.26)
这个问题可以使用以下结果解决:如果 S1⊕S2=VS_{1} \oplus S_{2}=VS1S2=V,那么 [S1S2]\left[\begin{array}{ll} \boldsymbol{S}_{1} & \boldsymbol{S}_{2} \end{array}\right][S1S2] 定义了 VVV 上的一组基,并且是一个非奇异矩阵。鉴于 [S1S2]−1\left[\begin{array}{ll}\boldsymbol{S}_{1} & \boldsymbol{S}_{2}\end{array}\right]^{-1}[S1S2]1 存在,方程式 3.26 的解简单地是
[α1α2]=[S1S2]−1v(3.27) \left[\begin{array}{l} \boldsymbol{\alpha}_{1} \\ \boldsymbol{\alpha}_{2} \end{array}\right]=\left[\begin{array}{ll} \boldsymbol{S}_{1} & \boldsymbol{S}_{2} \end{array}\right]^{-1} \boldsymbol{v} \tag{3.27} [α1α2]=[S1S2]1v(3.27)
这个公式很容易推广到将向量分解为多于两个子空间的情况。

正交补(Orthogonal Complements)

如果两个欧几里得向量 u\boldsymbol{u}uv\boldsymbol{v}v 满足方程 u⋅v=0\boldsymbol{u} \cdot \boldsymbol{v}=\mathbf{0}uv=0,则它们被称为正交向量。如果 Y1Y_{1}Y1Y2Y_{2}Y2Rn\mathbb{R}^{n}Rn 的子集,并且 Y1Y_{1}Y1 中的每个元素都与 Y2Y_{2}Y2 中的每个元素正交,则这两个子集被称为正交的,记作 Y1⊥Y2Y_{1} \perp Y_{2}Y1Y2。与给定子集 Y⊆RnY \subseteq \mathbb{R}^{n}YRn 正交的所有向量的集合被称为它的正交补,记作 Y⊥Y^{\perp}Y。正交补总是一个子空间。表 3.1 列出了一些正交子集的基本性质。

这种正交性是基于欧几里得内积定义的,因此仅适用于欧几里得向量。然而,可以定义其他形式的正交性,这些正交性基于其他标量积。特别地,如果 u∈U\boldsymbol{u} \in UuUv∈V\boldsymbol{v} \in VvV,其中 U=V∗U=V^{*}U=V,那么可以定义 u\boldsymbol{u}uv\boldsymbol{v}v 之间的标量积,并且可以说如果 u⋅v=0\boldsymbol{u} \cdot \boldsymbol{v}=\mathbf{0}uv=0,那么它们

Subsets:Subspaces:
Y1⊥Y2⇒Y2⊥Y1Y_{1} \perp Y_{2} \Rightarrow Y_{2} \perp Y_{1}Y1Y2Y2Y1dim⁡(S)+dim⁡(S⊥)=dim⁡(U)\operatorname{dim}(S)+\operatorname{dim}\left(S^{\perp}\right)=\operatorname{dim}(U)dim(S)+dim(S)=dim(U)
Y1⊥Y2⇒span⁡(Y1)⊥Y2Y_{1} \perp Y_{2} \Rightarrow \operatorname{span}\left(Y_{1}\right) \perp Y_{2}Y1Y2span(Y1)Y2S1⊥S2⇔S1TS2=0S_{1} \perp S_{2} \Leftrightarrow \boldsymbol{S}_{1}^{\mathrm{T}} \boldsymbol{S}_{2}=\mathbf{0}S1S2S1TS2=0
Y1⊥Y2∧Z⊆Y1⇒Z⊥Y2Y_{1} \perp Y_{2} \wedge Z \subseteq Y_{1} \Rightarrow Z \perp Y_{2}Y1Y2ZY1ZY2S1⊕S2⊥=U⇔(S1TS2)−1S_{1} \oplus S_{2}^{\perp}=U \Leftrightarrow\left(\boldsymbol{S}_{1}^{\mathrm{T}} \boldsymbol{S}_{2}\right)^{-1}S1S2=U(S1TS2)1 exists
Y1⊥Y2⇒Y1⊆Y2⊥Y_{1} \perp Y_{2} \Rightarrow Y_{1} \subseteq Y_{2}^{\perp}Y1Y2Y1Y2S1⊕S2⊥=U⇔S1⊥⊕S2=VS_{1} \oplus S_{2}^{\perp}=U \Leftrightarrow S_{1}^{\perp} \oplus S_{2}=VS1S2=US1S2=V
Y⊥=(span⁡(Y))⊥Y^{\perp}=(\operatorname{span}(Y))^{\perp}Y=(span(Y))Euclidean Subspaces:
(Y⊥)⊥=span⁡(Y)\left(Y^{\perp}\right)^{\perp}=\operatorname{span}(Y)(Y)=span(Y)S⊕S⊥=EnS \oplus S^{\perp}=\mathrm{E}^{n}SS=En

表3.1:正交子集的属性。在一般情况下,S,S1,Y,Y1⊆US, S_{1}, Y, Y_{1} \subseteq US,S1,Y,Y1US2,Y2⊆VS_{2}, Y_{2} \subseteq VS2,Y2V,其中U=V∗U=V^{*}U=V。 在欧几里德情况下,S,…,Y2⊆EnS, \ldots, Y_{2} \subseteq \mathrm{E}^{n}S,,Y2En 是正交的。

通过推广,如果 Y1Y_{1}Y1Y2Y_{2}Y2 分别是 UUUVVV 的子集,并且 Y1Y_{1}Y1 的每个元素都与 Y2Y_{2}Y2 的每个元素正交,则 Y1⊥Y2Y_{1} \perp Y_{2}Y1Y2。同样,与 Y⊆UY \subseteq UYU 正交的 VVV 的所有元素的集合是 YYY 的正交补。

观察到欧几里德和对偶的正交性具有不同且不兼容的数学属性。特别地,如果 Y1Y_{1}Y1Y2Y_{2}Y2 是相同向量空间的子集,那么关系Y1⊥Y2Y_{1} \perp Y_{2}Y1Y2 只能在欧几里得意义上成立;而如果它们是不同向量空间的子集,则只能在对偶意义上成立。正交补在机器人学文献中具有一定的声名,这是由于将 6D6\mathrm{D}6D 向量错误地视为欧几里德向量,并使用欧几里德形式的正交补而不是对偶形式。这个问题在Duffy(1990)中有所讨论。一些作者试图通过使用替代名称,如“‘natural orthogonal complement”或“reciprocal complement”,来与这个错误保持距离,以表示对偶正交补的形式。

正交补在刚体动力学中起到以下作用:如果系统最初可以在 Mn\mathrm{\boldsymbol{M}}^{n}Mn 中自由运动,并且运动约束将运动限制在子空间 S⊆MnS \subseteq \mathrm{M}^{n}SMn 中,则施加该约束在系统上的约束力是 S⊥⊆FnS^{\perp} \subseteq \mathrm{F}^{n}SFn 的元素。

例3.1 假设我们已经给定一个运动子空间 S⊆M6S \subseteq \mathrm{M}^{6}SM6 和一个正定的空间惯性 I:M6↦F6\boldsymbol{I}: \mathrm{M}^{6} \mapsto \mathrm{F}^{6}I:M6F6 。利用这些量,我们可以定义两个子空间 Ta=IST_{a}=\boldsymbol{I} STa=ISTc=S⊥T_{c}=S^{\perp}Tc=S ,它们具有性质 Ta⊕Tc=F6T_{a} \oplus T_{c}=\mathrm{F}^{6}TaTc=F6 。(表达式 IS\boldsymbol{I} SIS 是映射 I\boldsymbol{I}ISSS 的像,即集合 {Is∣s∈S}\{\boldsymbol{I} \boldsymbol{s} {|} \boldsymbol{s} \in S\}{IssS} 。)我们可以通过以下证明这个性质。根据等式3.24,我们必须证明 dim⁡(Ta)+dim⁡(Tc)=6\operatorname{dim}\left(T_{a}\right)+\operatorname{dim}\left(T_{c}\right)=6dim(Ta)+dim(Tc)=6 ,并且 Ta∩TcT_{a} \cap T_{c}TaTc 不包含非零元素。第一部分很容易:dim⁡(Ta)=dim⁡(S)\operatorname{dim}\left(T_{a}\right)=\operatorname{dim}(S)dim(Ta)=dim(S)dim⁡(Tc)=6−dim⁡(S)\operatorname{dim}\left(T_{c}\right)=6-\operatorname{dim}(S)dim(Tc)=6dim(S)。为了证明第二部分,我们假设存在 t≠0∈(Ta∩Tc)\boldsymbol{t} \neq 0 \in \left(T_{a} \cap T_{c}\right)t=0(TaTc) 并证明它导致矛盾:如果 t∈Tat \in T_{a}tTa ,那么存在一个非零向量 s∈Ss \in SsS 使得 t=Is\boldsymbol{t}=\boldsymbol{I} \boldsymbol{s}t=Is ;但如果 t∈Tc\boldsymbol{t} \in T_{c}tTc ,则 sTt=0\boldsymbol{s}^{\mathrm{T}} \boldsymbol{t}=0sTt=0 ,意味着 sTIs=0\boldsymbol{s}^{\mathrm{T}} \boldsymbol{I} \boldsymbol{s}=0sTIs=0 ;但这是不可能的,因为 I\boldsymbol{I}I 是正定的。

在建立了 Ta⊕Tc=F6T_{a} \oplus T_{c}=\mathrm{F}^{6}TaTc=F6 之后,我们可以将任何 f∈F6\boldsymbol{f} \in \mathrm{F}^{6}fF6 唯一地分解为分量 fa∈Ta\boldsymbol{f}_{a} \in T_{a}faTafc∈Tc\boldsymbol{f}_{c} \in T_{c}fcTc 。给定任意张成 SSS 的矩阵 S\boldsymbol{S}S,我们可以按如下方式获得 fa\boldsymbol{f}_{a}fafc\boldsymbol{f}_{c}fc
STf=STfa+STfc=STfa, \boldsymbol{S}^{\mathrm{T}} \boldsymbol{f}=\boldsymbol{S}^{\mathrm{T}} \boldsymbol{f}_{a}+\boldsymbol{S}^{\mathrm{T}} \boldsymbol{f}_{c}=\boldsymbol{S}^{\mathrm{T}} \boldsymbol{f}_{a}, STf=STfa+STfc=STfa,

but fa=ISα\boldsymbol{f}_{a}=\boldsymbol{I} \boldsymbol{S} \boldsymbol{\alpha}fa=ISα for some α\boldsymbol{\alpha}α, so

STf=STISα, \boldsymbol{S}^{\mathrm{T}} \boldsymbol{f}=\boldsymbol{S}^{\mathrm{T}} \boldsymbol{I} \boldsymbol{S} \boldsymbol{\alpha}, STf=STISα,

这意味着

α=(STIS)−1STf, \boldsymbol{\alpha}=\left(\boldsymbol{S}^{\mathrm{T}} \boldsymbol{I} \boldsymbol{S}\right)^{-1} \boldsymbol{S}^{\mathrm{T}} \boldsymbol{f}, α=(STIS)1STf,

因此

fa=IS(STIS)−1STf(3.28) \boldsymbol{f}_{a}=\boldsymbol{I} \boldsymbol{S}\left(\boldsymbol{S}^{\mathrm{T}} \boldsymbol{I} \boldsymbol{S}\right)^{-1} \boldsymbol{S}^{\mathrm{T}} \boldsymbol{f} \tag{3.28} fa=IS(STIS)1STf(3.28)

fc\boldsymbol{f}_{c}fc 可以通过简单地使用 fc=f−fa\boldsymbol{f}_{c}=\boldsymbol{f}-\boldsymbol{f}_{a}fc=ffa 来得到。方程式3.28 中的表达式显然不依赖于选择 S\boldsymbol{S}S 的具体方式。我们可以通过将该方程中的每个 S\boldsymbol{S}S 替换为 SA\boldsymbol{S} \boldsymbol{A}SA 来证明这一点,其中 A\boldsymbol{A}A 是维度正确的可逆矩阵,并且证明 ’ A\boldsymbol{A}A ’ 互相抵消。

这种分解的物理解释如下。如果 I\boldsymbol{I}I 是约束在子空间 SSS 中刚体运动的惯性,并且 f\boldsymbol{f}f 是作用在该刚体上的力,则 fa\boldsymbol{f}_{a}fa 是导致加速度的分量,fc\boldsymbol{f}_{c}fc 是被约束力所抵消的分量(即约束力将为 −fc-\boldsymbol{f}_{c}fc)。如果刚体静止,并且除了 f\boldsymbol{f}f 和运动约束力之外没有受到其他力的影响,则其加速度将为

a=I−1fa=S(STIS)−1STf. \boldsymbol{a}=\boldsymbol{I}^{-1} \boldsymbol{f}_{a}=\boldsymbol{S}\left(\boldsymbol{S}^{\mathrm{T}} \boldsymbol{I} \boldsymbol{S}\right)^{-1} \boldsymbol{S}^{\mathrm{T}} \boldsymbol{f} . a=I1fa=S(STIS)1STf.

表达式 S(STIS)−1ST\boldsymbol{S}\left(\boldsymbol{S}^{\mathrm{T}} \boldsymbol{I} \boldsymbol{S}\right)^{-1} \boldsymbol{S}^{\mathrm{T}}S(STIS)1ST 是受约束刚体的逆惯性矩阵(apparent inverse inertia)(参见方程式3.54)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值