传感器分类:感知环境的、感知距离的、感知运动的、感知方位的
1 方向传感器:Sensor.TYPE_ORIENTATION
2 加速度传感器:Sensor.TYPE_ACCELEROMETER
3 线性加速度传感器:Sensor.TYPE_LINEAR_ACCELERATION
4 光传感器:Sensor.TYPE_LIGHT
5 磁场传感器:Sensor.TYPE_MAGNETIC_FIELD
6 距离传感器:Sensor.TYPE_PROXIMITY
7 温度传感器:Sensor.TYPE_TEMPERATURE
8 旋转向量传感器:Sensor.TYPE_ROTATION_VECTOR
9 角速度传感器:Sensor.TYPE_GYROSCOPE//gyroscope
10 重力传感器:Sensor.TYPE_GRAVITY
11 压力传感器:Sensor.TYPE_PRESSURE
SensorManager.getOrientation(currentRotationMatrixCalibrated,gyroscopeOrientationCalibrated);
SensorManager.getRotationMatrixFromVector(deltaRotationMatrixCalibrated, deltaRotationVectorCalibrated);
SensorManager.getRotationMatrix(initialRotationMatrix,
null, acceleration, magnetic);
1.通过加速计和磁强计初始化了一个旋转矩阵
2.通过矩阵乘法对初始化的旋转矩阵进行数据校对
3.通过陀螺仪传感器得到三个轴的角速度分量
4.根据三轴分量计算角速度
5.根据角速度和时间求方位角
6.根据方位角求正弦、余弦
7.根据正弦、余弦求旋转向量四元素
8.根据旋转向量四元素求旋转矩阵
9.根据旋转矩阵和初始旋转矩阵通过矩阵乘法得到一个校准的旋转矩阵
10.根据旋转矩阵就得到了方位角
11.将方位角的弧度角转化为角度
12.根据方位角之间的角度差就判断车辆转弯了
x*x + y*y + z*z = a*a
a = (x + y + z)/3
private float[] matrixMultiplication(float[]
a, float[] b) {
float[]
result = new float[9];
result[0] =
a[0] * b[0] + a[1] * b[3] + a[2] * b[6];
result[1] =
a[0] * b[1] + a[1] * b[4] + a[2] * b[7];
result[2] =
a[0] * b[2] + a[1] * b[5] + a[2] * b[8];
result[3] =
a[3] * b[0] + a[4] * b[3] + a[5] * b[6];
result[4] =
a[3] * b[1] + a[4] * b[4] + a[5] * b[7];
result[5] =
a[3] * b[2] + a[4] * b[5] + a[5] * b[8];
result[6] =
a[6] * b[0] + a[7] * b[3] + a[8] * b[6];
result[7] =
a[6] * b[1] + a[7] * b[4] + a[8] * b[7];
result[8] =
a[6] * b[2] + a[7] * b[5] + a[8] * b[8];
return
result;
}
α:初始方位角
β:结束方位角
γ:参考角(常量)
Θ:中间角
若0<α<90
&&270<β<360&&360-β+α>45,则左转弯了
若270<α<360
&&0<β<90&&360-α+β>45,则右转弯了
若β-α>45,则右转弯了
若β-α<-45,则左转弯了
=============================================
1.0<α<90 &&90<β<180(1,2象限)
(1)α<Θ<β&&β-α>γ:右转弯
(2)0<Θ<α::左转弯
(3)β<Θ<360:左转弯
2.0<α<90 &&270<β<360(1,4象限)
(1)α<Θ<β:右转弯
(2)0<Θ<α&&α+360-β>γ:左转弯
(3)β<Θ<360&&α+360-β>γ:左转弯
2.6 X、Y、Z轴数据分析
x轴:右转弯(0-->π,-π-->0),左转弯(0-->-π,π-->0)
y轴:上坡(0-->-π/2),下坡(0-->π/2)
z轴:左侧翻(0-->π),右侧翻(0-->-π)
右左左右
加速度:单位时间类速度的变化率
为正则急加速,为负则急减速
加速度大说明单位时间里速度变化快,要么急加速,要么急减速了
如果设备运动方向和轴的方向一致,则正值为急加速,负值为急减速
如果设备运动方向和轴的方向不一致,则正值为急减速,负值为急加速
3.3 X、Y、Z数据分析
x轴:水平方向,向右为正方向
y轴:垂直方向,向上为正方向
z轴:垂直于手机屏幕,屏幕的正前方为正方向
3.4 提出问题测车机
设备的运动方向和轴的方向是否一致
设备的运动方向怎么取,轴的方向怎么取
α:手机方位角
β:车机方位角
y轴:
若0<=α<=90,则0 < β
< α + 90 || α+270 <= β <=360
若270<=α<360,则0 < β
< α - 270 || α - 90 < β < 360
若90<=α<=270,则α-90 <
β < α + 90
x轴:
α = α + 90
若α > 360 则 α -
360(α%360)
z轴:
α = α + 180
若α > 360 则 α - 360(α%360)
位移:s=v*t+0.5*a*t*t
陀螺仪关键在计算方位角计算
分情况讨论左转弯,右转弯16*3=48
加速度计关键在于怎么判断车辆运动的方向和轴的方向的一致性
通过手机传感器来测量车辆左转弯、右转弯、急加速、急减速行得通不?有没有前提条件?