首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android上的可靠传感器融合?

Android上的可靠传感器融合?
EN

Stack Overflow用户
提问于 2014-02-16 02:05:10
回答 2查看 5.6K关注 0票数 1

目前我正在开发一个增强现实应用程序,我正在用传感器进行实验。我尝试使用原始传感器数据,通过SensorManager或一个将加速度计+ magnetic_field与旋转矩阵相结合,但没有真正成功。

在阅读更多关于传感器融合的文章时,我在play商店中看到了一些应用程序,它们设法获得了具有俯仰和侧滚功能的罗盘功能,例如这个: 3D陀螺罗盘(https://play.google.com/store/apps/details?id=fi.finwe.gyrocompass&hl=de) -传感器融合代码是在LGPL下的,所以我决定试一试,但我的读数仍然很差,方向有些混乱,所以看起来他们做得更多了。

有没有解决android定位的方法,比如让我在一些指南针/ AR应用中使用它们?到目前为止,谷歌还没有向我展示任何有用的东西。

EN

回答 2

Stack Overflow用户

发布于 2014-03-03 09:37:59

据我所知,最适合在安卓系统上进行传感器融合的是TYPE_ROTATION_VECTOR。我在我的增强现实应用程序中使用它来定位。它是一个复合传感器,其输出是使用来自加速度、磁力计和陀螺仪的最佳可用数据自动生成的。假设只有RotationVector传感器,如果你想要更好的滚动-俯仰-方位角类型坐标而不是RotationVector输出,你可以这样做:

代码语言:javascript
复制
public void onSensorChanged(SensorEvent event) {
    float[] lastRotVal = new float[3];

    try{
        System.arraycopy(event.values, 0, lastRotVal, 0, event.values.length); 
    } catch (IllegalArgumentException e) {
        //Hardcode the size to handle a bug on Samsung devices running Android 4.3
        System.arraycopy(event.values, 0, lastRotVal, 0, 3); 
    }

    SensorManager.getRotationMatrixFromVector(rotation, lastRotVal);
    SensorManager.getOrientation(rotation, orientation);

    double pitch = orientation[1];
    double roll = orientation[2];
    double azimuth = orientation[3];

    //Use them for something!
}

如果希望支持不支持RotationVector的旧设备,可以使用TYPE_ORIENTATION传感器,该传感器在新的API版本中已被弃用。在这种情况下,您应该测试API版本,并在此基础上选择要使用的版本。

如果您想编写自己的自定义融合传感器,这当然是可能的。我想说的是,它不太可能击败这些人的健壮性,除非您自己对最佳实践进行个人研究。

票数 2
EN

Stack Overflow用户

发布于 2014-03-04 05:57:56

在最新版本的my GPSTest app on Github (master branch)中,我使用TYPE_ROTATION_VECTOR传感器来控制map camera (Android Maps API v2)的方向和倾斜。这具有“神奇相机”的效果(如this Google I/O talk中所述),因此当您将设备举在您面前时,您将看到基于您的方向的地图的第一人称视图,而当您放下设备时,它将转换为俯视视图(非常类似于AR应用程序)。在我看来,它有合理的性能。

请注意,您将需要重新映射坐标系以处理设备方向的更改(即纵向或横向),这可能是某些问题的根源。

有关在支持TYPE_ROTATION_VECTOR (Android2.3和更高版本)的设备上使用TYPE_ROTATION_VECTOR、在Android2.2和更低版本上使用TYPE_ORIENTATION、基于设备方向重新映射坐标系以及处理与SensorManager.getRotationMatrixFromVector()方法相关的特定于三星的错误的代码片段,请参阅this StackOverflow answer。完整的实现可以在GPSTest on Github (master branch)中看到。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21801493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档