據我所知,Android上用於傳感器融合的最佳方法是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版本並在此基礎上選擇要使用的版本。
如果你想編寫你自己的定製電容式傳感器,這當然是可能的。我想說,除非你自己對最佳實踐進行個人研究,否則不太可能擊敗這些傢伙的健壯性。