用Android手机测量汽车旋转



我发现了许多关于如何处理设备的旋转,方向与运动和位置传感器的线程。我想创建一个应用程序,我将使用在我的车,首先我想测量汽车的旋转程度。所以我把手机放在手机壳里,比如当我和车一起左转时,我希望在手机上看到车的转弯程度。

磁加速度计是否可行?

我发布了一个代码,首先我认为可以。(假设我将手机设置为纵向模式,而不是横向模式)

private static SensorManager sensorService;
//magnetic
private Sensor mSensor;
//accelerometer
private Sensor gSensor;
private float[] mValuesMagnet      = new float[3];
private float[] mValuesAccel       = new float[3];
private float[] mValuesOrientation = new float[3];
private float[] mRotationMatrix    = new float[9];

@Override
public void onCreate(Bundle savedInstanceState) {
nf.setMaximumFractionDigits(2);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorService = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
this.mSensor = sensorService.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
this.gSensor = sensorService.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorService.registerListener(this, gSensor, SensorManager.SENSOR_DELAY_NORMAL);
sensorService.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
@Override
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {           
case Sensor.TYPE_ACCELEROMETER: 
System.arraycopy(event.values, 0, mValuesAccel, 0, 3); 
break; 
case Sensor.TYPE_MAGNETIC_FIELD: 
System.arraycopy(event.values, 0, mValuesMagnet, 0, 3); 
break; 
}
SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet);
SensorManager.getOrientation(mRotationMatrix, mValuesOrientation); 
//        double azimuth = Math.toDegrees(mValuesOrientation[0]);    //azimuth,     rotation around the Z axis.
//        double pitch   = Math.toDegrees(mValuesOrientation[1]);    // pitch, rotation around the X axis.
double roll    = Math.toDegrees(mValuesOrientation[2]);    //roll, rotation around the Y axis.
//normalize
//        azimuth = azimuth>0?azimuth:azimuth+360;
roll = roll>0?roll:roll+360;

String txt = "roll= "+Math.round(roll);
((EditText)findViewById(R.id.szog)).setText(txt);
}

问题:-这个应用程序在汽车上的准确性有多高?(我怎么做才能更准确?)-当我把手机拿在"横向"模式时,我该怎么办?从方向滚动还可以吗?

请注意,这是第一次尝试,所以有很多事情要做!但首先我想看看我怎么才能做到

谢谢!

如果你把你的Android设备设置成一个指南针,那么就会有一个箭头总是指向磁北极。因此,通过测量箭头方向的变化,你可以测量汽车的旋转。

要更好地指示Android设备的方向,请使用传感器。类型_gravity和传感器。TYPE_MAGNETIC_FIELD,而不是Sensor。TYPE_ACCELEROMETER和Sensor.TYPE_MAGNETIC_FIELD。这更好,因为传感器。TYPE_GRAVITY试图过滤掉由于设备移动而产生的效果。

如果Android设备平躺在一个表面上,则磁北极的方向由SensorManager.getOrientation(...)出来的方位角定义。当它站着的时候,或者当它侧着的时候,它就有点复杂了。但是,我建议首先将设备平放,因为这是最简单的情况,然后您可以进展到更困难的情况。

最新更新