目前我正在开发一个增强现实应用程序,我正在用传感器进行实验。我尝试使用原始传感器数据,通过SensorManager或一个将加速度计+ magnetic_field与旋转矩阵相结合,但没有真正成功。
在阅读更多关于传感器融合的文章时,我在play商店中看到了一些应用程序,它们设法获得了具有俯仰和侧滚功能的罗盘功能,例如这个: 3D陀螺罗盘(https://play.google.com/store/apps/details?id=fi.finwe.gyrocompass&hl=de) -传感器融合代码是在LGPL下的,所以我决定试一试,但我的读数仍然很差,方向有些混乱,所以看起来他们做得更多了。
有没有解决android定位的方法,比如让我在一些指南针/ AR应用中使用它们?到目前为止,谷歌还没有向我展示任何有用的东西。
发布于 2014-03-03 09:37:59
据我所知,最适合在安卓系统上进行传感器融合的是TYPE_ROTATION_VECTOR。我在我的增强现实应用程序中使用它来定位。它是一个复合传感器,其输出是使用来自加速度、磁力计和陀螺仪的最佳可用数据自动生成的。假设只有RotationVector传感器,如果你想要更好的滚动-俯仰-方位角类型坐标而不是RotationVector输出,你可以这样做:
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版本,并在此基础上选择要使用的版本。
如果您想编写自己的自定义融合传感器,这当然是可能的。我想说的是,它不太可能击败这些人的健壮性,除非您自己对最佳实践进行个人研究。
发布于 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)中看到。
https://stackoverflow.com/questions/21801493
复制相似问题