这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » LEGO用轨迹传感器―― 一个扩充RCX输入口的尝试

共1条 1/1 1 跳转至

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

工程师
2011-03-15 14:34:06     打赏
LEGO用轨迹传感器―― 一个扩充RCX输入口的尝试
写于: 星期四 23 六月 @ 09:29:02
 
乐高(LEGO)机器人近来机器人比赛日渐普及,轨迹赛又是比赛的常规项目,使用LEGO器材参赛的十分普遍,但是RCX仅有三个输入口成了此项目的不小障碍。在此,我们作了一个尝试,为RCX设计了一个专用的轨迹传感器,使其只用一个输入即可实现复杂轨迹的监测,剩余两个输入口可以接其它传感器,以使项目设计得更具趣味性、挑战性。

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


摘要:
近来机器人比赛日渐普及,轨迹赛又是比赛的常规项目,使用LEGO器材参赛的十分普遍,但是RCX仅有三个输入口成了此项目的不小障碍。在此,我们作了一个尝试,为RCX设计了一个专用的轨迹传感器,使其只用一个输入即可实现复杂轨迹的监测,剩余两个输入口可以接其它传感器,以使项目设计得更具趣味性、挑战性。

关键词: RCX输入扩充,轨迹采样。

一、 背景

作为学习器材,LEGO器材应当是一种比较好的选择,但是也有其不足之处,RCX的输入口太少就是一个比较主要的缺陷。


对于复杂的应用项目,RCX的输入制约就十分明显。拿最典型的走轨迹项目来说,要完成“2003年大学生机器人赛的机器人游北京”或者“江苏首届大学生机器人赛的机器人游南京”项目,用一个RCX就很困难,因为项目中要检测许多交叉轨迹和支路、直角弯,至少需要3个光电传感器,同时还要检测是否到了指定的“景点”,三个输入口就有些“吃力”。

即使可以用三个光电传感器实现,已经用完了所有的输入,此时对于项目的设计者而言只能搞单纯的走轨迹,不能再添加一些有趣的、有挑战的任务,致使这种竞赛的观赏性、趣味性、挑战水平都会大打折扣。

另一方面,RCX的ROBOLAB软件设计偏重于功能,而非性能,它具备很多高级系统才具备的特征,如:多任务、事件监测、数据采集、直接任务执行、多机通讯等,远非一般自己制作、编写的单片机系统可比,但是这一切是以降低系统的实时性能为代价的,从其“100 Hz的采样速率”和“10ms 开/关一次电机”等技术参数就可见一斑。

100Hz的采样率对于很多应用是十分勉强的,走轨迹就是一例,如果小车行进的快一些,有可能漏掉一个支路或交叉。如果小车的纠偏处理过快,可能掠过了轨迹还以为没有回到轨迹上呢!这一切都是RCX在具体应用时可能遇到的困惑。

我认为,RCX的ROBOLAB更适合用于构成应用系统的主构架,相当于我们一般编程的主程序,而将一些实时性要求高的任务交由一些“外设”完成,相当于一般编程中的子程序或库函数。这些“外设”完成一些特定的任务,如轨迹的监测,将结果交给RCX处理。

二、设计目标及需求分析

基于上述想法,我们决定设计一个RCX用轨迹传感器。

设计目标是:

  • 用一个输入口完成复杂轨迹的监测,实现输入口的扩充;
  • 提高采样速率,弥补原来RCX使用ROBOLAB时采样率低的缺陷;
  • 为这类扩充应用提供一种方式。

要实现的功能:

  • 对轨迹进行采样,可靠的分析出传感器所安装的LEGO模型所处的位置;
  • 将结果以RCX兼容的模拟量形式输出;
  • 便于安装到用LEGO积木构建的模型上;
  • 便于RCX的编程使用。

要输出给RCX的位置状态有:

  • 在轨迹上;
  • 左或右部分偏离轨迹;
  • 左或右完全偏离轨迹;
  • 左侧或右侧有轨迹支路;
  • 双侧有轨迹支路(十字路);
  • 前面没有轨迹,两侧有轨迹支路(T字路);
  • 左或右直(锐)角弯。

三、具体设计
我们制作的轨迹传感器外形如下:

3.1 硬件设计
3.1.1 采样器设计

为了便于准确的判断出轨迹的情况,考虑用4个光电采样器对轨迹进行采样,4个采样器的布置如下:

图中1、2号采样器负责检测是否脱离轨迹,3、4号采样器负责检测轨迹的交叉。这样布置的要求是:

  • 1、2号采样器间距小于轨迹宽度,同时要平行;
  • 3、4号采样器间距要大于线宽1.5 - 2 倍,也要平行;
  • 同时,前后两组的采样平行线间距要小于轨迹宽度。

因为采样器主要目的是监测轨迹,所以在采样电路上作了一些处理,以减小环境光的干扰。
采样器的电路如下:

采样器解剖图:


采样器外形:

3.1.2 CPU的选择
根据设计目标,同时为了简化系统的硬件,缩小体积,便于封装在LEGO积木块中,选用了PHILIP的LPC917 单片机作为处理芯片。

LPC917 具有:

  • 4路AD输入;
  • 2路PWM输出;
  • 256字节RAM;
  • 2K字节FALSH ROM,支持ICP,更新程序十分方便;
  • FLASH ROM还支持IAP,可以作为备份数据存储;
  • 内置上电复位、RC振荡器,可实现零外部器件工作;
  • 2周期高速51内核,弥补了原来51系列单片机慢的缺陷;
  • 16脚小体积封装,只有5 X 6 mm ,便于缩小PCB。

之所以选择LPC900 系列单片机,首先是因为它是51系列单片机,51系列在国内是一个最普及的单片机品种,涉及51的资源最为丰富,选用51系列为使用者二次开发提供了方便。

其次是LPC900系列速度快,是原来标准51的6倍。

第三是LPC900系列均支持ICP方式编程,而使用USB的ICP下载线成本不高,零售价只有120元,这对于追求小体积而不得不使用表贴器件的用户来说,应该是个不错的选择。ICP方式相对于IAP更可靠一些。
程序下载示意图:

第四就是LPC900系列的品种比较齐全,对于单一功能性的应用均可以找到合适的规格,我们所选的917就是看中了其4路AD输入和2路PWM输出。

3.1.3 电路设计
因为RCX输入口的电源负载能力有限,为避免不可靠,轨迹传感器自供电,一方面减少了不确定因素,另一方面可以使用RCX的通用输入模式,增加输入的分辨率,RCX的通用输入数值范围为 0 - 1024 (10位AD)。

为了减小体积,采用了升压电路,将一节7号电池的电压升高到5V,作为传感器的电源。

所有的功能均由LPC917 完成,使用其4路AD输入将采样器的信号转换为数字值,经内部软件处理后,根据结果用PWM方式转换为模拟量输出给RCX。

因为系统的可靠性、速度要求不高,所以使用了LPC917的内部复位电路和内部的RC振荡器,工作频率为7.3MHz。CPU工作无外部器件。

处理部分的电路如下:

(点击放大)

电路中设计了一个电源及工作状态指示灯,用于指示传感器的工作状态。
为了实现对采样器的调试,设计了一个按键,控制进入和退出调试。
对于采样器,为了减小环境光的干扰,每路均增加了一个控制信号。
为了和RCX的输入匹配,做到无极性连接,输出经放大后接了全桥整流,虽然损失了一部分信号幅度,但是方便了使用。为减小幅度损失,全桥选用肖特基二极管组成。

处理部分解剖图:

处理部分外形:

3.2 软件设计
3.2.1 资源分配

  • 使用LPC917的4路AD输入对采样信号进行数值转换,工作在直接触发、单次扫描模式;
  • 使用Timer0 产生 1ms时基,控制采样和输出;
  • 使用Timer1 作为 PWM 输出,产生RCX所要的模拟信号;
  • 借用ICP的端口P0.5 作为进入调试模式的控制端。

3.2.2 程序实现的功能

  • 4路A/D采样;
  • 计算出模型在轨迹上的位置;
  • 输出模拟量结果;
  • 调试功能,实现轨迹判断值的建立以及光电采样器的安装调整;

3.2.3 程序架构

程序分为以下几个模块:
☆采样模块 ―― 实现每 1ms 对4路信号的AD转换一次,并根据判断域值换算为逻辑值保存,定义采样逻辑值为:
在轨迹上为“1”,不在轨迹上为“0”。

☆位置计算模块 ―― 根据转换后的4个采样器逻辑值计算出目前的位置信息,并转换为定义的模拟量。

输出模拟量定义如下:
输出的轨迹特征 内部的输出值 RCX的输入中值(判断值)

一共是11种状态,为了避免信息混乱,所有特殊的轨迹状态(判断值小于3,大于7的)均是在走过后输出,输出维持 100 ms ,以确保RCX能可靠获取。

对于偏离轨迹的判断,如果没有经过特殊轨迹,偏离后只会维持3或7 输出,必须纠偏后回到状态5,才继续判断其它状态。

☆判断值建立和采样器安装调试模块 ―― 为了建立轨迹和背景之间的判断值和变化方向,需要有一个调试状态,同时完成对采样器安装的调试。

进入调试状态借用 ICP 口中的P0.5,正常工作时P0.5 浮空(芯片内部上拉),为高电平,对地接一个按钮,按一下进入调试状态。在调试状态下,输出为采样器的实际值,可以通过RCX的VIEW功能对采样器的安装位置进行调试。

具体操作模式为:第一次按时,进入调试模式,输出1号采样值,可根据此值调试采样器安装位置,再按依次输出2、3、4号采样值,第五次按前将1、2号采样器置于轨迹上,3、4置于背景上(轨迹外),输出的是判断域值,此时再按下按钮将保存判断域值,并返回到工作模式,完成调试过程。

在上述过程中,电源指示的闪烁方式为:在调试1号时,闪一下,灭1秒;调试2号时,闪2下,灭1秒;依次到输出判断域值时,闪5下,灭1秒。回到正常工作时连续闪烁。

程序完成纪录轨迹及背景的采样值,计算出判断值以及变化方向,并写入FLASH中保存,不再次进入调试不会被修改。

采样在1ms 中断中完成,建立标志。主程序根据标志启动计算或调试模块,输出对应的结果。

四、使用方法

连接示意图:

ROBOLAB 程序:

以上程序只是一个示例,对于特殊轨迹没有处理,具体应用时可根据需求添加。

上述采样器的布置方案不是唯一的,可能有更好的模式,我们提供的只是一种思路,希望能起到抛砖引玉的作用。

五、扩展应用
上述模式也可用于其它的应用,如在青少年机器人足球项目中,用于对灰色渐变场地的监测,本采样器在LEGO 提供的练习纸上测试,最黑处约为180,最亮处约为 920,红灰测试块的灰色约为480。而用原配的光感,最黑处约为35,最亮处约为55,红灰测试块的灰色约为 44。


我没有在足球场地纸上试过,但根据这些数据可以初步推论:用于监测足球场地的灰度变化会比原来大有改善,而且,如果使用者有能力用C51编程的话,肯定会使足球水平大有提高。


如果将现在用于监测轨迹的反射采样器换为检测红外球的采样器,那么用在守门员或进攻机器人上,对找球将会有很大的好处,这样RCX可以专注于策略。而且,用LEGO参加足球赛的学校也可以体现出水平了,因为传感器的性能、功能可以根据自己的需要改变,而非统一提供的,大家指标差异有限。


用这种方式学习单片机编程也是一种选择,由于完成的功能单一,所以易于上手,易于看到效果,对学习者而言容易获得成就感。


这是我们的一个尝试,希望能对使用LEGO器材的朋友们有所帮助,如果有什么好的建议,请发邮件到 support@embedream.com

==============

非常感谢此文作者分享这么好的资料。在乐高机器人方便,这篇文章是ROBOTDIY开站快4年最好的文章。




关键词: 轨迹     传感器     一个     扩充     入口     尝试     使用     设计         

共1条 1/1 1 跳转至

回复

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