源码下载地址:https://download.csdn.net/download/geduo_83/10901114
这篇文章写于2014年11月,当时公司要搞一个技术沙龙,所以我就写下了下面的这些文字,今天把它分享出来以示纪念。
1 项目背景 2
1.1 引经据典谈沙龙 2
1.2 立足现实谈数据 2
1.3 回归主题谈流程 2
2 陀螺仪 2
2.1 陀螺仪的概念和意义 2
2.2 反向推理分析 3
2.3 正向实现过程 3
2.4 相关算法 4
2.4.1 角速度公式 4
2.4.2 均值滤波器 4
2.4.3 矩阵乘法 4
2.5 左转、右转算法 4
2.6 X、Y、Z轴数据分析 4
2.7 画图提问 5
3 加速计 5
3.1 带着疑问采集数据得结论 5
3.2 通过实验反过来验证结论 5
3.3 X、Y、Z数据分析 5
3.4 提出问题测车机 5
3.5 同向、异向算法 5
3.6 计步器的讨论 6
4 总结 6
4.1 陀螺仪 6
4.2 加速计 6
5 讨论 6
5.1 问题 6
1 项目背景
1.1 引经据典谈沙龙
说到沙龙,我想到了公元365年,在中国历史所举办的,有史料记载的,最早的一次文学沙龙“兰亭诗会”,当时有会稽市(也就是浙江绍兴南亭这个地方,当时王羲之作为绍兴市市长)市长王羲之,谢安等41位军政高官参会,大家在一起吟诗作赋,把酒言欢,一时间,群贤毕至,少长咸集,虽无丝竹管弦之声,一觞一咏,亦足以畅叙幽情。彼时彼刻,正如此时此刻,在一千多年后的今天,我们大家欢聚一堂在九五智驾,今天我们不谈文学,不谈大数据、也不谈互联网哪些事儿,今天主要和大家来聊一聊陀螺仪在车联网中的应用。
1.2 立足现实谈数据
未来的时代是连接的时代,百度连接了人和信息,阿里巴巴连接了人和商品,腾讯连接了人和人,那么九五智驾连接了人和车,未来的时代是数据的时代,那么海量的数据挖掘工作已经是迫在眉睫,基于此,就诞生了今天我们所要讲到的,公司的一个研究性的项目,车辆驾驶行为数据采集系统,也就是通过手机陀螺仪采集数据,进行加工分析,来判断车辆的左转弯,右转弯,以及急加速,急减速的问题
1.3 回归主题谈流程
本次沙龙共分为三个部分,第一部分讲左转弯,右转弯,第二部分我们讲急加速,急减速,第三部分我进行归纳总结、提问讨论
当时接到这个项目压力也是相当的大,因为以前对这块也没有任何的了解和接触,陀螺仪是什么?能干这个事儿吗?带着这些疑问,我就问了下当时的度娘,度娘立即就回应了,给了我一张图片,大家请看,当时看了就有些晕
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 反向推理分析
大家想了,现在我们抛开陀螺仪,车辆的转弯大家都知道,画直线,转完了吗?没有,画转弯线,转弯了吗?转弯了,为什么?因为角度的变化对不对,那么我们只要知道了设备运动方位,然后根据前后两个方位角的角度差值和我们的参考值做对比是不是问题就解决了,比如说此时初始方位角是50度,结束方位角为90度,参考值为30度,那么90度键50度,得40度大于了30度我们我们就认为他就转弯了,那么现在我们只要通过陀螺仪计算出设备运动是的方位角问题就解决了
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.根据方位角之间的角度差就判断车辆转弯了
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,则左转弯了
2.6 X、Y、Z轴数据分析
x轴:右转弯(0-->π,-π-->0),左转弯(0-->-π,π-->0)
y轴:上坡(0-->-π/2),下坡(0-->π/2)
z轴:左侧翻(0-->π),右侧翻(0-->-π)
2.7 画图提问
右左左右
3 加速计
3.1 带着疑问采集数据得结论
加速度:单位时间类速度的变化率
为正则急加速,为负则急减速
加速度大说明单位时间里速度变化快,要么急加速,要么急减速了
如果设备运动方向和轴的方向一致,则正值为急加速,负值为急减速
如果设备运动方向和轴的方向不一致,则正值为急减速,负值为急加速
3.2 通过实验反过来验证结论
3.3 X、Y、Z数据分析
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
z轴:
α = α + 180
若α > 360 则 α - 360
3.6 计步器的讨论
位移:s=v*t+0.5*a*t*t
4 总结
4.1 陀螺仪
陀螺仪关键在计算方位角、分情况讨论左转弯,右转弯
4.2 加速计
加速度关键在于怎么判断车辆运动的方向和轴的方向
5 讨论
5.1 问题
通过手机传感器来测量车辆左转弯、右转弯、急加速、急减速行得通不?有没有前提条件?
通过分析我们不难得出结论:通过陀螺仪来测量车辆左转弯、右转弯,急加速、急减速是行不通的,因为手机放在车上,不可能将其固定不动放在一个位置之上。比如电话来了,用户很快的拿出手机接了电话,有急加速吗?有;有转弯吗?有;但是车辆转弯了吗?没有;车辆急加速了吗?没有。
源码下载地址:https://download.csdn.net/download/geduo_83/10901114
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流
var geduo_83 = {
nickName : "geduo_83",
site : "http://www.weibo.com/geduo83"
}