The orientation sensor actually derives its readings from the real magnetometer and the accelerometer.

我想也许这是混乱的根源.文件中说明了哪些内容?更重要的是,文档在某处是否明确指出陀螺仪读数被忽略?据我所知,该视频中描述的方法是实现的:

该方法使用陀螺仪并整合读数.这几乎使得剩下的问题成为可能;不过我会尽力回答.

方向传感器已经为您整合了陀螺仪读数,这就是您如何获得方向.我不明白你为什么要这样做.

您没有正确地进行陀螺仪读数的整合,比CurrentOrientation = dR(这是不正确的)更复杂.如果您需要集成陀螺仪读数(我不明白为什么,SensorManager已经为您做了),请阅读Direction Cosine Matrix IMU: Theory如何正确执行(公式17).

不要尝试与欧拉角(也称为方位角,卷轴)集成,没有什么好的出现.

请在计算中使用四元数或旋转矩阵,而不是欧拉角.如果您使用旋转矩阵,您可以随时将其转换为欧拉角,参见

(对于四元数也是如此).(在非分解的情况下)有两种表示旋转的方式,即您将得到两个欧拉角.选择所需范围内的那个. (在gimbal lock的情况下,欧拉角度无限多,参见上面的PDF).只是承诺,在旋转矩阵到欧拉角度转换后,您的计算中不会再次使用欧拉角.

目前还不清楚您正在使用补充过滤器.您可以基于Direction Cosine Matrix IMU: Theory手稿实现一个非常好的传感器融合,这基本上是一个教程.这不是微不足道的,但我不认为你会发现一个比这个手稿更好,更容易理解的教程.

当我基于这个手稿实现传感器融合时,我必须发现自己的一件事是所谓的integral windup可以发生.我通过限制TotalCorrection来处理它(第27页).如果你实现这个传感器融合,你会明白我在说什么.

更新:在此,我回答您在接受答案后发表在评论中的问题.

I think the compass gives me my current orientation by using gravity and magnetic field,right? Is gyroscope used in the compass?

不,在罗盘中没有使用陀螺仪.

Could you please kindly explain why the integration done by me is wrong? I understand that if my phone’s pitch points up,euler angle fails. But any other things wrong with my integration?

有两个无关的事情:(i)整合应该是不同的,(ii)由于万向节锁,欧拉角是麻烦的.我重申,这两个是无关的.

对于集成:这里是一个简单的例子,你可以如何看到你的集成有什么问题.让x和y是房间里水平面的轴.在手中拿电话.将手机围绕x轴(房间)旋转45度,然后围绕y轴(房间)旋转45度.然后,从头开始重复这些步骤,但是现在首先围绕y轴旋转,然后围绕x轴旋转.手机的方向完全不一样.如果根据CurrentOrientation = dR进行整合,您将看到没有区别!请阅读上述链接的方向余弦矩阵IMU:理论手稿,如果您想要正确地进行整合.

对于欧拉角度:它们打破了应用程序的稳定性,这对我来说不足以在3D中进行任意旋转.

我仍然不明白你为什么试图自己做,为什么你不想使用平台提供的方向估计.有机会,你不能做得比那更好.

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐