三维空间中欧拉角的转动,当比较复杂的时候很难一次性想清楚。如何确定Kirchhoff杆正确的边界条件呢?下面给出一种直接求解的方法

确定杆两端在全局和局部标架中的表达

假设全局标架表达为, 左端局部标架表达为,右端局部标架表达为。全局与局部标架之间通过转动矩阵变化得到:

我们只需要通过 求解边界条件即可。这里我们展示通过两种方法得到相同的结果,第一种方法为直接通过四元数转动矩阵求解,第二种方法为先反求具有明确物理意义的欧拉角,再通过欧拉角与四元数之间的关系求解边界条件。

四元数直接求解

四元数的转动矩阵为:

通过 以及 求出对应四元数的边界条件。

首先得到:

其次可以反解得到:

通过欧拉角求解

首先通过转动矩阵反解欧拉角 (mathematica函数EulerAngle),然后利用四元数与欧拉角的关系确定边界条件。四元数与欧拉角关系为:

Note: 这里有一点值得特别注意。之前通过四元数的变换为:

这里标架矢量均为行矢量,但是我们一般定义转动矩阵如下:

这里 均为列矢量,标架变换写成矩阵形式为:

转置后为:

由于单位矩阵是对称的,因此有:

从Eq. (8) 和 Eq. (11) 可以看出:

这一点在利用mathematica求解欧拉角的过程中需要特别注意。

符号计算程序

四元数直接求解:

1
2
3
4
5
6
Clear["`*"]
fQ[R_] :=
Module[{q0, q1, q2, q3}, {q0 = 1/2 Sqrt[Tr[R] + 1],
q1 = (R[[2, 3]] - R[[3, 2]])/(4 q0),
q2 = (R[[3, 1]] - R[[1, 3]])/(4 q0),
q3 = (R[[1, 2]] - R[[2, 1]])/(4 q0)}]

欧拉角间接求解:

1
2
3
4
5
6
7
Clear["`*"]
fE[R_] :=
Module[{q0, q1, q2, q3, f}, {f = EulerAngles[R // Transpose];
q0 = Cos[f[[2]]/2] Cos[(f[[1]] + f[[3]])/2],
q1 = Sin[f[[2]]/2] Sin[(f[[3]] - f[[1]])/2],
q2 = Sin[f[[2]]/2] Cos[(f[[3]] - f[[1]])/2],
q3 = Cos[f[[2]]/2] Sin[(f[[1]] + f[[3]])/2]}]

下面我们编写符号计算程序实现上面两种求解边界条件的方式,并通过案例进行验证。

IJSS 248 (2022) 111685

两端局部标架分别为:

可以解的与原文一致的边界条件:

1717896920749

1717896938629

JMPS 122 (2019) 657–685

两端局部标架分别为:

可以解的与原文一致的边界条件:

17178981381671717898156553

本文采用CC-BY-SA-3.0协议,转载请注明出处
作者: 得意喵~