Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS设备的Euler角度到旋转矩阵手动转换 以下是问题的小背景和介绍:_Ios_Objective C_Transformation_Rotational Matrices_Euler Angles - Fatal编程技术网

iOS设备的Euler角度到旋转矩阵手动转换 以下是问题的小背景和介绍:

iOS设备的Euler角度到旋转矩阵手动转换 以下是问题的小背景和介绍:,ios,objective-c,transformation,rotational-matrices,euler-angles,Ios,Objective C,Transformation,Rotational Matrices,Euler Angles,我的基于运动和位置的iOS应用程序中有一些功能,它需要一个旋转矩阵作为输入。某些图形输出依赖于此矩阵。随着设备的每次移动,图形输出都会发生变化。这是代码的一部分,它使: [motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical toQueue:mot

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

[motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical
                                                   toQueue:motionQueue
                                               withHandler:
 ^(CMDeviceMotion* motion, NSError* error){
  //get and process matrix data
 }
在此结构中,只有4个框架可用:

XArbitraryZVertical

XArbitraryCorrectedZVertical

X磁学北零度

北零度角

我需要另一个参考,f.e.陀螺仪值,而不是North,这些帧不能提供我想要的

为了达到我的目标,我使用下一个结构:

[motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical
                                                   toQueue:motionQueue
                                               withHandler:
 ^(CMDeviceMotion* motion, NSError* error){
  //get Euler angles and transform it to rotation matrix
 }
你可能会问我,为什么我不使用内置旋转矩阵?答案很简单。我需要做一些自己的参考框架,我可以通过把修改后的角度值放进去来做

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

事实上,这个问题几年前就被苹果解决了,但我没有访问.m文件的权限,我也不知道iOS设备的乘法顺序是正确的


发布了类似的问题,但解决方案中的顺序对我不起作用。

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

见此:

关于旋转顺序用于计算旋转矩阵和欧拉角(俯仰、横滚、偏航)

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

我也一直在寻找这个答案。我累了。不确定为什么没有记录在易于查找的地方。我决定收集经验数据,并测试哪个旋转顺序与值最匹配。我的价值观如下


方法学:

  • 编写了一个小的iPhone应用程序来返回四元数值&相应的俯仰角、横摇角、偏航角

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

  • iOS设备运动报告的俯仰、偏航和横摇值的计算RMS误差。以最小的误差确定方向

  • 结果:

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


    我不是iOS开发人员(我根本不是开发人员!),但一点“谷歌搜索”就能说明这一点。由于四元数只有两种标准(而不是矩阵旋转的12种变体),但R矩阵和四元数之间存在对应关系,请尝试使用它而不是euler角。正如我所知,四元数是明确的。(是的,这似乎更像是一个数学答案,但是……如果你有关于四元数的问题,请随意提问。你确定吗?请检查我的问题: