计算刚体动力学
计算刚体动力学
约束、自由度和广义坐标
考虑由
的独立方程的约束,于是系统的自由度还剩下
Note
为什么
形如
如没有特殊说明,下面的内容只针对完整约束。
虚位移与广义坐标分解
虚位移
其中
是一个
如果约束方程线性无关,则
其中
虚功原理与广义力
假设系统受到若干外力,作用在系统中某些点上的力记为
其作用点的位置为
在虚位移
因此该力所做的虚功为
所有外力的虚功之和可以写成
其中
称为系统的广义力(generalized force)。
因此,实际作用在刚体不同位置、不同方向上的力,都可以通过运动学雅可比映射为统一的广义力
对于理想约束,约束力对所有满足约束的虚位移均不做虚功:
即
而允许虚位移满足
因此约束广义力必然位于
第二类拉格朗日方程
对于使用独立广义坐标描述的系统,可以通过系统的动能
建立第二类拉格朗日方程:
其中
这里使用的是动能
因为势能力也可以直接写成广义力。例如对于势能
因此
与使用
这种写法的优点是,可以将重力、弹簧力、阻尼力、电机驱动力、接触力等统一写入广义力
将拉格朗日方程进一步整理,一般可以得到
其中
增广建模与嵌入建模
对于存在约束
的系统,有两种基本的动力学建模方法。
嵌入建模(embedding formulation)
将广义坐标分为独立坐标和非独立坐标:
由
如果
因此所有允许虚位移都可以仅由独立坐标的虚位移表示。
通过这种方式,可以将非独立坐标从动力学方程中消去,最终得到仅关于独立坐标的微分方程。
嵌入建模的优点是最终动力学方程维数较小,只包含真正的系统自由度;
缺点是需要持续确定哪些坐标是独立坐标、哪些是非独立坐标,并且在复杂闭环系统中坐标分割可能比较困难。
增广建模(augmented formulation)
另一种方法是不消去非独立广义坐标,而是保留完整的冗余坐标
Info
拉格朗日乘子
例如将约束
改写为
虽然物理约束完全相同,但对应的
真正具有直接物理意义的是广义约束力
此时动力学可以写成
即
这种方法不需要显式消去约束坐标,因此特别适合通用多体系统建模。
代价是系统中除了微分变量
刚体系统的约束动力学方程(KKT方程)
刚体的位姿与速度表示
对于空间中的一个刚体,可以使用参考点的位置
描述平移运动。
姿态可以使用 Euler parameters,即单位四元数
表示,并满足归一化约束
因此如果使用位置与 Euler parameters 作为冗余广义坐标,则一个空间刚体可以写成
共有 7 个广义坐标,但由于四元数归一化约束只有 6 个实际自由度。
刚体的角速度
其中
因此,刚体的平动速度由
Note
用于表示刚体姿态的参数有多种选择,例如欧拉角、方向余弦、四元数等。 对于不同的姿态参数,都可以构造相应的矩阵
但不同姿态参数对应的
对于下面给出的 Euler parameters (四元数)情况,该矩阵对应刚体系下的角速度表示。
刚体的质量矩阵
对于第
其中
如果广义坐标由参考点位置和姿态参数组成,则质量矩阵一般可以写成
其中平动部分为
耦合项
其中
转动部分为
其中
如果参考点选在刚体质心,则一阶质量矩为零,因此平动和转动之间的耦合项消失:
于是单个刚体的质量矩阵得到明显简化。
对于由
KKT方程
对于完整约束
对时间求一次导数:
再次求导得到加速度约束:
其中
例如对于稳恒约束
系统动力学写成
其中:
:外部广义力,例如重力、驱动力、弹簧力等; :由速度产生的二次速度惯性项,例如科氏项、离心项和陀螺项; :加速度级约束方程的右端项,并不是广义力。
Note
对于质心作为参考点、四元数表示姿态时,单个刚体的
整个系统的
对于一般情况,则需要从拉格朗日方程出发计算。例如机器人学中常见的
形式的拉格朗日方程,
将动力学方程和加速度约束联立,得到
求解该方程可以同时得到系统加速度
Note
KKT方程的推导——从拉格朗日第二类方程出发
- 先由系统运动学写出
- 计算质量矩阵
- 计算
实际计算一般不采用。有两类做法:冗余坐标(此时质量矩阵直接对角拼装、广义力纵向堆叠,多刚体间的耦合靠约束来实现)、牛顿-欧拉迭代。
Info
KKT方程中的
只在加速度层满足约束。理论上,如果初始时
则约束会一直成立;但数值积分会产生误差,使
实际计算中常使用位置/速度投影、Newton-Raphson校正或Baumgarte stabilization等方法抑制约束漂移。 例如在NMPC中,可以将原始约束作为优化约束加进去,以移植漂移。
牛顿-欧拉方程
如果将刚体参考点选在质心,则平动和转动惯性解耦。
其中上半部分为 Newton 方程:
描述质心的平动。
下半部分为 Euler 方程:
描述刚体的转动。其中
非完整约束
对于非完整约束,约束关系不能积分为只含
常见的形式(Pfaffian约束)为
其中
允许的虚位移满足
因此理想约束产生的广义约束力可以写成
对速度约束求时间导数,可以得到加速度级约束:
其中
因此非完整约束下的动力学同样可以写成类似的 KKT 形式:
与完整约束相比,两者的 KKT 结构相同,但完整约束中的约束矩阵来自
如果进一步考虑一般形式的速度约束
可以采用 Chetaev 条件规定允许虚位移:
记
则理想约束产生的广义约束力为
对原速度约束求时间导数:
因此可以写成 KKT 形式:
Info
对于线性速度约束
Chetaev条件是经典非完整力学中常用且自然的选择。
但对于一般非线性速度约束
采用
属于一种建模原则,并不是由约束方程本身唯一推出的结果。其他变分处理,例如vakonomic mechanics,可能产生不同的动力学方程。