寻寻
红红
外外
测测
距距
模模
块块
红红 外外 测测 距距 模模 块块
GG PP 22 DD 11 22 使使 用用 说说 明明 书书
V1.0 – 2008.3
用用
手手
册册
北京亿学通电子
北京海淀上地七街国际创业园2号院C座812
TEL: 86-10-62669059 E-mail:fae_61mcu@163.com http://www.61mcu.com
GP2D12红外测距传感器使用介绍
机器视觉中最接近人眼的莫过于摄像头了,可图像处理小车的“大脑”对付不了,至少
目前的“大脑”能力不够,等进化后也许能够应付。
为了能“看到”障碍物,小车目前能用的主要是各类测距传感器,典型的有超声波和红
外两种,此外还有利用光线的反射强弱来判断的,这种方式不具备“测距”功能,但可以判
断有无!因为不同物体表面及颜色反射的能力不同(看后面的数据)。
本文主要讨论的是机器人中最常用的红外测距传感器 —— GP2D12。
一、“看到”障碍物的眼睛 —— 红外测距传感器
首先认识一下:
之所以选择 GP2D12 红外测距传感器,理由如下:
首先是因为在机器人活动中(不包含工业机器人)这个传感器最常用,几乎每家国外的
第 1 页 共 14 页
创新实践 学以致用
机器人配件供应商都提供。使用 Google 英文版搜索一下“MiniSumo”,你将会发现 GP2D12
使用是多么普遍。
其二是因为它的测距范围和小车的“个头”及运动速度匹配,对于 10cm 见方、运动速
度 10 – 30cm/s 的小个头,能“看到”几米开外的东西意义不大,而 10 – 80cm 正是它
所要关注的范围。
GP2D12 的工作原理我理解为(仅供参考,欢迎指正):
它是由一个红外发射管和一个 PSD(Position Sensing Device 位置敏感检测装置)以及相
应的计算电路构成,Sharp 公司的 PSD 很有特色,它可以检测到光点落在它上面的微小位移,
分辨率达微米,GP2D12 正是利用这个特性实现了几何方式测距。
红外发射管发出的光束,遇到障碍物反射回来,落在 PSD 上,构成了一个等腰三角形,
借助于 PSD 可以测得三角形的底,而两个底角是固定的,由发射管确定,此时便可通过底边
推算出高,也就是我们所要的距离。如下图所示:
障碍物
此角度不变
此处即光束
的位置。
从图中可以看出,这是一个顶角极锐的等腰三角形,底边只有 2cm ,高却要有 10 –
红外发射管
PSD
80cm,所以 PSD 的分辨率必须极高,否则微小的偏差都会带来距离的巨大误差。从这一点
第 2 页 共 14 页
创新实践 学以致用
也可以得出,它的测距结果很难稳定、精确,毕竟比值太大。
因为 PSD 的尺寸有限,从图中就很容易理解为何它的测量距离超出范围后就不可能是有
效数据,连趋势都得不到。
从上述原理描述还可以知道,它不是连续测量,得到底边长度后,必须经过计算才能得
到距离值,然后转换为模拟信号输出。
这两个推论在那篇“Sharp GP2D12 applicationNote”(应用指南)有所印证,具体
表现为它测距的强指向性和输出的不确定性(噪音高达 200mV,相对于 2.4V 的满量程输出
而言达 5%)。 这篇文章好像是国外一个爱好者写的,他做了大量的测试,对使用者掌握
GP2D12 的性能及合理的使用它极有帮助。
此文二年前下载于 www.acroname.com (这是一个很不错的机器人网站),如果找
不到,可到 http://www.embedream.com/bbx/cgq/2007-05-10/4.html 下载。
Sharp GP2D12 的主要技术参数如下:(摘自上述应用指南)
Range 范围: 10 to 80cm
Update frequency / period 刷新频率/周期: 25Hz / 40ms
Direction of the measured distance 测距方向性: Very directional, due to the IR LED
Max admissible angle on flat surface 最大允许角度: > 40°
Power supply voltage 电源电压: 4.5 to 5.5V
Noise on the analog output 模拟输出噪音: < 200mV
Mean consumption 平均功耗: 35mA
Peak consumption 峰值功耗: about 200mA
第 3 页 共 14 页
创新实践 学以致用
总有人问 GP2D12 是否能用于某些场合?如果能仔细吃透上述指标,自然会有答案。
还有人问它与超声波传感器那个好,我想这些指标也会告诉你!
至于更详细的内容,读者可进一步阅读 GP2D12 的数据手册以及上面介绍的应用指南,
在此我就不再赘述。
二、GP2D12 的使用
从手册上可知,GP2D12 的输出为 0.4V – 2.4V 模拟信号,对应 80 – 10 cm 距离,
输出与距离间的关系成反比,且为非线性。
要使用它,首先必须具有 AD 转换,这点圆梦小车具备,且十分适合,因为圆梦小车的
MCU 供电电压为 3.3V,其内带的 AD 满量程也为 3.3V,对于 2.4V 的 GP2D12 输出信号,
利用率较高(如果 AD 是 5V 满量程,也许要考虑增加一级放大)。
而且小车使用 4 节充电电池供电,4 节串联为 4.8– 5V,正好满足 GP2D12 的 4.5-5.5V
供电要求(注意:千万不要使用普通电池供电,因为普通电池的电压为 1.5V,新的通常有 1.6V,
4 节串联将达 6.4V,有可能损坏 GP2D12!此外,普通电池的电压不稳定,内阻随使用逐渐
增大,导致静态时电压还凑合,电机一转小车就复位)。
圆梦小车设计时在底盘上预留了 GP2D12 的安装位置,并在扩展板上预留了 GP2D12
的接口,购买 GP2D12 时还提供了连线和插座,用户只需将插座焊在扩展板预留位置即可方
便使用。
第 4 页 共 14 页
创新实践 学以致用
此时,GP2D12 接入 STC12LE5412AD 的 P1.4 脚,即内部 AD 的第四通道。
在硬件上,没有太多的难度,但是要用好 GP2D12,软件上似乎要做些努力,必须解决
的有两个问题:
一是信号的线性化,因为输出与距离的关系是非线性的,为便于程序中使用距离信息,
必须将模拟信号转换为相应得距离值。
二是滤波,因为按照上述应用指南的测量分析,GP2D12 的输出噪声很大;此外,还由
于测量的非连续性,导致连续的距离变化对应的输出为阶跃信号,也需要通过滤波将其平滑。
2.1 线性化
关于线性化,开始时我也一筹莫展,曾想用折线近似实现,但尝试后觉得代码量太大,
而且需要做大量数据采集。
后来在 www.acroname.com 网站上(二年前),发现了一个极好的“东东” —— 一
个用 Excel 制作的电子表,表格的格式如下:
第 5 页 共 14 页
创新实践 学以致用
里面有作者根据 GP2D12 特性建立的数学模型(线性化公式),并预留的使用者输入参
数的地方,只需按其要求填入:
AD 的位数、AD 供电电压(满量程),并采集 8 点(10cm 间隔)GP2D12 的输出电压,
填入表中,它就可自动生成线性化公式的参数,提供了整形和浮点两种格式,还附有由此产
生的结果与实际的偏差表,并用生动的图形表示,十分直观、实用。
此表可在 www.embedream.com 的相关资料中下载,本该提供它的原始链接,无奈
现在没有了,只找到了一个类似的文档 — Sharp IR Range Finder Voltage-to-Range Conversion Article
其链接为:http://www.acroname.com/robotics/info/articles/irlinear/irlinear.html。内
容也是讨论线性化的,读者不妨一读。配合此文也许更容易理解使用那张 Excel 表格。
本文所附的示范程序就是根据上表的系数计算的,表中,由我确定的数据有:
Bits A2D (AD 转换的位数) —— 10
SupplyV (供电电压)
—— 3.30
以及 Caliberation Data (校验数据)中的 8 个电压值。
我所使用的是整形公式,需要三个参数:m’ 、 b’、k’
计算公式为:
(int)R(距离) = (m’/(A2D(AD 转换的结果)+ b’))- k’
程序中的处理十分简单:
// 线性化转换,得到距离值,其中 B_C 即 b’,M_C 即 m’,K_C 即 k’
uiResult = uiResult + B_C;
uiResult = M_C/uiResult - K_C;
// 得到距离值
第 6 页 共 14 页
根据上述公式及程序得到的结果如下:
创新实践 学以致用
GP2D12 不同颜色测距结果对比
距离 白纸
褐色木盒
cm
10
20
30
40
50
60
70
80
cm
9
20
30
40
50
63
68
77
cm
9
21
30
38
48
65
76
80
第一列为实际距离,第二列障碍物表面为白纸,第三列障碍物为褐色木盒,读者可比照
Excel 表中的数据,可以看出基本吻合。同时还可以从上面数据中看出,GP2D12 确实如其
手册中所说,基本不受障碍物的颜色影响。
还可以得出结论:用其作为精确的距离测量不妥!
第 7 页 共 14 页