本文仅供学习使用
本文参考:
《Rigid Body Dynamics Algorithms》-Roy Featherstone
本书的目的是为了展示一些刚体动力学的主流算法,并且加以推导与解释,以便于读者创造新的算法/使用——递归牛顿-欧拉算法( the recursive Newton-Euler algorithm)
、复合(多)刚体算法(the composite-rigid-body algorithm)
、铰接体算法(the articulated-body algorithm)
,以及一些运动学环kinematic loops
与浮动机架 floating bases
,主要包括:
刚体动力学在电子游戏、动画、虚拟现实、仿真、运动控制系统中均有广泛应用。在这些场景中,计算机通过计算力、加速度等物理量来近似现实物理系统中的运动。书中采用 6D vectors(六维空间向量)来表示空间力和运动
刚体动力学定义了一组用来描述作用在物理系统上的力和产生的加速度关系的运动方程。
动力学算法则是计算这些物理量数值解的方法。
正动力学(forward dynamics)
FD:给定刚体系统广义作用力,计算系统加速度。——仿真逆动力学(inverse dynamics)
ID:给定响应的加速度,计算刚体系统所需施加的广义力。——运动控制、轨迹规划等混合动力学(hybrid dynamics)
:给定部分相应加速度与广义力,求解剩余的物理量。主要关注前两种动力学
刚体平衡方程:
τ
=
H
(
q
)
q
¨
+
C
(
q
,
q
˙
)
\tau =H(q)\ddot{q}+C(q,\dot{q})
τ=H(q)q¨+C(q,q˙)
其中:
q
,
q
˙
,
q
¨
q,\dot{q},\ddot{q}
q,q˙,q¨为位置、速度、加速度向量;
τ
\tau
τ是广义力向量;
H
H
H是由位置向量所确定的惯量矩阵;
C
C
C是科氏( Coriolis)力
、离心(centrifugal)力
、重力等其他作用在系统上的非外驱动力,由位置、速度向量所确定;
H
,
C
H,C
H,C都是运动学的系数,而
τ
,
q
¨
\tau ,\ddot{q}
τ,q¨为变量。
H ( q ) , C ( q , q ˙ ) H(q),C(q,\dot{q}) H(q),C(q,q˙)写成 H ( m o d e l , q ) , C ( m o d e l , q , q ˙ ) H(model,q),C(model,q,\dot{q}) H(model,q),C(model,q,q˙)可能更为准确——但是模型无法用一个变量来表示(将是包含特定刚体系统的系统模型的数据结构)。
模型(model)
:一个用于描述特定刚体系统组成部分的数据集:构件和运动副的数量,运动副的类型,以及每个构件的参数值(惯性参数、几何参数等)。
系统模型(system model)
:描述系统本身
数学模型(mathematical model)
:描述系统的行为——刚体平衡方程
正运动学FD:
q
¨
=
F
D
(
m
o
d
e
l
,
q
,
q
˙
,
τ
)
\ddot{q}=FD(\bmod el,q,\dot{q},\tau )
q¨=FD(model,q,q˙,τ)
逆运动学ID:
τ
=
F
D
(
m
o
d
e
l
,
q
,
q
˙
,
q
¨
)
\tau =FD(\bmod el,q,\dot{q},\ddot{q})
τ=FD(model,q,q˙,q¨)
需要计算 H − 1 ( τ − C ) , H q ¨ + C {{H}^{-1}}(\tau -C),H\ddot{q}+C H−1(τ−C),Hq¨+C
基于模型的算法(model-based algorithm)
:适用于一系列的刚体系统,并将使用系统模型中的数据来计算该模型所描述的特定刚体系统的算法——期望实现FD和ID的算法将适用于一类刚体系统,并将使用系统模型中的数据来计算该模型所描述的特定刚体系统的动力学。
开式运动树(kinematic tree)
:任何不包含运动链的刚体系统闭式运动链(closedloop system)
:任何不是开链运动树的刚体系统此处定义不够严谨,可以参考机构学著作对开链闭链的定义;
基于模型的算法可以根据两类主要问题进行分类:以什么形式来表达计算,适用于什么样的系统类别。
用三维向量来建立刚体的运动学方程通常需要两个等式:
{
f
=
m
a
C
n
C
=
I
ω
˙
+
ω
×
I
ω
\left\{ \begin{matrix} f=m{{a}_{C}} \\ {{n}_{C}}=I\dot{\omega }+\omega \times I\omega \\ \end{matrix} \right.
{f=maCnC=Iω˙+ω×Iω
前者描述了力与加速度作用于刚体质心的线性关系;
后者描述了转矩与角加速度作用于刚体质心的关系;
用六维向量描述刚体运动——将加速度、角加速度整合为空间加速度向量(加速度矢)、力与力矩整合为空间力向量(力矢):
f
=
I
a
+
υ
×
∗
I
υ
f=Ia+\upsilon \times *I\upsilon
f=Ia+υ×∗Iυ
其中:
f
f
f是作用于刚体的力矢量,
υ
,
a
\upsilon,a
υ,a为刚体的速度矢量与加速度矢量,
I
I
I为刚体的空间惯性张量,
×
∗
\times *
×∗为空间向量(六维)的叉乘。为了区分三维向量与六维矢量,可用上角标进行区分,如
f
^
{\hat{f}}
f^——更紧凑,简化编码量
若两个刚体组成一个新的刚体,其空间惯性张量为:
I n e w = I 1 + I 2 {{I}_{new}}={{I}_{1}}+{{I}_{2}} Inew=I1+I2,其中: I 1 , I 2 {{I}_{1}},{{I}_{2}} I1,I2是两个刚体原有的空间惯性张量。
上述方程相较于三维惯性矩有三点改进:
- 用于计算新的质量
- 用于计算新的质心
- 用于计算关于新的质心下的新的转动惯量
角度默认为弧度制;
0 与 1 用于表示 零矩阵(向量) 与 单位矩阵;
上角标
−
T
^{-T}
−T表示转置的逆:
A
−
T
=
(
A
−
1
)
T
{{A}^{-T}}={{({{A}^{-1}})}^{T}}
A−T=(A−1)T;
λ
(
i
)
\lambda (i)
λ(i):表示向量
λ
\lambda
λ的第i个元素;
A
υ
^{A}\upsilon
Aυ:表示A坐标系下的向量
υ
\upsilon
υ的表示
本书组织上,第2章介绍空间向量代数,第3章分析刚体系统的动力学和运动。第4章介绍了系统模型的组件。
5~7章介绍了kinematic tree的几个重要算法:recursive Newton-Euler 逆动力学算法、前向动力学的composite-rigid-body & articulated-body 算法。第8章介绍了closed-loop systems动力学。
9~11章涉及了其他研究点。第9章主要介绍了floating-base systems的混合动力学算法。第10章探讨了数值稳定性和计算效率。第11章涉及跟物体接触和冲击的情况处理。
The URL : http://users.rsise.anu.edu.au/~roy/spatial/.
或者搜索: Roy Featherstone