这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » GP2D12 在机器人足球中的应用-再谈如何在RCX上使用测距传感器

共1条 1/1 1 跳转至

GP2D12 在机器人足球中的应用-再谈如何在RCX上使用测距传感器

工程师
2011-03-15 14:34:06     打赏
GP2D12 在机器人足球中的应用-再谈如何在RCX上使用测距传感器
写于: 星期一 11 七月 @ 00:02:11
 
乐高(LEGO)机器人GP2D12是一个在机器人活动中使用较普遍的测距传感器,LEGO器材恰恰缺少测距传感器,但RCX直接使用有点困难,使用以前所介绍的方法,性能上有些欠缺。在此,我以足球守门员的应用为例,介绍一种新的在RCX上使用GP2D12的方法。

GP2D12 在机器人足球中的应用
―― 再谈如何在RCX上使用测距传感器

摘要:
GP2D12是一个在机器人活动中使用较普遍的测距传感器,LEGO器材恰恰缺少测距传感器,但RCX直接使用有点困难,使用以前所介绍的方法,性能上有些欠缺。在此,我以足球守门员的应用为例,介绍一种新的在RCX上使用GP2D12的方法。

关键词:测距,GP2D12,机器人足球,守门员

一、 背景
论坛中已有文介绍了“如何在RCX上安装、使用GP2D12 测距传感器”,从文中可以看出,按其介绍的使用方法,采样率只有4 Hz左右,因为需要占用250 ms 给电容充电,这样设计的优点是不用外部电源,但损失了采样速度,本来GP2D12 的测量速度就只有40Hz,对于运动检测已经有些勉强,再降低则限制了其应用。

为此,我决定采用外部电源为GP2D12供电,以提高采样率。开始使用的是9V充电电池,用7805 降压供电,后考虑9V充电电池难于采购,改用一节7号电池升压供电。

但在使用RCX获取GP2D12的输出时,发现数据波动较大,在仔细阅读了GP2D12的应用指南(Application Note,见附件)后得知,GP2D12的输出是非连续的,每40 ms输出一个数据,在运动时输出为阶跃信号;而且在这40ms期间,输出的噪声也比较大。

为此,考虑借用轨迹传感器的处理部分,对GP2D12 的输出进行滤波、线性化后送给RCX。还是这个思路:让RCX做适合的事。滤波要求实时性较高,而且要占用比较多的内存(我使用了40个字节),使用RoboLAB是难以实现的。

二、 设计及实现
考虑到没有具体的需求难于说明测距的应用,所以选用机器人足球的守门员作为应用对象。
在目前的青少年机器人足球赛中,参赛方通常都设置一个守门员,而按规则守门员必须不断运动,但是由于机械结构和电机的精度差异,守门员不可能保证来回重复运动,所以经常出现守门员在远离球门区处“晃荡” 。
根据球门区和两侧的距离差,使用测距传感器可以检测守门员的位置,从而保证守门员不至于走出球门区,同时配合返回的距离值和走动的方向,可以判断是否走偏,以便及时纠正,使用这个方案就可以用与进攻机器人同样的结构,不必搭建成只会走直线的守门员了。

2.1 设计目标

  • 实现滤波,增加数据的稳定、可靠性;
  • 实现线性化,直接输出距离值,减少RCX的处理负担;
  • 根据判断值给出位置信号,使RCX可以用事件方式获取位置信息,提高效率。

2.2 具体实现
从“LEGO用轨迹传感器”一文中可以得知,处理部分的采样器输入端实际上就是4个模拟量输入口,接入LPC917 的4路AD,最大输入为3.0 V。
而GP2D12的输出恰好为0.4 ― 2.4 V的模拟信号,所以直接将GP2D12 接到原来采样器的输入口即可,原来的采样器供电电压也是5V,与GP2D12 相同。

传感器实物:

GP2D12 的封装示意图

余下的工作是按照需求编写相应的软件。

软件的编写主要考虑两个方面,一是滤波问题,二是线性化问题

滤波的主要设计依据是应用指南(Application Note,见附件),此文详细的分析了GP2D12 的工作原理,以及实际的性能,给出各种试验数据,有很好的参考价值。此文从网上下载,我忘了取自那个网站。

我采用的滤波方法为1ms 采样一次,取连续的40次平均值作为计算距离的数据,这个方式的主要目的是为了消除噪声,同时也平滑了阶跃,我认为这样处理阶跃比较合理,因为此时GP2D12 前次计算的结果权值是逐渐降低的,而非一次性“作废”。但是否正确,有待大家评判。

线性化问题比较简单,因为网上有人已经作了很细致的工作,我使用的是从Acroname 网站上下载的计算表(gp2d12_cal.xls ,见附件),此表做的十分精细,使用很方便,只需键入所用的AD位数、电压,并输入8个距离下的GP2D12 输出值,表中自动会计算出线性化的计算系数。

在判断位置处理上,考虑到GP2D12 在10 ― 35cm 这个范围测量比较准确,所以将球门的判断位置设置为 20 cm (可以通过调整传感器装在模型上的位置满足此要求), 为防止在进出球门区的边界上出现“抖动”,程序设置了判断回差,类似于电子线路中的“施密特触发器”。

在进出球门区的瞬间,输出100ms的位置信号,告知RCX目前的位置变化。平时输出实际的距离值。
输出的定义为:
RCX 输入值:300 ― 800(约) 对应10 ― 80 cm;
RCX 输入值:小于 100 ,走出球门区;
RCX 输入值:大于 900 ,走入球门区;

因为没有获取运动方向,所以无法给出是在哪一侧位置。RCX可以根据自己的控制状态知道。
实际上,因为处理部分还余下3个输入,用一个输入接上“LEGO用轨迹传感器”中的采样器,在LEGO模型上加装一个从动轮,并在此轮轴上安装一个检测环,环上由“黑、灰、白”三色,用采样器对此环采样,即可获取运动的方向和距离,配合距离传感器的值,就可以得出在球门左或右侧的信息,同时还可以得到是否走偏的信息。

RCX侧的应用程序在此就不在赘述了,与LEGO轨迹传感器类似,根据自己的需求,结合原来的守门程序,我想一定比我做的好。

三、总结
连续两个应用实际上原理相近,都是使用单片机对特定的信号进行处理,给出所需的结果,实际上这是一个趋势,因为单片机已十分便宜,而且正在向简单、易用方面发展,零外部器件就是一个典型的特征,为这种单一功能应用提供了很好的基础。目前足球赛中所用的指南针传感器就是用一片PIC单片机实现数据处理和模拟量输出的。

也许有人觉得难于上手,其实现在使用单片机已很方便,用C语言编程,基本不涉及硬件,只需开始时初始化好硬件即可,有些单片机还提供了很方便的初始化硬件工具,如:沈阳新华龙供应的51F系列、南京万利提供的ST3200系列。

我这两个应用就是用C51实现的,没有使用一句汇编,我将测距的程序附在后面,大家可以看一下,没有接触过单片机的可以有个感性认识。从改别人的程序开始,逐步过渡到自己构建框架、编写程序,最后再自己设计、制作硬件,独立完成一个项目。

有意实践者可以与我们联系:support@embedream.com

附件:
1、 GP2D12 应用指南
2、 GP2D12_CAL.XLS
3、 程序:
Constant.h 常数定义
Port_def.h 输入输出口定义
Reg_917.h LPC 917 寄存器定义
Stru_var.h 变量定义
Main2D12.C 程序
注:因为是在LEGO用轨迹传感器程序基础上改的,所以有些无用的内容。

程序下载!

感谢原作者与大家一起分享好文章,另一篇好文章:

LEGO用轨迹传感器―― 一个扩充RCX输入口的尝试




关键词: GP2D12     机器人     足球     中的     应用     再谈     何在    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]