README.md

    陀螺仪在车辆网中的应用

    1 项目背景... 2

    2 陀螺仪... 2

    2.1 陀螺仪的概念和意义... 2

    2.2 反向推理分析... 2

    2.3 正向实现过程... 2

    2.4 相关算法... 3

    2.4.1 角速度公式... 3

    2.4.2 均值滤波器... 3

    2.4.3 矩阵乘法... 3

    2.5 左转、右转算法... 3

    2.6 XYZ轴数据分析... 4

    2.7 画图提问... 4

    3 加速计... 4

    3.1 带着疑问采集数据得结论... 4

    3.2 通过实验反过来验证结论... 4

    3.3 XYZ数据分析... 4

    3.4 提出问题测车机... 5

    3.5 同向、异向算法... 5

    3.6 计步器的讨论... 5

    4 总结... 5

    4.1 陀螺仪... 5

    4.2 加速计... 5

    5 讨论... 6

    5.1 问题... 6

     

     

     

    1 项目背景

    2 陀螺仪

    2.1 陀螺仪的概念和意义

    传感器分类:感知环境的、感知距离的、感知运动的、感知方位的
    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

    2.2 反向推理分析

    SensorManager.getOrientation(currentRotationMatrixCalibrated,gyroscopeOrientationCalibrated);
    SensorManager.getRotationMatrixFromVector(deltaRotationMatrixCalibrated, deltaRotationVectorCalibrated);
    SensorManager.getRotationMatrix(initialRotationMatrix, null, acceleration, magnetic);

    2.3 正向实现过程

    1.通过加速计和磁强计初始化了一个旋转矩阵
    2.
    通过矩阵乘法对初始化的旋转矩阵进行数据校对
    3.
    通过陀螺仪传感器得到三个轴的角速度分量
    4.
    根据三轴分量计算角速度
    5.
    根据角速度和时间求方位角
    6.
    根据方位角求正弦、余弦
    7.
    根据正弦、余弦求旋转向量四元素
    8.
    根据旋转向量四元素求旋转矩阵
    9.
    根据旋转矩阵和初始旋转矩阵通过矩阵乘法得到一个校准的旋转矩阵
    10.
    根据旋转矩阵就得到了方位角
    11.
    将方位角的弧度角转化为角度
    12.
    根据方位角之间的角度差就判断车辆转弯了

    2.4 相关算法

    2.4.1 角速度公式

    x*x + y*y + z*z = a*a

    2.4.2 均值滤波器

    a = (x + y + z)/3

    2.4.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;
      }

    2.5 左转、右转算法

    α:初始方位角
    β:
    结束方位角
    γ:
    参考角(常量)
    Θ:
    中间角

    0<α<90 &&270<β<360&&360-β+α>45,则左转弯了
    270<α<360 &&0<β<90&&360-α+β>45,则右转弯了
    β-α>45,则右转弯了
    β-α<-45,则左转弯了

    =============================================

    1.0<α<90 &&90<β<1801,2象限)
    1α<Θ<β&&β-α>γ:右转弯
    20<Θ<α::左转弯
    3β<Θ<360:左转弯

    2.0<α<90 &&270<β<3601,4象限)
    1α<Θ<β:右转弯
    20<Θ<α&&α+360-β>γ:左转弯
    3β<Θ<360&&α+360-β>γ:左转弯

    2.6 XYZ轴数据分析

    x轴:右转弯(0-->π-π-->0,左转弯(0-->-π,π-->0
    y
    轴:上坡(0-->-π/2),下坡(0-->π/2)
    z
    轴:左侧翻(0-->π),右侧翻(0-->-π)

    2.7 画图提问

    右左左右

    3 加速计

    3.1 带着疑问采集数据得结论

    加速度:单位时间类速度的变化率
    为正则急加速,为负则急减速
    加速度大说明单位时间里速度变化快,要么急加速,要么急减速了
    如果设备运动方向和轴的方向一致,则正值为急加速,负值为急减速
    如果设备运动方向和轴的方向不一致,则正值为急减速,负值为急加速

    3.2 通过实验反过来验证结论

    3.3 XYZ数据分析

    x轴:水平方向,向右为正方向
    y
    轴:垂直方向,向上为正方向
    z
    轴:垂直于手机屏幕,屏幕的正前方为正方向

    3.4 提出问题测车机

    设备的运动方向和轴的方向是否一致
    设备的运动方向怎么取,轴的方向怎么取

    3.5 同向、异向算法

    α:手机方位角
    β:
    车机方位角

    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

    3.6 计步器的讨论

    位移:s=v*t+0.5*a*t*t

    4 总结

    4.1 陀螺仪

    陀螺仪关键在计算方位角计算
    分情况讨论左转弯,右转弯16*3=48

    4.2 加速计

    加速度计关键在于怎么判断车辆运动的方向和轴的方向的一致性

    5 讨论

    5.1 问题

    通过手机传感器来测量车辆左转弯、右转弯、急加速、急减速行得通不?有没有前提条件?

     

     

    项目简介

    传感器分类:感知环境的、感知距离的、感知运动的、感知方位的

    发行版本

    当前项目没有发行版本

    贡献者 1

    门心叼龙 @geduo_83

    开发语言

    • Java 100.0 %