相扑机器人实验指导书
发布时间:2024-10-30
发布时间:2024-10-30
实验一 相扑机器人的认知
一.实验目的
1. 了解相扑机器人的基本构成及原理
2. 熟悉和掌握机器人软件之一PBASIC语言下的BASIC STAMP编译软件 二.实验要求
通过组装机器人使学生能了解机器人学基本原理、运动基础以及相关扩展功能,并熟悉和掌握BASIC STAMP编译软件的原理和方法 三.实验设备
相扑机器人教学套件箱(内含小尖嘴钳、小号螺丝刀) 四.实验内容
1.组装相扑机器人 1) 安装电池盒
所需配件:
电池盒
2颗4/40 3/8”平头螺钉 2颗4/40螺母 SumoBot底盘 2) 安装伺服电机 所需配件:
Parallax连续旋转伺服电机 8颗4/40 3/8”盘头螺钉 8颗4/40螺母 SumoBot底盘
3) 安装SumoBot PCB后面支柱 所需配件:
2根5/8”支柱
2颗4/40 3/8”盘头螺钉 SumoBot底盘
4) 安装SumoBot PCB前面支柱 所需配件:
2根5/8”支柱
2颗4/40 1”盘头螺钉 SumoBot底盘 5) 装配PCB面板
所需配件:
SumoBot PCB
2颗4/40 3/8”盘头螺钉 2颗1-1/4”支柱 2个垫片
SumoBot底盘 6) 安装车轮 所需配件:
安装好的车轮
黑色小螺钉(随伺服电机) SumoBot底盘 7) 安装铲子 所需配件:
SumoBot铲子
2颗4/40 1/4”盘头螺钉 2颗4/40螺母 SumoBot底盘 8) 安装QTI传感器电线 所需配件:
2根10” 3-pin延长线
SumoBot底盘 9) 安装QTI传感器 所需配件:
2个QTI传感器
2颗4/40 1/4”盘头螺钉 SumoBot底盘
10) 连线
X7=左边伺服电机 X6=右边伺服电机 X5=左边QTI传感器 X4=右边QTI 传感器
将电池盒线连接至X1,其中白线连接到 +端。
教学底板上有一个三位开关,见下图。
“0”位:关断教学底板电源 “1”位:教学底板上电
“2”位:教学底板和伺服电机一同上电 2.学习使用BASIC STAMP软件 1)通讯测试
为了确认BASIC Stamp模块与你的计算机通讯正常,点击“Run”菜单项,选择“Identify”。 这时,会出现一个下图所示的窗口,样例显示系统在COM2端口检测到BASIC Stamp 2 。
这就意味着你的计算机与BASIC Stamp模块通讯是正常的。 2) 编写Hello程序
' {$STAMP BS2} ' {$PBASIC 2.5}
DEBUG "Hello, this is a message from your sumobot." END
第一条指令是“Stamp”指令,它告诉BASIC Stamp编辑器你将下载程序到BASIC Stamp 第二条指令是“PBASIC”指令,它告诉BASIC Stamp编辑器你使用的是2.5版本的PBASIC 编程语言。这两条消息语句叫做编译器指令,以后所有的程序都要用到这两句指令。 END
在程序运行结束之后,这个命令把BASIC Stamp模块置于低功耗模式,所以这个命令比 较简便。在低功耗模式下,BASIC Stamp模块等待复位键按下(或释放)或有新的程序通过 编辑器下载。如果板上的复位键被按下,BASIC Stamp模块将再运行一次已加载的程序;如 果新程序被加载进来,旧程序会被擦除,并且开始运行新程序。
“DEBUG”
就是让BASIC Stamp发送到调试终端的信息以某种特定方式显示的指令。“DEC”就是一个格式词,告诉调试终端显示十进制数值。“CR”是一个向调试终端发送回车命令的控制符。控制符“CR”之后的文本或数值会显示在原有文本的下一行。你可以修改你的程序使它包含更多的格式词或控制符的调试命令。 五.思考题
1.机器人的定义和基本组成是什么? 2.什么是嵌入式系统?
实验二 相扑机器人伺服电机的控制
一.实验目的
1. 了解Parallax微型伺服电机的基本构成及原理 2. 学会搭建LED测试电路,掌握扬声器的使用 3. 完成伺服电机的调零,学会调整、测试电机 二.实验要求
通过连接、调整和测试相扑机器人的伺服电机,以及LED测试电路的搭建使学生能够基本掌握对伺服电机的控制。 三.实验内容 1. 伺服电机简介
本次实验所用的机器人采用的是Parallax公司的连续旋转伺服电机
伺服电机主要有三根线,分别为:黑、红、白,其中红色的为电源线(最大为6V直流电压);黑色为地线;白色的为控制信号线(一般输入周期为23ms左右的脉冲序列),通过对这信号线输入脉冲序列来控制电机的运动,可以控制电机的运动速度,运动方向)。所有电机使用前必须进行零位校正。
控制伺服电机速度和方向涉及如何让BASIC Stamp微控制器不断发送相同命令给电机。 该命令通常以每秒50次的频率重复发送到伺服电机以维持其速度和方向
PAUSE命令: 让BASIC Stamp微控制器在执行下一条命令之前先等待一段 时间。
PAUSE Duration
Duration 是PAUSE命令的参数,它的值告诉BASIC Stamp移到下一条命令之前要等待 多久。Duration的单位是千分之一秒。假如你想延时1秒,可以给Duration赋值为1000 重复执行指令。
DO…… LOOP: 要重复执行某个动作可以调用DO LOOP,例如,如果你想每隔一秒打印一条信息,按如下方式将DEBUG和PAUSE命令放在“DO LOOP”之间即可: DO
DEBUG "Hello!", CR
PAUSE 1000 LOOP
2. LED测试电路的搭建 搭建电路如下图所示。
1) 确认发光二极管的短针脚(阴极)插入标有Vss的黑色插孔中。 2) 确认发光二极管的长针脚(阳极)插入白色面包板上图示的位置。
编程控制LED测试电路
HIGH和LOW:使BASIC Stamp把LED与Vdd和Vss交替连接
PULSOUT:伺服电机根据信号的高电平持续时间的长短作为向什么方向转动的指示。对于精确的伺服电机控制而言,信号的高电平持续的时间要求比HIGH命令和PAUSE命令的时间值要精确的多。你只能每次以1ms为单位改变PAUSE命令参数Duration 的取值。有一条不同的命令PULSOUT,能把高电平细分成更高的时间精度。参数Duration的计量单位是百万分之2秒(即2微秒)。
PULSOUT Pin, Duration
要求学生编程控制P13灯先亮5秒然后熄灭1秒转为P12灯亮4秒 循环。 3. 伺服电机调零
运行一个程序,发送一个脉冲信号到伺服电机,让电机保持静止。由于伺服电机在工厂没有预先调整,它们在接收到该信号时将转动。可以用螺丝刀调节伺服电机让其保持静止。这就是伺服电机调零。调节之后,须测试伺服电机,验证其功能是否正常。测试程序将发送信号让伺服电机顺时针和逆时针以不同的速度旋转。
1) 发送零点标定信号
下图显示的信号是发送到与P12连接的伺服电机的校准信号,称为零点标定信号。伺 服电机调节好之后,这个信号就可以指示电机保持静止。这个指令是由时间间隔为20 ms 的 脉宽为1.5 ms的一系列脉冲组成
PULSOUT命令参数Pin值的计算:I/O管脚是P12,那么Pin的值就是12。下面计算脉宽为1.5 ms时PULSOUT命令的参数Duration的取值。1.5 ms即0.0015 秒。前面讲过,无论PULSOUT命令的参数Duration的值是多少,都要乘以2 μs,这样就可以计算出脉冲将持续多长时间。公式:
2) 如何保存值并计数
本任务介绍在PBASIC 程序中用于保存数值的变量。后面的机器人程序很大程度上依赖这些变量。能保存数值最主要的意义是程序能用这些变量来计数。一旦你的程序能计数,它就不但能控制也能记录某件事件发生的次数。
PBASIC语言在使用变量之前,要先给出它的名字(variableName)和大小(Size)。这叫声明一个变量:
variableName VAR Size
在声明变量之后,你也可以对它初始化,即给它一个初始值(或起始值)。 value = 500
在“value = 500”中,符号“=”是个运算符。 其中Word:0~65535
Byte:0~255 Nib:0~15 Bit:0~1
3) 计数并控制循环次数
最方便的控制一段代码执行次数的方法是利用FOR NEXT循环,语法如下: FOR Counter = StartValue TO EndValue {STEP StepValue} NEXT 三个点” ”表示你可以在FOR 和NEXT之间放一个或多个的命令。确保要先声明一个变量参数Counter。参数StartValue 和EndValue可以是数值也可以是变量。你在语法描述中看到的位于 { }之间的东西,表示可选参数。换句话说,没有它FOR NEXT仍将工作,但是你可以将之用于一些特殊目的。 4. 测试电机
在装配相扑机器人之前还有最后一件事要做,那就是测试电机。在本任务中,你将运行程序,使电机以不同速度和不同的方向旋转。通过这些测试,将确保在装配之前电机工作是正常的。
1) 调整速度和方向
两个电机的PULSOUT命令的参数 Duration有多种不同的组合,
假如你想让两个电机都运行,给与P13连接的电机发出850的脉宽,给与P12连接的电机发出650的脉宽,现在每通过循环一次要用的时间是: 1.7ms – 与P13连接的电机 1.3ms – 与P12连接的电机 20 ms – 中断持续时间 1.6 ms – 代码执行时间
--------- ------------------------------ 一共是24.6 ms 2) 测试扬声器
FREQOUT命令:
FREQOUT Pin, Duration, Freq1 {,Freq2} 下面的FREQOUT命令实例 FREQOUT 3, 2000, 3000
参数Pin的值是3,意味着高/低信号将送给I/O脚的P3,Duration代表着高/低信号持续的时间是2000,即2000毫秒或2秒。参数Freq1是信号的频率,在此例中,将产生一个3000赫兹的音调。 四.思考题
1.简述伺服电机的工作原理 2. 给与P13连接的电机发出850的脉宽,给与P12连接的电机发出650的脉宽,PAUSE=20,如果打算让两个电机运行1分钟,须给两电机多少个脉冲?
实验三 相扑机器人巡航控制
一.实验目的
1. 通过编程使机器人能做出一些基本的动作,并能调节使动作更加精确。
2. 通过本次实验让学生掌握调节和校正机器人巡航路径的方法,为后面的实验做好准备。 3. 掌握子程序调用方法。 二.实验要求
要求学生能编程实现机器人的各种巡航路径的控制,并且能利用子程序调用的思想简化编程。
三.实验内容
1. 基本的机器人动作
可以看出,当机器人向前走时,它的右轮顺时针旋转,而左轮会逆时针旋转。 请同学编程使机器人向前走。 思考:
向后走呢? 原地左转? 原地右转?
绕左轮左转?(转90度的效果经测试需要FOR counter=0 TO 20左右) 绕右轮右转? 绕左轮右转? 绕右轮左转?
2. 计算运动某一距离所需时间:
编程让机器人前进1s看所走距离是多少,即可得到速度
3. 匀变速运动:
匀变速运动的关键是给PULSOUT命令的Duration参数赋予变量。下面的例程显示的是一个FOR NEXT循环它能使相扑机器人的速度由停止到全速。FOR NEXT循环每重复执行一次,pulseCount变量就增加1。第一次循环后,pulseCount变量的值是1,就像是在执行命令PULSOUT 13, 751 和 PULSOUT 12, 749。第二次循环后,pulseCount变量的值是2,就像在执行命令PULSOUT 13,752和PULSOUT 12,748。随着pulseCount变量值的增加,电机的速度也在逐渐增加。
匀加速:FOR pulseCount = 1 TO 100
PULSOUT 13, 750 + pulseCount PULSOUT 12, 750 - pulseCount PAUSE 20 NEXT
匀减速呢?
4. 用子程序简化运动程序
在后面的要求中,相扑机器人将执行运动来避开障碍物。避开障碍物的一个关键的步骤就是需要按预先编好运动程序执行动作。执行这些动作的一个很好的方法是用子程序。 子程序
一个PBASIC子程序有两个部分。一部分是子程序调用,它告诉程序跳到可重复执行代码部分,执行后回到调用点。另一部分是实际的子程序,它以作为自己的名字的标号为子程序的起点,以RETURN命令结束。这个标号和RETURN命令之间的命令组成一个代码段,执行你想让子程序做的工作。
四.思考题
1.写出相扑机器人绕右轮左转的程序。
2.假如机器人前进速度为23cm/s,现欲使其前进53厘米,求出BASIC Stamp发给伺服电机的脉冲数。
3.写出使相扑机器人匀减速向右旋转四分之一周的程序
实验四 红外线导航
一.实验目的
1. 了解利用红外光探测障碍物的原理。 2. 能够搭建并测试相关IR电路。
3. 编程实现机器人对障碍物的避开动作。 二.实验要求
要求学生在掌握红外发射和探测器原理的前提下,能编程实现相扑机器人避开障碍物的动作要求。 三.实验内容
1. 用红外光探测障碍物的基本原理:
在相扑机器人上建立的红外物体探测系统在许多方面就象汽车的前灯。当汽车前灯的射出的光从障碍物体反射回来时,你的眼睛发现障碍物体,然后你的大脑处理这些信息,并据此控制你的身体引导汽车。相扑机器人使用红外线两极管LEDs作为前灯,如上图所示。他们发射红外光,在一些情况下,红外线从物体反射从机器人前进的方向折回。相扑机器人的眼睛是红外检测器。红外检测器发出信号来表明它们是否检测到从物体反射回的红外线。相扑机器人的大脑,BASIC Stamp微控制器据此做出判断并基于这个传感器的输入控制伺服电机。IR(红外线)检测器有内置的光滤波器,除了需要我们用它的内部的光敏二极管传感器检测的980 nm红外线,它几乎不允许其它光通过。红外检测器也有一个电子滤波器,它只允许大约38.5 kHz 的信号通过。换句话说,检测器只寻找每秒闪烁38,500次的红外光。这就防止了普通光源象太阳光和室内光对IR的干涉。太阳光是直流干涉(0Hz),室内光依赖于所在区域的主电源,闪烁频率接近100或120 Hz。由于120 Hz在电子滤波器的38.5 kHz通带频率之外,它完全被IR探测器忽略。 2. 搭建并测试IR发射和探测器
1) 用FREQOUT命令测试红外发射探测器
FREQOUT命令主要是用来合成音频。它的实际范围是1到32768 Hz。数字音调合成包括被称为和声的信号,和声是混在你听到的音调里的更高频率的音调。人不能辨别频率范围从20 Hz 到 20 kHz的音调。由FREQOUT命令产生的和声从32769 Hz开始直到更高。你可以用高于32768Hz的参数Freq1直接控制和声。
本任务中,用命令FREQOUT 4, 1, 38500 向P4发送持续1秒的38.5 kHz和声,连接P4的红外LED电路将发送和声。如果红外光被小车路径上的物体反射回来,红外检测器将给BASIC Stamp发送一个信号,让它知道已经检测到反射回的红外光。
例:发送38.5 kHz信号给连接到P4的IR 发射器,然后用位变量irDetectLeft存储连接到P11的IR探测器的输出,。 FREQOUT 4, 1, 38500 irDetectLeft = IN11
当没有IR信号返回时,IN11=1;当它探测到被物体反射的38500 Hz和声时,IN11=0。 当FREQOUT命令发送和声后, IR探测器的输出处于低状态不到1毫秒,因此当发送完 FREQOUT命令后立即将IR探测器的输出存储到变量中是很重要的。这些存储的值会显示在调试终端或被机器人用来导航。 2) 探测红外线干扰
如果你偶尔注意到即使检测范围内没有任何物体,你的相扑机器人指示探测到了物体,这说明附近的灯光正产生频率接近38.5 kHz的红外光。如果你想在这种灯光下进行机器人比赛或演示,你的红外系统可能会停止工作。因此在动手做演示之前,用这个红外线干涉探测程序仔细检查任何要演示相扑机器人的区域是非常必要的。
程序原理:不用IR LED发送任何红外光,只是监控有没有检测到红外光,如果检测到红外光,用扬声器发出警报。
3. 探测和避开障碍物
条件判断命令语句IF…THEN: 其句法是:
IF (condition) THEN {ELSEIF (condition)} {ELSE} ENDIF
句中“ ”的意思是,你可以在关键词之间放置一个代码段(由一条或多条命令组成)。
如果左右IR都检测到物体,则执行以下操作:
Back_up,Turn_Left,Turn_Left
如果只左侧IR检测到物体,则执行以下操作:
Back_up,Turn_Right 如果只右侧IR检测到物体,则执行以下操作:
Back_up,Turn_Left 请同学完成探测和避开障碍物动作程序: (后退pulsecount=0 TO 40 旋转 pulsecount=0 TO 20) 四. 思考题
1.列举出机器人常用的传感器,并简述它们各自的工作原理 2.如何使机器人红外设备能检测到更远的范围?
实验五 边界识别
一.实验目的
1.了解利用QTI传感器识别边界的原理。 2.能够搭建并测试相关IR电路。
3.编程实现机器人对边界的识别及避开动作。 二.实验要求
要求学生在掌握QTI传感器原理的前提下,能编程实现相扑机器人识别边界以及做出反馈动作的要求。 三.实验内容
QTI传感器由红外发射和接收器组成,用来检测物体表面的反射率,原本是用在相扑机器人上检测边界。
原理及其应用:当QTI传感器走过一个黑的表面,反射率较低,经过一个亮的表面,反射率是较高。模块里面有一个RC电路,反射率的变化使得电路中的电流变化,而导致RC电路充放电时间的变化,通过RCtime来测量反射率,来实现对特定的表面(例如:黑胶带)进行跟踪。
QTI传感器电路分析:
QTI传感器通过给W管脚提供5V(Vdd)电压得以激活。这会产生电流流经470欧的电阻并到达QRD1114的LED一边。 传感器通过下面反射的红外光会改变流过QRD1114 光电晶体管一边的电流大小。 晶体管实际上表现得像一个红外光控制的电阻。
BASIC Stamp有一个特定的命令RCTIME用来读取可变电阻值。当与电容器相结合,BASICStamp可以通过读取电容器充放电的时间来测量可变电阻。
QTI被激活后,把R端子置于高位电容处于放电状态大约持续1毫秒。RCTIME可以用来计算电容要充电到特定水平所需要的时间,这个时间是由流过QRD1114光电晶体管的电流控制的。 当经过黑色区域时,光电晶体管电流会很低,于是电容器需要较长时间来充电,因此RCTIME将返回一个大的值。当QTI处于白色的界线时,通过光电晶体管的电流值高,于是电容器充电快,从而RCTIME会返回一个小的值。
RCTIME Pin, State, Duration
参数Pin 是你要测量的I/O端口值。例如,如果你要测量P9,参数Pin应该是9。参数State可以是1也可以是0。如果通过电容两端的电压从高于1.4V向下衰减,参数State应该是1;如果电容两端电压从小于1.4 V向上增加,参数State应该取0。Duration是存储测量的时间的变量,其单位是2 μs。
timeLeft VAR Word 下面三行代码是给电容充电,测量RC衰减时间并存储在timeLeft 变量中
HIGH 9 PAUSE 1
RCTIME 9,1,timeLeft 代码执行分下面三步: 1. 连接电路5V给其充电
2. 通过 PAUSE给电容充放电提供足够时间
3. 执行 RCTIME命令,将测得时间储存在timeLeft变量中。 (后续动作可仿照上一个实验。略)
上一篇:《人地关系思想的演变》教案]
下一篇:中西方婚礼文化的差异演示文稿