这段时间很多事要忙,所以耽搁了更新的工作,请大家见谅。接下来,我们应该来认识一下自平衡小车的关键部件——MPU6050传感器模块。这个模块俗称六轴陀螺仪(三轴加速度+三轴角速度)。当然,这个模块可能已经被人用烂了,可是我还是按照进度来科普一下,求大神们轻喷。 回归正题,按照上述说,这款传感器就是用来测量加速度和角速度的,在我们需要保持小车的平衡的时候很自然可以想象到小车会受到外力作用而总会有向前或者向后倒的倾向,而这个时候,我们就需要用这款传感器,来测量出我们究竟需要修正多少才能恢复到平衡状态。 首先,我们来说明一下加速度的测量。在这里我们需要用到就是矢量的分解和合成。在我们认知得到的现实世界里是三维的,所以我们可以把某点分解为X、Y、Z三个坐标系。当然,对于某一时刻的加速度也是可以分解为这三个方向上的分量。而MPU6050就能实时地测量这三个方向上的加速度,可以给我们计算提供参考数据。 实际上,我们可以简化一下这个模型。实际上,我们使用的时候是把该模块固定在小车底盘上的,所以Y轴是一直和底盘重叠的,所以我们可以将三维模型简化为二维模型(X、Z轴),如下图:
在这里,我们得巧用到一个充斥在我们生活的东西——重力。它总是垂直于水平面的,利用三角定理和矢量的分解、叠加原理,我们可以得到我们所想要的角度。因为a+b=90度,c+b=90度,所以a=c,再根据平行四边形法则,c=d。最后,我们再根据正弦定理,就可以可出我们想要角度。但是,因为我们是在单片机上运行的,很难进行余弦计算,查了一下网上大神们的说法,得到一张数据图,如下:
X轴为角度,范围为0~90度,由上面数据可以显示,在一定范围内(0~29度),正弦函数可以近似看成是线性的,这样可以大大地简化了我们的计算。为了使得测量范围更加大,我们可以加上一个系数0.92,此时模拟范围可以拓宽到45度。我们最终能得到一条计算公式:d=180*gx/(k*g*3.14),k为0.92,gx为我们从加速度计中读出的读数。在这里我们不得不说就是,因为这样的计算是会存在一个误差累积的,所以需要配合陀螺仪(角速度计)和相应的滤波算法才能确保尽量少的误差产生。(这些后面继续更新~~)
|