这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 具有绘制电子地图及定位功能的六脚机械昆

共1条 1/1 1 跳转至

具有绘制电子地图及定位功能的六脚机械昆

工程师
2011-03-15 14:34:06     打赏
具有绘制电子地图及定位功能的六脚机械昆
写于: 星期日 22 五月 @ 06:33:01
 
智能机器人开发针对一个未知的、待探测的环境,用相对轮式适应性更好的爪的方式作为机械载体,用超声波采集周围数据回给计算机,通过软件处理生成一个简单的平面电子地图,而后通过对地图坐标的观测给定机械昆虫想要它行走的X,Y坐标,机械昆虫自身通过对刚才数据的采集而计算出一条合适路径,而自动走到相应的地点,从而实现了简单的绘制未知地形地图及定位功能。机械部分用最少的舵机(三个)控制六个脚实现了前进、后退、左转、右转的复杂运动,同时还可单独工作,在此基础上可添加其他相关模块从而可实现其他功能(如走迷宫等),功能还有极大扩展空间。传感器用了三对超声波换能器及一个利用磁阻原理的角度侦测模块实现了对前后左右距离的数据采集及对机械昆虫相对角度的检测等功能。在此基础上用一片ATMEL89S51单片机实现了对数据的处理、同计算机的通讯、及行走路线和行走策略的计算由此而形成了具有绘制平面电子地图及定位功能的六脚机械昆虫。同时本机械昆虫尚有许多不完善的地方,同时稳定性还有待提高。

具有绘制电子地图及定位功能的六脚机械昆虫

学生姓名:王珂
指导教师:无


摘要

针对一个未知的、待探测的环境,用相对轮式适应性更好的爪的方式作为机械载体,用超声波采集周围数据回给计算机,通过软件处理生成一个简单的平面电子地图,而后通过对地图坐标的观测给定机械昆虫想要它行走的X,Y坐标,机械昆虫自身通过对刚才数据的采集而计算出一条合适路径,而自动走到相应的地点,从而实现了简单的绘制未知地形地图及定位功能。机械部分用最少的舵机(三个)控制六个脚实现了前进、后退、左转、右转的复杂运动,同时还可单独工作,在此基础上可添加其他相关模块从而可实现其他功能(如走迷宫等),功能还有极大扩展空间。传感器用了三对超声波换能器及一个利用磁阻原理的角度侦测模块实现了对前后左右距离的数据采集及对机械昆虫相对角度的检测等功能。在此基础上用一片ATMEL89S51单片机实现了对数据的处理、同计算机的通讯、及行走路线和行走策略的计算由此而形成了具有绘制平面电子地图及定位功能的六脚机械昆虫。同时本机械昆虫尚有许多不完善的地方,同时稳定性还有待提高。


一. 机械部分


图一。前视图

图二。后视图

图三。等轴视图


#机械部分制作步骤
1. 用SOLIDWORKS2005建立三维实体模型
SOLIDWORKS2005是一个采用Microsoft Windows图形用户界面的机械设计自动化应用程序。使用此软件,我们能够快速地按照其设计思想绘制草图。尝试运用各种特征与不同尺寸。以及生成模型和制作详细的工程图。


2.虚拟检查机械部分运转及可实现性
通过使用SOLIDWORKS2005我们可以在虚拟的情况下建立自己的模型,更为重要的是我们同时可以使用SOLIDWORKS2005强大的虚拟现实功能对我们已建立的模型施行仿真的运转及显现模型各零部件的相互情况,从而为未来的实体的加工奠定了坚实基础。


3.通过SOLIDWORKS2005输出图纸并加工(总工时大约2个月)


#机械部分特点及运动原理
特点:六脚三个舵机的控制方式是已知的实现复杂运动的所需最少舵机的实现方式,总共实现前进,后退、右转,左转四种运动后退姿态,这也为实现后续控制所要求的复杂运动提供了机械基础。本机械部分采用了这四种运动姿态。

一共使用了三个舵机,两个分别在两边,一个在中间,每一边的前腿和后腿是联动的,只有一个自由度,只能做前后移动;中间两条腿是联动的,只能做左右摆动。行走原理是:中间的舵机左右摆动,左中腿和右中腿交替着地,以使两边的腿分时产生推动身体向前的动作,即:左中腿着地时,右前腿和右后腿起作用,当右中腿着地时,左边前后两条腿起作用。中间的舵机在运动相位上始终与两边的腿相差90度;当左右两个舵机同相位时,机器人转弯;当左右两个舵机相位相差180度时,机器人前进或后退

 

#机械六腿运动具体分析

图四


前进:第一步,5脚支撑并抬高4、6脚使其离地,同时2脚离地,1、3脚接触地面并向后划动,实现了半步,接着2脚支撑并抬高1、3脚使其离地,同时5脚离地,4、6脚接触地面并向后划动。
后退则改向后划动为向前划动。
右转:第一步,5脚支撑并抬高4、6脚使其离地,同时2脚离地,1、3脚接触地面并向后划动,实现了半步,接着2脚支撑并抬高1、3脚使其离地,同时5脚离地,4、6脚接触地面并向前划动。
左转则相反。
机械部分控制与总控采取分离制度,一方面避免舵机工作产生大电流干扰总控,另一方面机械部分与总控部分分离,这样机械部分还可应用与其他场合。
机械控制部分主要元件:1片ATMEL89S51。用C编程,主程序控制三个舵机的工作的时序,在不工作时使S51进入掉电模式中(省电,避免给总控带来干扰),工作时由总控提供中断使其进入工作模式,有三个IO用来作为信号,000前进,001后退,010左转,011右转。


#程序主题部分及相关变量函数功能
二. 控制部分
#工序

  1. 使用WAVE及KEILC等单片机仿真、编写软件进行单片机程序的编写、调试、仿真。
    WAVE,KEILC等仿真软件具有编写及仿真的功能,实现了在无外部硬件支持的基础上对单片机的完美仿真。
  2. 在编写完相关软件基础上进行软件仿真
  3. 查找相关资料,并施行分模块化方式的调试
    针对超声波和角度检测模块分开调试。
  4. 与机械部分实施组装
  5. 再进行整体的调试
  6. 实现整体功能的调试(工时大约一个月)
    主要元气件:一片89S51,三对超声波接收发射换能器,若干常见IC,一块角度检测模块。


#控制部分特点及相关程序

  1. 自建测距模块采用40KHZ超声波传感器,由于采用的是国产比较次的超声波器材,单独模块仅实现了对5-60CM的垂直面物体的检测,在装配完成后,由于超声波易受干扰影响,同时为了避免干扰采用改变发射接受策略的方式降低了干扰的同时也使得有效距离改变为7-40CM,误差〈1CM。
  2. 总控芯片仍然为S51,考虑到价格及所用环境的因素而没有采用先前确定MEGA8。
  3. 角度模块采用的是利用,其采用磁阻技术与传统的霍耳效应传感器的灵敏度及抗干扰度提高不少,切摆脱了需要外加磁场的需要,实现误差〈3度的的较为精准的角度测量。
  4. 外加一个光点槽形开关用于检测步数,进而转换成速度、位移。
  5. RS232,实现系统与电脑的数据传输(当系统应用于较远距离时或条件不允许时时数据传输的时候需加入存储模块或采用内置存贮器的单片机)。


#超声波测距模块
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人的研制上也得到了广泛的应用。
为了使移动机器人能自动避障行走,就必须装备测距系统,以使其及时获取距障碍物的距离信息(距离和方向)。本机器人所使用的三方向(前、左、右)超声波测距系统,就是为机器人了解其前方、左侧和右侧的环境而提供一个运动距离信息。


1、 超声波发生器
为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。总体上讲,超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋笛等。它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。目前较为常用的是压电式超声波发生器。


2、压电式超声波发生器原理
压电式超声波发生器实际上是利用压电晶体的谐振来工作的。超声波发生器内部结构如图五所示,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。


图五超声波换能器


3、超声波速度
超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差t,然后求出距离S=Ct/2,式中的C为超声波波速。其系统框图如图六所示。


图六超声波系统框图


由于超声波也是一种声波,其声速C与温度有关,公式如公式1。在使用时,如果温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。声速确定后,只要测得超声波往返的时间,即可求得距离。这就是超声波测距仪的机理。

c=331.5+0.607t (m/s) 式中,t=温度 (℃) (公式1)


4、超声波发射接收函数
利用中断0作为接收,89S51的P0口1-3口作为40KHZ超声波发射口,每个周期发射两个40KHZ的脉冲,并延迟接收。
发射子函数
void shot(unsigned char flag)
{
switch(flag)
{
case 0://前
{
zflag=0;
for(i=0;i<20;i++)
{
init_distance();
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=0;
P0_0=0;
P0_0=0;
P0_0=0;
P0_0=0;
P0_0=0;
P0_0=0;
P0_0=0;
P0_0=0;
P0_0=0;
P0_0=0;
P0_0=0;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=1;
P0_0=0;
delay(15);
EX0=1;
delay(300);
}
fflag=0;
}break;
case 1:
{
zflag=1;//左
for(i=0;i<50;i++)
{
init_distance();
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=0;
P0_1=0;
P0_1=0;
P0_1=0;
P0_1=0;
P0_1=0;
P0_1=0;
P0_1=0;
P0_1=0;
P0_1=0;
P0_1=0;
P0_1=0;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P0_1=1;
P1_1=0;
delay(15);
EX0=1;
delay(300);
}
fflag=0;
}break;
case 2://右侧超声波
{
zflag=2;
for(i=0;i<50;i++)
{
init_distance();
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=0;
P0_2=0;
P0_2=0;
P0_2=0;
P0_2=0;
P0_2=0;
P0_2=0;
P0_2=0;
P0_2=0;
P0_2=0;
P0_2=0;
P0_2=0;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=1;
P0_2=0;
delay(15);
EX0=1;
delay(300);
}
fflag=0;
}break;
}
}
中断接收函数
void int0(void) interrupt 0 using 1
{
unsigned char distance;
EX0=0;
TR0=0;
init_uart();
distance=(TH0*256+TL0)*0.0187;
switch(zflag)
{
case 0:
{
fflag=fflag+1;
if(fflag==5)
{
FDISTANCE=distance;
SBUF='f';while(TI==0);TI=0;
delay(100);
SBUF='=';while(TI==0);TI=0;
delay(100);
SBUF=distance/10+0x30;
while(TI==0);TI=0;
delay(100);
SBUF=distance%10+0x30;
while(TI==0);TI=0;
delay(100);
if(LDISTANCE>RDISTANCE)
{
walkl(turnleft);
do{
checkjiaodu();
walkl(turnleft);
}while(degree>270);
walkf(8000);
do{
walkl(turnright);
checkjiaodu();
}while(degree<355);
x=x-lxxiaozheng;
y=y-lyxiaozheng;
}
else
{
do{
walkl(turnright);
checkjiaodu();
}while(degree<90);
walkf(8000);
do{
walkl(turnleft);
checkjiaodu();
}while(degree>5);
x=x-lxxiaozheng;
y=y-lyxiaozheng;
}
i=20;
fflag=0;xz=x;yz=y;
}
}break;
case 1:
{
fflag=fflag+1;
if(fflag==5)
{
if((distance>5)&&(distance<50))
{
LDISTANCE=distance;
SBUF='l';while(TI==0);TI=0;
delay(100);
SBUF='=';while(TI==0);TI=0;
delay(100);
SBUF=distance/10+0x30;
while(TI==0);TI=0;
delay(100);
SBUF=distance%10+0x30;
while(TI==0);TI=0;
uart_close();
}
fflag=0;
i=50;
}
}break;
case 2:
{
fflag=fflag+1;
if(fflag==5)
{
if((distance>5)&&(distance<50))
{
RDISTANCE=distance;
SBUF='r';while(TI==0);TI=0;
delay(100);
SBUF='=';while(TI==0);TI=0;
delay(100);
SBUF=distance/10+0x30;
while(TI==0);TI=0;
delay(100);
SBUF=distance%10+0x30;
while(TI==0);TI=0;
uart_close();
}
fflag=0;
i=50;
}
}break;
}
}


#角度检测模块
1、角度检测模块简介
角度检测模块是一个重要的导航工具,甚至在GPS 中也会用到。角度检测模块将替代旧的针式角度检测模块或罗盘指南针,因为角度检测模块全采用固态的元件,还可以简单地和其他电子系统接口。角度检测模块系统中磁场传感器的磁阻(MR)技术是最佳的解决方法,和现在很多电子角度检测模块还在使用的磁通量闸门传感器相比较,MR 技术不需要绕线圈而且可以用IC 生产过程(IC-like process)生产,是一个更值得使用的解决方案。由于MR 有高灵敏度,它甚至比这个应用范围中的霍尔元件更好。


2、应用范围
手持式角度检测模块
汽车中独立的角度检测模块
移动电话中的角度检测模块
要在上面这些领域中使用,以下的条件非常重要:
系统中的所有元件都是标准的低成本元件;特别是微控制器,也应当是一个8 位的
低成本元件,而且要有尽量多的在片外部模块(如A/D 和D/A 转换器)
可显示以下信息:
― 以数字或图形显示机首方向
― 以最临近方位文字显示机首方向
精度小于3 度(用8 位的模数和数模转换)
能补偿角度检测模块的外壳或车体产生的“硬铁”干涉效应
角度检测模块的读数可参考地理上的北――正北

在RS232 接口通讯下波特率为19200bps 每次通讯都分为发送帧和接收帧发送帧由主机发出接收帧为模块发出每帧6 个字节其中帧起始为0XAA 帧结尾为0X0D 帧的结构如下


命令字0X01 为要求接收方向角度这时返回值DATA1 为方向角度的高位DATA2 为低位发送时DATA1 DATA2 可为任意值
0X02 为要求模块进行硬铁补偿DATA1 为0X01 时为开始硬铁补偿为0X00 时为结束硬铁补偿DATA2 可为任意值
0X03 为要求模块进行正北校正DATA1 为0X01 时为进行正北校正DATA2 可为任意值
校验字0XAA XOR 命令字XOR DATA1 XOR DATA2;
校验字0XAA ^ 命令字^ DATA1 ^ DATA2;
即为前4 字节的异或之值
*注如果主机发送的帧有效时模块即发送接收帧命令字0X02 和0X03 时接收帧为主机的发送帧命
令字为0X01 时模块发送的接收帧的DATA1 DATA2 为模块所测得的方向角


2、角度检测函数
void checkjiaodu(void)
{
const unsigned char jiaodu[6]={0xAA,0x01,0x00,0x00,0xAB,0x0D};
unsigned char i,pf,d[6];
for(i=0;i<6;i++)
{
SBUF=jiaodu[i];
while(TI==0);TI=0;
delay(500);
}
for(i=0;i<6;i++)
{
while(RI==0);RI=0;
d[i]=SBUF;
}
pf=(d[0]^d[1]^d[2]^d[3]);
if(pf==d[4])
{
for(i=0;i<6;i++)
{
SBUF=d[i];
while(TI==0);TI=0;
}
}
degree=d[2]*256+d[3];
}


3、角度初始化函数
void init_jiaodu(void)
{
mdelay(3000);
init_uart();
ydbck();
mdelay(3000);
ydbcj();
mdelay(3000);
zbxz();
mdelay(3000);
uart_close();
}


#运动策略及控制部分实现方法

  1. 探测模式下系统又由电脑给定信号运转。人为给定初始X,Y坐标,建立坐标系。又初始化角度传感器使其角度归零。定位模式下除上述方式外,外加给定X,Y终点坐标,由程序根据先前得到的数据通过数据选择一条合理的路到达终点。
  2. 昆虫自动行走,每隔固定时间查询前,左,右三个超声波传感器的数值并传输到电脑或存贮到存储器,同时接受角度值并修正X,Y坐标,将X,Y传输到电脑或忽略掉。当正面遇上障碍物则将当前X,Y坐标记录以用做回程时的一个“终点”,并实行90度转弯并前行再90度转弯的方式避开,同时系统将修正X,Y坐标。
  3. 系统到检测到触须被触碰到五次即返回。
  4. 定位模式下的原理几乎是一个逆过程。

#控制部分关键模块特点

  1. 超声波模块在电路是自建基础上实现其预期功能是成功的,其有效距离完全超越购买的红外避障模块,切在无外加屏蔽的方式下实现了对干扰的有效的滤除。
  2. 角度模块对精度要求不是太高的基础上实现了对X,Y坐标的补偿,这使得原先单独靠机械方式保证直线前进的方式下提高了X,Y的精度,同时其保证了在避障时以90度的角度旋转。这相对与原先设计的使用价格昂贵的电子罗盘或者陀螺等专业定位传感器降低了很大部分成本。
  3. 总控程序采用了模块化的程序实现了各模块,各功能的分离,并积成在线下载功能保证了程序的可升级性。

参考文献
[1] 姜道连 宁延一 袁世良用AT89C2051设计超声波测距仪文献标识[B] 天津理工学院光电信息与电子工程系
[2]李光飞 楼然苗 胡佳文 谢象佐 单片机课程设计实例指导 北京:北京航空航天大学出版社,2003

 




关键词: 具有     绘制     电子地图     定位     功能     六脚     机械     一个    

共1条 1/1 1 跳转至

回复

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