履带机器人创新课程结题报告组员:顾志伟3130304046杨成武3130304047焦建祥3130304048郭全燃3130304049指导教师:肖凤一、履带机器人作品简介履带机器人,是指该机器人所用履带的构形可以根据地形条件和作业要求进行适当变化。该机器人的主体部分是两条形状可变的履带,分别由两个主电动机驱动。当两条履带的速度相同时,机器人实现前进或后退移动;当两条履带的速度不同时,机器人实现转向运动。通过控制舵机使得履带机器人的机械手臂自由转动并能抓取物体。履带机器人的控制是基于Arduino软件开发的。Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。它构建于开放原始码simpleI/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境Arduino可以接收来自各种传感器的输入信号从而检测出运行环境,并通过控制光源,电机以及其他驱动器来影响其周围环境。Arduino具有以下明显优势:1.开放的源代码。2.简单的编译语言,编译环境。其上位机软件界面整洁简单易学,故由Arduino开发的产品也是五花八门。产品应包括传感器,开发板,及输入输出设备。不同的开发板也有不同的规格。通过机器人零件的组装和软件的调试后,履带机器人就能达到我们的要求自由的移动以及抓取物品。二、履带机器人课程任务1.安装装配履带机器人,并对履带机器人车体实现前进、后退、转弯等运动控制;2.装配好机器人上的机械手臂,并编程实现货物机械手臂的运动控制;3.编写程序,使得履带机器人完成如下图所示的任务:起点终点抓取物250cm200cm50cm50cm150cm机器人从起点出发到达终点后机械手抓取货物后沿原路返回到终点。机器人运动的控制方式不限形式,可以采用手柄控制、语音控制、传感器循迹控制、蓝牙、WiFi等多种形式,只要实现上述运动轨迹要求即可。4.撰写履带机器人创新课程结题报告,报告包含以下内容:履带机器人作品简介、研制过程、创意设计及实现,自我评价、作者的自我介绍及完成课程的心得体会等。三、履带机器人研制过程1.车体拼装及调试履带车车体上下板由四根铜棒支撑,左右两板与上下两板由螺钉链接,左右两板各五个轴承以支撑履带,左右各设置一直流电动机,与齿轮相连,齿轮与履带啮合,带动履带运动。为保证履带长度适宜,需对履带进行剪裁,各部分安装时螺钉处需加弹簧垫片防松。具体安装步骤参考《Robo-SoulTK系列履带底盘组装教程》,安装果见下图:车体安装部分需要注意⑴相同部分铜棒应保证使用一致。⑵螺钉与螺母及垫圈应配套使用。⑶轴承应紧定。⑷履带应保证与齿轮啮合良好,A侧朝外。⑸电动机应保证内部齿轮啮合良好,不允许出现松动及卡死现象等。车体的控制即控制两电动机协调转动。控制部分为ArduinoRomeo板及双通道电机驱动器系列DBH-1series(以下称放大板)共同控制,放大板实现将信号电压放大以控制电机转动的目的,Romeo有上位机软件Arduino控制,传输并处理信号,Romeo可用USB或电池供电,放大板必须用电池提供放大电压,接线参考《DBH-1_系列电机驱动使用手册》,如下图所示。欲采用电池为Romeo供电,需将放大板供电端口并联至Romeo外电源,外电源接口处有开关可控制是否供电。程序控制部分:(1)车体运动的控制电机转速可调整,相应端口需接PWM,即模拟量输出,输出值大小决定电机转动状态及速度,模拟量输出采用analogWrite()语句。由于电机输出功及履带长度的影响,相同模拟量输出下两电机转速可能不同,需进行测试确定,保证相应输出下车体可走直线。(2)蓝牙模块的调试脱机工作采用蓝牙控制,蓝牙模块为BLE-Link,Romeo上具有蓝牙模块接口,由于Romeo特点,蓝牙接口为1号串口,本组采用串口监视器监控输入,应注意语句使用对应1号端口。蓝牙模块可与手机配对,需蓝牙4.0以上版本,蓝牙模块波特率可直接利用ArduinoIED上位机软件串口设置。设置步骤及语句如下:打开串口监视器,设置115200bps及BothNL&CR,发送+++,显示EnterATmode表示进入AT指令模式,选择没有结束符输入指令。常用AT指令如下:AT+ROLE=?查询芯片主从状态ROLE-CENTRAL主机;ROLEPERIPHERAL从机;AT+UART=****设置波特率为****AT+NAME=@@@@设置和查询当前设备名称为@@@@AT+EXIT退出AT指令模式(3)手机与蓝牙模块的配对为保证正确配对,我们使用手机为iphone5s蓝牙版本4.0,软件使用bluno终端。最终控制程序如下:inta=11;intb=10;intc=6;intd=5;voidsetup(){pinMode(a,OUTPUT);//此处确定输入输出端口,pinMode(b,OUTPUT);pinMode(c,OUTPUT);a/b控制左边履带,c/d控制右边pinMode(d,OUTPUT);履带。Serial1.begin(115200);}//Serial1.代表1号串口,由蓝voidloop(){intchuan;if(Serial1.available())牙模块输入信号。{chuan=Serial1.read();if(chuan=='q'){qian();}if(chuan=='h'){hou();}//利用if语句控制车体运if(chuan=='z'){zuo();}动状态。q代表前;h代表后;z代表左;y代表右;t代表停。if(chuan=='y'){you();}if(chuan=='t')ting();}}voidqian(){analogWrite(a,LOW);analogWrite(b,160);analogWrite(c,120);analogWrite(d,LOW);}voidhou(){analogWrite(b,LOW);analogWrite(a,159);analogWrite(c,LOW);analogWrite(d,157);}voidyou(){analogWrite(b,159);analogWrite(a,LOW);analogWrite(c,LOW);analogWrite(d,LOW);delay(2150);ting();}voidzuo(){analogWrite(a,LOW);analogWrite(b,LOW);analogWrite(d,LOW);analogWrite(c,157);delay(2150);ting();}voidting(){analogWrite(a,LOW);analogWrite(b,LOW);analogWrite(d,LOW);analogWrite(c,LOW);}将蓝牙模块安装在Romeo控制板指定的接口,在Romeo控制板中写入上述程序,即可通过手机控制车体前后左右运动。手机发送命令对应的车体运动形式如下表所示。Q前进H后退Z向左转Y向右转T停止2.机械手臂的安装及调试机械手臂安装主要由顾志伟、杨成武和郭全燃参考安装说明共同完成。机械手臂主要实现抓取重物的目的,由六个舵机实现多个旋转自由度运动,自上向下为方便区分,我们将其记为1/2/3/4/5/6,1号可控制整体绕竖直轴旋转,2号、3号、4号均负责分级抬升重物,5号负责手臂绕轴旋转,6号控制手臂张合。舵机的控制可利用上位机软件控制其角度,将程序写入舵机控制板中,利用手柄控制,根据实际情况,我们拟定了最初方案,将动作组写入了控制板中,但是在执行动作时手臂出现震动不止的现象,老师给出建议,直接将语句写入莱奥纳多中,只使用一个板便可实现控制车体与手臂两部分,接口不够可以只使用两到三个舵机即可实现抓取重物的目的。决定只使用1号、3号及6号舵机。舵机的控制可利用上位机软件控制其角度,将程序写入舵机控制板中,利用手柄控制,根据实际情况,我们拟定了最初方案,将动作组写入了控制板中,但是在执行动作时手臂出现震动不止的现象,老师给出建议,直接将语句写入莱奥纳多中,只使用一个板便可实现控制车体与手臂两部分,接口不够可以只使用两到三个舵机即可实现抓取重物的目的。决定只使用1号、3号及6号舵机。结合最初控制接电机四个pwm接口,至少需要六个模拟信号端口,最初决定的a=11,b=10,c=6,d=5,此处首先使用2,9号端口,只控制3号及6号舵机。写入程序如下:#includeServo.hServomyservo1;Servomyservos;Servomyservoz;inta=11;intb=3;intc=6;intd=5;intang=0;voidsetup(){myservo1.attach(2);myservos.attach(9);myservoz.attach(4);pinMode(a,OUTPUT);pinMode(b,OUTPUT);pinMode(c,OUTPUT);pinMode(d,OUTPUT);//putyoursetupcodehere,torunonce:Serial1.begin(115200);}voidInitial(){myservo1.write(0);myservos.write(0);myservoz.write(0);}voidloop(){intchuan;if(Serial1.available()){chuan=Serial1.read();if(chuan=='q'){qian();}if(chuan=='h'){hou();delay(3500);ting();}if(chuan=='z'){zuo();}if(chuan=='y'){you();}if(chuan=='k'){xiaozuo();}if(chuan=='l'){xiaoyou();}if(chuan=='t')ting();if(chuan=='w'){qian();delay(250);ting();}if(chuan=='e'){qian();delay(3500);ting();}if(chuan=='1'){for(intangle=0;angle=90;angle++){myservo1.write(angle);delay(20);}}if(chuan=='2'){for(intangle=90;angle=0;angle--){myservo1.write(angle);delay(20);}}if(chuan=='3'){for(intangle=30;angle=90;angle++){myservos.write(angle);delay(20);}}if(chuan=='4'){for(intangle=90;angle=30;angle--){myservos.write(angle);delay(20);}}if(chuan=='5'){ang=ang+5;myservoz.write(ang);}if(chuan=='6'){ang=ang-5;myservoz.write(ang);}}}voidqian(){analogWrite(a,LOW);analogWrite(b,152);analogWrite(c,157);analogWrite(d,LOW);}voidhou(){analogWrite(b,LOW);analogWrite(a,163);analogWrite(c,LOW);analogWrite(d,157);}voidzuo(){digitalWrite(a,158);digitalWrite(b,LOW);digitalWrite(d,LOW);digitalWrite(c,157);delay(627);ting();}voidyou(){digitalWrite(b,158);digitalWrite(a,LOW);digitalWrite(c,