gpt4 book ai didi

ios - iOS 设备的欧拉角到旋转矩阵手动转换

转载 作者:行者123 更新时间:2023-12-01 23:32:46 25 4
gpt4 key购买 nike

这是问题的一个小背景和介绍:

我的基于运动和位置的 iOS 应用程序有一些功能,需要旋转矩阵作为输入。一些图形输出取决于该矩阵。随着设备的每次移动,图形输出都会发生变化。这是代码的一部分,它使得:

[motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical
toQueue:motionQueue
withHandler:
^(CMDeviceMotion* motion, NSError* error){
//get and process matrix data
}

在此结构中只有 4 个帧可用:

XArbitraryZVertical

XArbitraryCorrectedZVertical

X磁北Z垂直

XTrueNorthZ垂直

我需要另一个引用资料,例如陀螺仪值而不是北,这些框架不能准确地提供我想要的东西。

为了实现我的目标,我使用下一个结构:

[motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical
toQueue:motionQueue
withHandler:
^(CMDeviceMotion* motion, NSError* error){
//get Euler angles and transform it to rotation matrix
}

你可能会问我,为什么我不使用内置的旋转矩阵?答案很简单。我需要制作某种自己的引用系,我可以通过放入修改后的角度值来制作它。

问题:

为了从欧拉角获得旋转矩阵,我们需要为每个角度创建矩阵,然后将它们相乘。对于 3D 情况,我们将为每个轴(其中 3 个)提供矩阵。之后我们将矩阵相乘。问题是输出取决于乘法的顺序。 XYZ 不等于 ZYX。 Wikipedia告诉我,有 12 种变体,但我不知道哪一种最适合 iOS 实现。我需要知道需要以什么顺序将它们相乘。另外,我需要知道哪些角度代表X、Y、Z。例如,X - 横滚,Y - 俯仰,Z - 偏航。

实际上,Apple 几年前就解决了这个问题,但我无法访问 .m 文件,而且我不知道哪种乘法顺序适合 iOS 设备。

类似问题已发布 here ,但从 that math example 订购解决方案中的内容对我不起作用。

最佳答案

关于:哪些角度与哪个轴相关。

看这个: link:https://developer.apple.com/documentation/coremotion/getting_processed_device-motion_data/understanding_reference_frames_and_device_attitude

enter image description here

关于旋转顺序用于计算旋转矩阵和欧拉角(Pitch、Roll、Yaw)

简短回答:ZXY 是 iOS 上的轮换顺序。

我也一直在寻找这个答案。累了。不知道为什么这没有记录在易于查找的地方。我决定收集经验数据并测试哪种轮换顺序与这些值最匹配。我的值(value)观如下。

<小时/>

方法论:

  1. 编写了一个小型 iPhone 应用程序来返回四元数值以及相应的俯仰角、横滚角、偏航角

  2. 根据不同旋转顺序(XYZ、XZY、YZX、YXZ、ZYX、ZXY)的四元数计算俯仰、滚动、偏航值

  3. 针对 iOS 设备运动报告的俯仰、偏航、滚转值计算出的 RMS 误差。确定误差最小的方向。

结果:

轮换顺序:ZYX 和 ZXY 都返回非常接近 iOS 报告值的值。然而,在每种情况下,ZXY 上的误差都比 ZXY 低约 46-597 倍。因此我相信 ZXY 是旋转顺序。

enter image description here

关于ios - iOS 设备的欧拉角到旋转矩阵手动转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40128906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com