前言:
而今小伙伴们对“超声测距算法”大约比较关心,兄弟们都需要学习一些“超声测距算法”的相关文章。那么小编也在网摘上网罗了一些关于“超声测距算法””的相关知识,希望各位老铁们能喜欢,朋友们快快来学习一下吧!超声波测距有明显弱势,我们为什么还要坚持用它?市场上又不是只有这一种方式可以测距,为什么非用它不可?既然要用超声波测距,有什么好办法可以克服它的先天不足呢?
今天请来了历途电子研发部副主管,针对以上疑问给大家做深入解析。
为了测量机器人到玻璃面的距离以及识别障碍物边沿,需要使用一些测距模块,市场上比较常用的测距模块有以下两种:
一种是激光测距。这种模块的特点就是速度快、精确度高、测量距离远,但是如果在玻璃面上测量,就会导致有很大几率测不到反射回的激光。
另一种是超声波测距。这种模块速度较慢、精确度受环境影响,而且测量距离小于5米,但不受被测量面的材质限制。
根据以上模块的优缺点并结合实际作业环境,以及大量的实验数据得出:超声波在玻璃面上测距更具有可行性。
01
如何控制超声波测量精度
对于技术人员来说,超声波测距的原理大家应该都清楚,这里直接粘贴百度到的信息:
超声波测距原理是在超声波发射装置发出超声波,它的根据是接收器接到超声波时的时间差,超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。
用“HC-SR04”超声波测距模块举例,如下图:
VCC供电源5V,GND为地线,TRIG为触发控制信号输入,ECHO为回响信号输出。
基本性能如下:
声音在大气中的传播速度与温度和大气压力都有关系,所以在用超声波模块做高精度距离测量时,需要注意校准声速基准。
02
如何保证数据读取的稳定性
超声波测距导致数据不稳的几个原因:
1.测量面密度较低,超声波穿透物体,会有多个回波;
2.测量面凹凸不平,超声波被打散,同样会有多个回波;
3.测量面倾斜,超声波没有正确反射;
4.测量面过小,超声波反射回的量不够。
所以用超声波较准确的读取距离值、识别边沿还是有比较多的难度。
超声波的工作顺序分为以下几个步骤:
1.采用IO触发测距,给至少10us的高电平信号;
2.模块自动发送8个40khz的方波,自动检测是否有信号返回;
3.有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间;
4.测试距离=(高电平时间*声速(340M/S))/2。
具体示意图如下:
首先是发波,将代码设计为毎100ms测量一次,把测量周期设置改为每次测量一旦结束,马上开启下一次测量。
为保证测量准确,测量脉冲宽度要求在上升沿下降沿分别中断捕获定时器计数值,两者差值经过转化即可得到声音在空气传播的时间,进而获得距离值。
为了能够使用超声波检测边沿,我们需要得到比较稳定的数据,使用卡尔曼算法滤波就可以很好的解决这个难题。
卡尔曼滤波效果由滤波频率,噪声因子,偏差因子决定。我们把由卡尔曼滤波得到距离值打印出来,放入表格,生成波形图,如下:
分析,在测距模块不动作时,超声波值在±0.5mm内变动,稳定度不错。把本次减去上次的差值,也生成波形图,如下:
当测距模块远离或贴近障碍面时(模拟边沿),数据的增大或减小都比较稳定,根据这些数据编写出边沿识别算法。
经过多次调整卡尔曼和边沿识别算法的参数,在20mm-40mm边沿识别准确率在95%以上,在40mm以上的边沿识别准确率在99%以上,很好的保证了超声波测距时数据读取的稳定性。
标签: #超声测距算法 #为什么超声波模块怎么不能测距