旋转四元数在另一个四元数的框架中?

问题描述

我在飞机上安装了一个摄像头。
旋转 0,0 是飞机向北、平坦和水平飞行。
相机 0,0 指向正前方(通过鼻子)。

当飞机偏航(改变它的航向向西 270°)并进入 45°俯冲时,偏航、俯仰和滚转的欧拉角为 (-270,45,0)

此时,相机正在经历相同的角度(-270、45、0)。
但现在,摄影机操作员将摄影机视点升高 90°,并向右平移 90°。
我的直觉告诉我,相机现在应该指向 (0,45)。
注意我不太担心轮换的迹象,atm

我可以将两组角度都转换为四元数以简化旋转,但我不知道如何相对于飞机姿态旋转相机的运动相对。我必须旋转旋转,但来自地球参考系。

如何相对于另一个四元数的当前 3D 旋转旋转四元数?

var absoloutePlatform = Quaternion.RotationYawPitchRoll((float)ToRadians(yaw),(float)ToRadians(pitch),(float)ToRadians(roll));
var relativeSensor = Quaternion.RotationYawPitchRoll((float)ToRadians(yaw2),(float)ToRadians(pitch2),(float)ToRadians(roll2));

var absoluteQuaterion = [[ some calculation! ]]

var absoluteSensorAngles = absoluteQuaterion.GetYawPitchRoll();

解决方法

这一切都源于不清楚在将四元数转换为欧拉时使用哪个“标准”。

我将我的平台/飞机(世界)旋转从欧拉转换为四元数。
然后将我的相对传感器角度(来自平台参考)转换为四元数。

我把它们相乘

var resultQ = platformQ * sensorQ;

然后将结果转换回欧拉使用 zyx 旋转顺序

这给出了传感器在世界坐标系中的旋转。
也许这是航空业的标准 - 我不知道。
但简短的回答是肯定的,参照另一个旋转四元数:将它们相乘。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...