A-A+

GP2D12红外传感器校准实验与程序说明

2012年11月28日 robotics 暂无评论 阅读 34,732 次
摘要:

但通过实验发现,GP2D12的有效测量范围为8cm~45cm。并根据厂家提供的换算公式对AD读数进行换算((float) R = (1/ (A2D*m + b)) - k),发现计算所得到的距离值与实际值的误差较大。根据实验分析可得,计算距离与实际距离大致呈线性关系,可经过一个简单的比例+平移的计算来对二者进行拟合。

作者:TOP LIU(top1944@163.com)
ExBot易科机器人小组blog.exbot.net
青岛东海科技www.haivence.com
2010-10-22

Sharp PSD 传感器和传感器图表
图1 Sharp PSD 传感器和传感器图表(来源:[Sharp 2006])

        GP2D12红外传感器是机器人使用较多的一种红外测距传感器,如图1左所示。输出为模拟量,通常需要连接至8位的AD。GP2D12提供有8位AD的读数与测量距离的对应关系图(图1右)及换算公式。

换算公式及参数
m = 0.000417
b = -0.00151
m' = 2401   (1/m)
b' = -4     (b/m)
k' = 4      (int)k
(int) R = (m' / (A2D + b')) - k'
(float) R = (1/ (A2D*m + b)) - k

       但通过实验发现,GP2D12的有效测量范围为8cm~45cm。并根据厂家提供的换算公式对AD读数进行换算((float) R = (1/ (A2D*m + b)) - k),发现计算所得到的距离值与实际值的误差较大。如图2所示。而图3为计算距离值与实际距离值之间的对应关系,由图3分析可得,计算距离与实际距离大致呈线性关系,可经过一个简单的比例+平移的计算来对二者进行拟合,修正公式如下:

AD读数对应的计算距离和实际距离

图2  AD读数对应的计算距离和实际距离

计算距离值与实际距离值之间的对应关系

图3  计算距离值与实际距离值之间的对应关系

       修正距离值=SCALE*计算距离值(指按说明书的公式进行计算)+BIAS
SCALE为比例值
BIAS为偏移值
       通过任测在两点处的AD读数,便可通过下程序得到SCALE和BIAS(建议在10cm和45cm处进行测量,以得到全局最大的修正精度):

%MATLAB程序
%以下代码将AD_read替换为测量得到的AD读数可直接得到SCALE和BIAS
AD_read_1=126; %输入在10cm处AD读数
AD_read_2=31; %输入在45cm处AD读数
r_1=10; %建议在10cm和45cm处进行测量,以得到全局最大的修正精度
r_2=45; %建议在10cm和45cm处进行测量,以得到全局最大的修正精度
m=0.000416511;
b=-0.001505599;
k=4;
C_1 = (1/ (AD_read_1*m + b)) - k;
C_2 = (1/ (AD_read_2*m + b)) - k;
SCALE=(r_2-r_1)/(C_2-C_1)
BIAS=r_1-C_1*(r_2-r_1)/(C_2-C_1)

基于这个方法,每个传感器只需测试两点并校正一次,便可得到较高的精度,校正后的误差表如图4所示:
AD读数对应的计算距离和实际距离

图4 误差图

      由图4我们可以看到,经过简单的修正后,传感器误差大为降低,除个别值外误差可控制在±1cm以内。

另外一个问题:

       当实际距离低于6cm时会有另外一个问题。这些距离超出了传感器的测量范围,因而会导致比实际距离远的错误读数。更为严重的是,它并没有简单的解决办法。例如,可以连续地观察传感器的测量距离直到它接近了6cm。但是,从那时起便不知道障碍物是离得更近还是更远。最为安全的方法是安装机械传感器,这样,离障碍物的距离便不可能低于6cm,或者增加使用一个红外近距离传感器来检测最小距离范围内的障碍物。

附录 程序源代码

/********************************************************************
*                                                                
* SHARP GP2010红外测距传感器 *                   
*         ExBot易科机器人小组blog.exbot.net*
* 版本: V1.0 (2010/10/20)      *
* 作者: 刘锦涛@ExBot (top1944@163.com)
*
* 网站: www.haivence.com(东海科技) blog.exbot.net(ExBot机器人小组) *
*【版权】All Rights Reserved  *
*【声明】此程序可自由引用,但请注明版权和作者信息!            *
*                                                                  *
 *******************************************************************/
/*功能:将得到的红外传感器的8位AD读数,转换为距离值(cm)
 *函数原型:Distance_ultra_cm(unsigned char  measure,float SCALE, float BIAS )
 *输入:measure为8位AD测量值
 *      float SCALE为比例转换   我的实验值为0.52
 *      float BIAS为偏移        我的实验值为1.9
 *输出:距离值(cm)
 *计算公式为
 *在10cm处测得距离为M_10,在45cm测得距离为M_45;
 *则SCALE=(45-10)/(M_45-M_10)
 *  BIAS=10-M_10*SCALE=(45-10)/(M_45-M_10)
 *由AD读数转换为M_10的计算公式为:
 *R= (1/ ((float)AD_read*m + b)) - k;
  */
unsigned char Distance_ultra_cm(unsigned char measure,float SCALE, float BIAS )
{
float R;
float m=0.000416511;
float b=-0.001505599;
float k=4;
R= (1/ ((float)AD_read*m + b)) - k;
R=SCALE*R+BIAS;//校准
return (unsigned char)D;//float转为uchar类型返回
}

给我留言

Copyright © ExBot易科机器人实验室 保留所有权利.   Theme   Robin modified by poyoten

用户登录

分享到: