【问题标题】:Android rotation matrix for accelerometer transformation用于加速度计变换的 Android 旋转矩阵
【发布时间】:2016-02-28 00:48:34
【问题描述】:

如果我想将我的加速度值从手机坐标系转换到世界坐标系,我应该使用传感器管理器中的哪个旋转矩阵?此外,如果我将加速度计值乘以以下每个值,我实际上会得到什么结果?

开发文档中列出了很多:

  • TYPE_ROTATION_VECTOR
  • TYPE_GAME_ROTATION_VECTOR
  • TYPE_GEOMAGNETIC_ROTATION_VECTOR
  • TYPE_ORIENTATION
  • API 似乎还提供了 getRotationMatrix 方法,但我不确定这是上述方法的组合,还是完全不同的方法

我已经看到了一些关于这个的帖子(例如Acceleration from device's coordinate system into absolute coordinate system),但它们已经相当老了,我不确定从那以后是否有任何新的/更有用的东西被添加到了 android

【问题讨论】:

    标签: android accelerometer android-sensors coordinate-systems coordinate-transformation


    【解决方案1】:

    你需要得到Rotation Matrix,然后这个矩阵的乘积和onSensorChanged中的加速度计值会给你世界坐标系中的坐标。

    您可以在https://github.com/hoananguyen/dsensor 下载我的库,并在您的代码中调用DSensorManager.startDSensor(context, DSensor.TYPE_WORLD_ACCELEROMETER, listener)。当不再需要传感器时,请务必致电DSensorManager.stopDSensor

    【讨论】:

    • 在您的代码中,您能否指出您在哪里获取旋转矩阵并进行乘法运算?我想弄清楚如何在不依赖其他库的情况下自己实现这一点
    • 另外,旋转矩阵与我上面列出的其他矩阵有何不同?
    • 你上面列出的类型给你一个向量而不是一个矩阵。您可以从 SensorManager 类中的一些方法获取旋转矩阵。在我的代码中查看 DSensorProcessor 类中的 processDataWithRotationMatrix 方法。
    • 为了澄清,您使用SensorManager.getRotationMatrix() 将重力和磁场传感器值传递到其中。传入该方法的另外两件事是旋转矩阵 R 和矩阵 I。调用该方法会将旋转矩阵值存储到传入的矩阵 R 中?然后你用 R 乘以加速度计值?
    • 您是否对结果信号应用某种过滤器/平滑处理?因为我得到的东西非常粗糙,对设备的轻微移动很敏感
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多