制作PC串口控制的移动小车
孙昱放
摘 要:伴随科学技术的发展和人民生活水平的提高,移动机器小车在现实生产和生活中,得到了极为广泛的应用。本文在系统介绍了移动机器小车的基础知识基础上,重点阐述了移动机器小车设计与被动避障、主动避障的控制,以及追踪控制的工作原理和应用。
关键词:移动机器小车;控制;制作与设计
中图分类号:TP24 文献标识码:A 文章编号:1671-2064(2017)13-0054-03
机器人逐渐进入到人们的生活当中,如现在家用的扫地机器人、饭店使用的洗碗机等等。机器人方便了人们的生活,优化了人们的生活方式。机器人在未来一定可以对人类的生活起到更大的作用。移动机器人在生活中的应用逐渐普遍,也引起了我对它的兴趣,我从简单的移动机器小车入手,开始学习与研究移动机器小车的控制,从而对机器人有更深的理解。
1 移动机器小车的基础知识
移动机器小车即使用伺服电机根据软件编程的设定,发出脉冲控制机器小车完成运动、避障、跟随等任务的机器。
1.1 软件介绍
BASIC Stamp是由美国Parallax公司自1992年起所提创的一种微控制器,此种微控制器与其他微控制器不同的地方在于:微控制器中的ROM内存内建了一套小型、特有的BASIC编程语言直译器,称为:PBASIC。
1.2 硬件介绍
伺服电机:伺服系统是使物体的位置、方位、状态等输出被控量能够跟随输入目标(或给定值)的任意变化的自动控制系统。
面包板:面包板是由于板子上有很多小插孔,专为电子电路的无焊接实验设计制造的。电子元器件可根据需要随意插入或拔出。
1.3 指令和循环语句
伺服电机在收到某一特定的信号时,处于静止状态。本次使用的伺服电机在收到脉冲宽度为1.5ms的脉冲信号时,处于静止状态。在计算机上,将使用一个PULSOUT指令。PAUSE是低电平,PULSOUT输出的是高电平。
PULSOUT指令:PULSOUT Pin,Time。Time是用来计算脉冲宽度的时间单位数,时间单位是2/μs,则零点脉冲宽度为Time=0.0015s/0.000002s=750。
要控制脉冲之间的间隔则需要使用PAUSE指令。
PAUSE指令:PAUSE T。T是PAUSE的值,它表示微控制器在执行下一条指令之前要等待多久。T的单位是1ms。如要等待0.5秒,则给T赋值为500:PAUSE 500。
要持续产生脉冲信号,则还需要用到DO…LOOP循环语句当中。
DO…LOOP语句:
DO
PULSOUT 1,750
PAUSE 500
LOOP
如此则可以循环运行指令。
还有一种FOR…NEXT的语句适用于有限次数的循环:
C VAR Word
FOR C=1 TO 200
C=C+1
PULSOUT 1,850
PULSOUT 2,650
PAUSE 20
NEXT
根据计算,循环一次的时间大概为23ms,循环200次,则为4.6秒。
1.4 匀速运动和匀变速运动的原理以及执行方法
匀速运动:当Time参数的值大于750时,会使伺服电机逆时针旋转,而当Time的值为850时,则会全速逆时针旋转。顺时针反之亦然。当要匀速运动时,可以使用PULSOUT指令使两个伺服电机同时旋转。由于两个电机对应方向相反,则一个电机顺时针输出,一个电机逆时针输出可以完成匀速运动。表1。
DO
PULSOUT 1,850
PULSOUT 2,650
PAUSE 20
LOOP
如果测量出不同脉冲宽度下行走的距离,可以计算出小车的行驶速度。
匀变速运动:当Time输出的参数逐渐变化时,速度也会由此变化,则依据此可以进行匀变速运动代码的编写:
C VAR Word
For C=1 To 100
Pulse out 1,750+1
Pulse out 2,750-1
PAUSE 20
NEXT
在100次循环后,速度逐渐增加到最大值,完成了一次匀变速运动。根据加减的数值大小算出加速度的大小。
2 被动避障
被动避障是机器小车进行的被动行为。当机器小车被障碍阻碍从而被动接受到障碍的信号时,做出转动和避让。
2.1 被动避障的原理
可以通过一个感受障碍的装置,将障碍信号转化为电信号。本次使用了一個类似胡须的装置来完成这个任务。
胡须是类似一个触角的金属丝,弯曲形成一个环形,在前面感测障碍,胡须如同一个开关,控制着机器小车。胡须开关的状态值1或0储存在IN7的变量中。当没有被按下时存储值为1,胡须被按下时存储值为0。机器小车在行走中,一旦胡须被按下,就代表有障碍物,根据胡须的不同情况使机器小车进行不同的动作,从而完成被动避障。
2.2 被动避障使用的代码以及程序的设计
为了使机器小车进行判断,需要使用IF…THEN语句:
IF(cundition)THEN…{ELSEIF(CONDITION)}…{ELSE}…ENDIF
可以提前编制一些动作的代码,在程序中使用GOSUB来进行子函数,这样在写程序中就简洁许多。(IN5为左胡须的存储器,IN7为右胡须的存储器)
3 主动避障
主动避障是机器小车进行的主动行为。当机器小车在还未接触到障碍时主动接收到障碍的信号时,做出转动和避让。
3.1 主动避障的原理
可以通过一个红外感应装置,将障碍信号转化为电信号。我使用了红外线探测器完成这项任务。机器小车上使用了红外线二极管LED作为发射源,如果有障碍物,则会对红外线进行阻碍和反射,如此则机器小车上的红外线探测器便可以测得反射回来的红外线。为了排除普通光源的干扰,红外线探测器内部的光滤波器只允许980nm波长的红外线通过,并且红外线探测器的电子滤波器只允许38500Hz的电信号通过,即只寻找每秒闪烁38500次的红外线。
3.2 主动避障使用的代码以及程序的设计
为了让红外线二极管LED发出所需的和声信号,需使用FREQOUT指令。如:
FREQOUT 8,1,38500
这句代码的指令就是连接到8号引脚的红外线二极管LED电路发送1ms频率为38500Hz的和声信号。
当红外线探测器接收到红外信号时会产生存储值,没发现物体显示1,发现物体显示0。IRDL和IRDR是左右两个红外线探测器的存储值。使用下面代码即可将存储值储存到存储器当中。
IRD VARL Bit
IRD=IN9
则主动避障的程序代码为
(定义变量)
IRDL VAR Bit
IRDR VAR Bit
C VAR Byte
(主程序)
DO
FREQOUT8,8,1,38500
IRDL=IN9
FREQOUT8,2,1,38500
IRDL=IN0
IF(IN9=0)AND(IN0=0) THEN 表示前方有障碍
GOSUB BACK
GOSUB LEFT
GOSUB LEFT
ELSEIF(IN9=0) THEN 表示左边有障碍
GOSUB BACK
GOSUB RIGHT
ELSEIF(IN0=0) THEN 表示右边有障碍
GOSUB BACK
GOSUB LEFT
ELSE GOSUB GO 无障碍则持续前进
ENDIF
LOOP
(子函数)
GO: 表示前进的子函数
PULSOUT 1,850
PULSOUT 2,650
PAUSE 20
RETURN
LEFT: 表示左转的子函数
FOR C=0 TO 20
PULSOUT 1,650
PULSOUT 2,650
PAUSE 20
NEXT
RETURN
RIGHT:表示右转的子函数
FOR C=0 TO 20
PULSOUT 1,850
PULSOUT 2,850
PAUSE 20
NEXT
RETURN
BACK: 表示后退的子函数
FOR C=0 TO 40
PULSOUT 1,650
PULSOUT 2,850
PAUSE 20
NEXT
RETURN
3.3 主动避障和被动避障的区别与优缺点
主动避障没有直接接触到障碍,是提前预知障碍进行避让;被动避障是直接接触到障碍,从而进行避让。两种避障方式的原理不同,但它们的目的相同。可根据不同的需要和要求进行两种避障方式之间的选择。主动避障避免的直接的撞击导致的经济损失,但是缺点是通过无线传感器接收到的干扰因素较多,成本高。
4 移动机器小车的距离探测和追踪
不同频率的和声信号探测的距离远近也不同,可以发射多种频率的和声信号,根据返回的红外线频率探测物体的位置,并使用负反馈控制系统进行追踪。
4.1 用频率扫描进行编程做距离探测
频率特性使得红外线传感器在不同的频率下有不同的灵敏度,导致红外线探测的距离不同。如图1,物体反射了39500Hz、38250Hz和37500Hz的红外线,根据接收情况,可以得知物体在区域2。划分区域越多则精度越高,定位也更加准确,但会增大计算量,带来不必要的麻烦。由于本次研究目的在于追踪,不需要过高的精度,所以以1000hz为最小分度值,划分为6个区域。
当信号反馈时,有一种频率的信号反馈则储存的数字是0,无信号反馈则为1。如在图1中物体在区域2时,接收到了3种信号的反馈,而另外两种信号的反馈则接受不到,即为3个0,2个1,求和的出数字2,而数字2对应的便是区域2。
为了对红外线频率进行扫描,要用FREQOUT指令发送6种不同频率的红外线信号,使用LOOKUP命令可以简便的写出。LOOKUP命令的用法定义如下:
LOOKUP Index,[Value0,Value1,…ValueN],Variable
则代码可为
IRF VAR Nib
IRD VAR Bit
FOR IRF=1 TO 4
LOOKUP IRF,[37500,38250,39500,40500,41500],IRF
FREQOUT8,1,IRF
IRD=IN9
NEXT
4.2 移动机器小车的追踪控制
这个任务是要让机器小车跟随一个移动的物体。根据闭环控制系统的控制,在落后较远时,机器小车能进行加速;当距离太近的时候,它也能察觉并减速。如果距离合适,那么它会等待直到测量距离变远或者变进。
如图2,我们需要机器小车保持2个区域的距离,相差4区域的距离接下来对机器小车进行编程。
由此得出右边伺服电机的输出方程为:
Right servo output=(Right distance set point-Measured right distance)*Kp+Center pulse width
pulseLeft=(SetPoint-distanceLeft)*Kpl+CenterPulse
pulseRight=(SetPoint-distanceRight)*Kpl+CenterPulse
將右边距离设置为2,测量距离由变量distanceRight存储,Kp为35(比例常数是根据伺服电机特性得出来的常数),脉冲宽度为750。
pulseLeft=(2-distanceRight)*35+750
5 结论
在移动机器小车的制作与探究中,我学到了被动避障和主动避障的原理与设计,体会研究追踪移动机器小车的原理,学会了使用BASIC stamp 软件,了解了红外线二极管LED和红外线探测器。我相信在未来,移动机器小车的使用会更加的广泛,涉及到更多的领域,也将会有更多的功能。我也要紧跟时代脚步,在机器小车的领域中继续探索。
参考文献
[1]秦志强,侯肖霞,王文斌.基础机器小车制作与编程[M].第二版.北京:电子工业出版社.