无线控制可视救援机器人系统的设计与实现Word下载.docx
《无线控制可视救援机器人系统的设计与实现Word下载.docx》由会员分享,可在线阅读,更多相关《无线控制可视救援机器人系统的设计与实现Word下载.docx(36页珍藏版)》请在冰豆网上搜索。
德普斯机械手
该模块是德普斯公司推出的机械手,硬件和功能完全能够满足机械手的多角度灵活活动,完成各种复杂动作。
◆无线摄像头:
台电摄像头
该模块是台电公司推出的无线摄像头模块,硬件和功能完全能够满足实时远距离无线视频监控。
◆无线传输模块:
AY-RF905无线模块。
三、系统设计
1、硬件设计
下图为硬件系统设计框图
图1硬件系统框图
2、软件设计
下图为软件设计框图
无线控制板程序
达盛51单片机
小车驱动程序
机械手控制程序
图2软件系统框图
四、功能模块设计
1、硬件模块设计
①、AY-RF905模块的Nordic公司的nRF905芯片如图所示:
图3nRF905芯片引脚图
②、引脚概述
③、单片机模块:
采用达盛51单片机开发平台,平台结构如图所示:
图4达盛平台PCB图
图5达盛平台PCB3D图
图6达盛平台原理图
⑤、六自由度机械手
图8六自由度机械手
●产品简介
◆手爪:
内宽8.26厘米,手长8.26厘米,高2.85厘米,
◆最大负重:
403.41克
◆手可达区域:
49.53厘米
◆各部运动范围:
0—180度
◆肘到腕距离:
14厘米
◆基座到肘距离:
20厘米
◆腕到手爪心距离:
17.8厘米
◆机械手自重(包括伺服电机):
1.06公斤
◆超级扭矩齿轮645系列伺服电机(旋转肘部使用):
3极马达,金属齿轮,双滚珠轴承,4.8伏扭矩:
7.7公斤/厘米,6.0伏扭矩:
9.6公斤/厘米
4.8伏速率:
0.24秒/60度,6.0伏速率:
0.19秒/60度
尺寸:
40.6X19.8X37.8毫米
重量:
60克
◆标准金装475系列伺服电机(旋转基座、腕、手爪使用):
3极马达,卡博来特齿轮,滚珠轴承
4.8伏扭矩:
4.4公斤/厘米,6.0伏扭矩:
5.5公斤/厘米
0.23秒/60度,6.0伏速率:
0.18秒/60度
38.8X19.8X36毫米
40克
◆225系列伺服电机(旋转手腕使用):
3极费莱特马达,
3.9公斤/厘米,6.0伏扭矩:
4.8公斤/厘米
0.14秒/60度,6.0伏速率:
0.11秒/60度
32.4X16.8X31毫米
27克
◆内芯式805BB系列电机(旋转肩部使用):
双滚珠轴承,定制内置式芯片
16公斤/厘米,6.0伏扭矩:
27.4公斤/厘米
0.20秒/60度,6.0伏速率:
0.14秒/60度
66X30X58毫米
152克
⑦、无线摄像头
图6无线摄像头
◆镜头类型CMOS
◆摄像头像素500万
◆摄像头分辨率640×
480
◆最高分辨率(像素)640×
◆最大帧数30帧
◆色彩位数24位
◆成像距离35mm-无穷远
◆对焦方式手动
◆对焦方式/范围手动调焦模式
◆镜头带红外夜视500万高像素镀膜镜头
◆支持系统Windows2000/2003/XP/Vista/7,Mac,Linux
◆接口类型USB2.0
◆外观色彩象牙白
◆附件电源适配器
◆其他参数全球首创2000米无线距离
◆增强型2.4G无线技术
◆内置高品质降噪麦克风
◆全新红外夜视镜头
◆4节AAA电池供电,可外接电源供电
⑧、自制小车
◆车身:
长*宽170mm*350mm
◆电机:
6V直流电机
⑨、照明系统
◆5VLED灯
2、软件模块设计
①基于达盛51单片机的无线总控制平台程序流程图
②基于达盛51单片机的机器人控制程序流程图
五、作品性能测试与分析
1、视频监视系统测试
将无线摄像头的USB无线接收器接入到PC机的USB接口,打开摄像界面,可以看到清晰的图像画面。
2、控制台系统测试
用达盛51平台和无线传输模块构成的总控制台,主要负责六自由度机械手和移动平台的控制,包括六自由度的各个电机的动作控制和移动平台的前进、后退、左转、右转等控制,通过操作控制控制平台可以让机械人完成各种动作,经测试移动,搬运都非常成功和稳定。
六、创新总结
该作品使用达盛公司达盛51单片机开发平台,再配合无线摄像头、德普斯的六自由度机械手和自制的移动动力系统平台,完成了一个远程无线遥控的可视控制的救援机械人,当灾害发生时、搜救工作复杂、危险,紧迫,我们的救援机器人以其体积小,灵活性大,可实现远程监视与控制等优点,为救援提供了极大的方便。
如井下救援,有毒环境救援,火灾救援等领域,我们的机器人将会发挥它巨大的作用;
现在各个国家都在研究这项技术。
目前,我们做的是有线控制的,如果将机器人进行适当改进,便可实现无线控制救援。
参考文献
1、周力功等编著.《ARM&
WinCE实验与实践-基于S3C2410》.北京航空航天大学出版社.2007年7月第1次印刷
2、张冬泉等编著.《WindowsCE使用开发技术(第2版)》.电子工业出版社.2009年3月第1次印刷
3、李大为等编著.《WindowsCE工程实践完全解析》.中国电力出版社.2008年10月第1次印刷
4、邱仲潘等译.《VisualC++6从入门到精通》.电子工业出版社.1999年1月第1次印刷
5、《WinCE指导书》北京达盛科技公司
6、《六自由度机械手使用说明书》深圳德普斯公司
附件一:
//达盛51单片机平台控制程序源代码
#include"
def.h"
./SPI/SPI.h"
./nRF905/nRF905.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitrobotkg=P3^2;
sbitdengkg=P3^3;
//0123456789ABCDEF
ucharcodetab1[]={'
0'
'
1'
2'
3'
4'
5'
6'
7'
8'
9'
A'
B'
C'
D'
E'
F'
};
ucharcodetab2[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
ucharcodetab3[]={0xfe,0xfd,0xfb,0xf7};
unsignedcharTxBuf[28]={0};
unsignedcharRxBuf[28]={0};
//unsignedcharPcTx_Buf[6];
unsignedchartf=0;
voiddelayms(uintn)
{
uinti,j;
for(i=0;
i<
n;
i++)
{
for(j=0;
j<
125;
j++);
}
}
voidDelay(unsignedcharn)//1mS
unsignedchari;
while(n--)//2uS
80;
i++);
//80*8uS=640uS
voidkey_delay()
unsignedinti,j;
for(i=1;
=50;
{for(j=1;
=100;
/////////////////
//sendthecommand
/*voidsend_comd(unsignedcharvalue)
{unsignedchari;
ES=0;
EA=0;
PcTx_Buf[0]=value|0xf0;
PcTx_Buf[1]=value|0xf0;
PcTx_Buf[2]=value|0xf0;
PcTx_Buf[3]=value|0xf0;
PcTx_Buf[4]=value;
PcTx_Buf[5]=value|0xf0;
=5;
i++)
SBUF=PcTx_Buf[i];
while(TI==0);
TI=0;
ES=1;
EA=1;
}*/
voidmain()
uchara,b;
//unsignedcharled1_count=0;
//unsignedcharled2_count=0;
//unsignedcharlight;
//================NRF905初始化
nRF905Init();
//================
Config905();
//ConfignRF905module
TxBuf[0]=0xff;
TxBuf[1]=0xff;
TxBuf[2]=0xff;
TxBuf[3]=0xff;
//ledclose
//SetRxMode();
//SetnRF905inRxmode
SetTxMode();
while
(1)
robotkg=1;
dengkg=1;
for(b=0;
b<
4;
b++)
P1=tab3[b];
delayms(25);
if(robotkg==0)
TxBuf[3]='
G'
;
TxPacket(TxBuf);
//TransmitTxbufferdata
TxBuf[3]=0xff;
if(dengkg==0)
H'
for(a=0;
a<
16;
a++)
if(P1==tab2[a])
TxBuf[3]=tab1[a];
Nrf905驱动程序
nRF905.h"
#defineucharunsignedchar
unsignedcharTxAddress[4]={TX_ADDR_Byte0,TX_ADDR_Byte1,TX_ADDR_Byte2,TX_ADDR_Byte3};
RFConfigRxTxConf=
10,
RFConfig_Byte0,RFConfig_Byte1,RFConfig_Byte2,RFConfig_Byte3,RFConfig_Byte4,
RFConfig_Byte5,RFConfig_Byte6,RFConfig_Byte7,RFConfig_Byte8,RFConfig_Byte9
staticvoidDelay(ucharn)
uinti;
while(n--)
/*******************************************************************************************/
//functionInitIO();
初始化IO
voidnRF905Init(void)
/*SPIinit*/
SpiInit();
//CSN=1;
//Spidisable
//SCK=0;
//Spiclocklineinithigh
DR=1;
//InitDRforinput
AM=1;
//InitAMforinput
PWR_UP=1;
//nRF905poweron
Delay(4);
TRX_CE=0;
//SetnRF905instandbymode
TX_EN=0;
//setradioinRxmode
//====================
/*
TX_EN_DDR=1;
TRX_CE_DDR=1;
PWR_UP_DDR=1;
DR_DDR=0;
CD_DDR=0;
*/
//functionWriteTxAddress();
写入目标地址
voidWriteTxAddress(void)
unsignedcharlen=(RxTxConf.buf[2]>
>
4);
CSN=0;
//Spienableforwriteaspicommand
SpiWrite(WTA);
//Writeaddresscommand
//for(i=0;
TX_AWF;
for(i=0;
len;
SpiWrite(TxAddress[i]);
}
CSN=1;
//Spidisable
//functionConfig905();
//配置905寄存器
voidConfig905(void)
uchari;
//Spienableforwriteaspicommand
SpiWrite(WC);
//Writeconfigcommand写放配置命令
RxTxConf.n;
i++)//Writeconfigrationwords写放配置字
SpiWrite(RxTxConf.buf[i]);
//DisableSpi
WriteTxAddress();
//functionSetTxMode();
设置为发送模式
voidSetTxMode(void)
{
TX_EN=1;
Delay
(1);
//delayformodechange(>
=650us)
}
//functionSetRxMode();
设置为接收模式
voidSetRxMode(void)
TRX_CE=1;
=650us)
//发送数据包
voidTxPacket(unsignedchar*TxBuf)
SpiWrite(WTP);
//Writepayloadcommand
TX_PW;
RxTxConf.buf[4];
SpiWrite(TxBuf[i]);
//Write32bytesTxdata
//Spidisable
//SetTRX_CEhigh,startTxdatatransmission
//while(DR!
=1);
//SetTRX_CElow
/*
*******************************************************************************************
*读取数据包
*返回值:
1-成功接收到数据0-没有接收到数据
*/
unsignedcharRxPacket(unsignedchar*RxBuf)
if(DR)//DR高电平有接收到数据
TRX_CE=0;
//SetnRF905instandbymode
CSN=0;