全向自动巡线搬运机器人
课程设计报告书
题 目 全向自动巡线搬运机器人
学 院 湖南文理学院芙蓉学院
专 业
班 级
学 号
姓 名
指导教师
2014 年 1 月 1日
一、课程设计目的
自动机器人在现代工业和生产中广泛运用,大大减少了人力物力。而机器人要完成指定动作,不光需要机械手臂,驱动模块,还需要准确的定位。这不光需要依靠指定的完成机械手臂的动作,同时还需要接受外部的检测信号。在这次课程设计中,我们自主设计组装了自动巡线机器人,完成在指定线路上的搬运物件工作。主要熟悉了机器人制作的整个流程(包括设计,仿真,安装,调试等),利用SolidWorks 装配机器人,COSMOSMOTION 仿真,机器人调试过程,A VR 单片机编程,UP-Commander 调试环境,A VR Studio 的Gcc 编程环境,电机及舵机控制等。
二、课程设计任务
(1)利用Solidworks 装配机器人,并进行运动仿真;
(2)利用已给零件及传感器搭建设计机器人;
(3)运用UP-Commander 在线调试机器人运动;
(4)运用A VR Studio编程环境编写C 语言下载至A VR 单片机中完成指定动作;
三、硬件介绍
1. 控制模块:
图中为MultiFLEX 2-AVR Controller Datasheet控制卡,基于控制卡编程实现机器人的功能。
●功能概述
MultiFLEX2-AVR 控制器是一款小型机器人通用控制器,集成开关量传感器、模拟量传感器、R\C舵机、机器人总线舵机控制接口,具有RS422总线接口和RS232 接口,具有丰富的扩展能力。具体特点如下:
●控制接口丰富
可以控制R/C 舵机、机器人总线舵机,直流电机伺服驱动器等。
●数据接口丰富
12路双向IO 接口,8 路10 位精度的AD 接口;RS-422总线、RS-232 接口。
●多种开发环境
配套NorthSTAR 图形化集成开发环境,无需编写C 语言即可完成机器人控制程序编写。此外,也支持AVRStudio ,Eclipse 等IDE 开发环境。
●接口开放彻底
MultiFLEX 2-AVR 开放所有底层源码,用户可以参照这些源码开发自己的程序,也可以调用已封装的函数接口。MultiFLEX 2-AVR 控制器有丰富的自我保护机制,对于超负荷功率输出、电源反向输入、电池电压过低、电源输入电压过高等具有软硬件保护,可以及时有效保护控制器,并提示用户错误信息。MultiFLEX 2-AVR 控制器可以配备ZigBee 无线网络电
台,实现机器人无线控制,机器人组网,可为群体机器人研究、多机器人协作等科研领域提供快速机器人原型。
MultiFLEX 2-AVR 控制器的具体参数如下所示:
● 主处理器ATmega128@16MHz,协处理器ATmega8@16MHz;
● 6 个机器人舵机接口,兼容Robotis Dynamixel AX12+;
● 8 个R/C舵机接口;
● 12 个TTL 电平的双向I/O 口,GND/VCC/SIG 三线制;
● 8 个AD 转换器接口(0—5V );
● 2 个RS-422 总线接口(可挂接1-127 个422 设备) ;
● 1 个无源蜂鸣器;
● 通过RS-232 与上位机通讯,可选无线通讯模组;
● 使用USB 接口的AVR-ISP 下载调试器。
应用领域
● 小型机器人;
● 其它要求配置多种传感器、执行器,机电系统快速原型。
2.舵机的介绍:
图中为proMOTION CDS 系列机器人伺服电机:
功能概述
proMOTION CDS 系列机器人伺服电机(机器人舵机)属于一种集电机、伺服驱动、总线式通讯接口为一体的集成伺服单元,非常适合替代RC 舵机,作为微型机器人的关节、轮子、履带驱动,也可用于其他简单位置控制场合。主要特点如下:
●大扭矩:16Kgfcm
●高转速:最高0.16s/60°输出转速
●DC 6.8V~14V 供电
●0.32°位置分辨率
●双端输出轴,适合安装在机器人关节
●高精度全金属齿轮组,双滚珠轴承
●连接处O 型环密封,防尘防溅水
●位置伺服控制模式下转动范围0-300°
●在速度控制模式下可连续旋转,调速
●总线连接,理论可串联254 个单元
●高达1M 通讯波特率
●0.25KHz 的伺服更新率
●具备位置、温度、电压、速度反馈
●通讯协议兼容Robotis Dynamixel
CDS5516 机器人舵机采用先进的伺服控制技术和高速微处理器,响应速度快、到位准确无抖动。相比传统RC 舵机50Hz 的控制频率,CDS 系列机器人舵机通过高达250Hz 的控制频率,确保位置控制的准确和保持力矩的稳定性。 CDS5516 机器人舵机采用周转型高精度电位器测量位置,舵机输出轴可连续整周旋转,运动扭矩输出高达16kgf.cm 。 CDS5516 具备总线接口,理论多至254 个机器人舵机可以通过总线组成链型, 通过异步串行接口统一控制。每个舵机可以设定丌同的节点地址,多个舵机可以统一运动也可以单个独立控制。 CDS5516 的通讯指令集完全开放,舵机通过异步串行接口不用户的上位机通讯, 用户可对其参数设置、功能控制。通过异步串行接口収送指令, CDS5516 可以设置为电机模式或位置控制模式。在电机模式下,CDS5516 可以作为直流减速电机使用,速度可调;在位置控制模式下,CDS5516 拥有0-300°的转动范围,在此范围内具备精确位置控制性能,速度可调。CDS5516 机器人舵机的外形和安装方式兼容传统舵机。
应用领域
CDS5516 继承RC 舵机的优点,并针对机器人应用进行了优化。其理想应用领域是: 小型仿人形机器人
小型关节式机器人
其他小型仿生机器人
机器人轮子、履带驱动
需要简单位置控制的工业自动化
3. 红外线传感器
红外线传感器是利用红外线的物理性质来进行测量的传感器。红外线又称红外光,它具有反射、折射、散射、干涉、吸收等性质。
4. 灰度传感器
灰度传感器是模拟传感器,有一只发光二极管和一只光敏电阻,安装在同一面上。灰度传感器利用不同颜色的检测面对光的反射程度不同,光敏电阻对不同检测面返回的光其阻值也不同的原理进行颜色深浅检测。在有效的检测距离内,发光二极管发出白光,照射在检测面上,检测面反射部分光线,光敏电阻检测此光线的强度并将其转换为机器人可以识别的信号。
四、课程设计步骤
1、机构设计
整个全向运动搬运机器人由大致三个模块组成:
1. 由4直流电机与4轮组成的驱动模块。
2. 由7舵机组成的搬运卸载模块。
3. 又1个红外线传感器和两个灰度传感器组成的传感模块。
2、其完成的任务为
1.沿着指定黑色轨迹带上进行运动,停止以及调整动作转弯,这个功能由驱动部分和红外线传感部分协作完成。
2. 在指定地点进行货物的搬运与卸载,这一部分主要由机器人上部的机械手和灰度传感部分协作完成。
实际图
通过Solidworks 装配零件如下图,并进行运动仿真,曲线见附页
3、机构装配
整个全向运动搬运机器人由1个控制板,4个电机组成转向机构,7个舵机组成手臂模块,1个红外线传感器和2个灰度传感器以及相应的连接件构成。
安装舵机前,先将舵机接入控制板上的CH 端口,将舵机复中位,减少以后调试过程中由于中位不对而导致的重新搭建的冗余过程。先将4个直流电机与转向舵机组成驱动模块组装完成后,与底板固定完成底部的搭建工作,在机械臂中分配7个舵机,一个舵机负责夹子的转动,一个舵机负责夹子的夹紧与松开功能,其他舵机负责装夹物的定位。
4、连接电缆
1.将车轮4个电机串联在一起,再通过一端接入MultiFLEX 控制卡上。
2.将车轮7个舵机串联在一起,再通过一端接入MultiFLEX 控制卡上。
3.将红外线传感器接入MultiFLEX 控制器io 口上。
4.将两个灰度传感器接入MultiFLEX 控制器ad 口上。
5、微调初始姿态
为了更好的进行预期动作,可以将机器人的舵机位置调整合适,由于之前已将舵机调整中位,所以这部调整较为简单,只需旋转舵机的舵盘的位置即可,即当机器人通电后,舵机
自动调至中位,此时为机器人的初始姿态。之后的所有调试,都是基于这个初始姿态设计的。
6、机器人步态调试
我们在UP-commander 下调试机器人的预期动作,通过调节舵机转角、转速,电机的转速、运动时间来完成预期机器人的动作,包括机器人的直行,转弯,机械臂的装夹物件等动作,过程中应注意USB-Serial 接口的位置,金属片应指向芯片。在在线调试环境中,完成各个动作的细节数值,包括转角,转速及运动时间等。由于UP-commander 环境下无法读取IO 口的数值,所以要完成传感器部分的设计必须采用C 语言的调试环境。
7、AVR Studio调试程序
在该编译环境下,可以更直观的观测到所有输出与输入端口,可以很好的完成对机器人的控制。
源代码见附页, 程序流程如下:
当小车偏离黑色带时,灰度传感器检测到偏离,当左边灰度传感器检测到时,控制器控制左边车轮前进,右边车轮后退,就实现了小车向右转弯,当右边灰度传感器检测到时,控制器控制右边车轮前进,左边车轮后退,就实现了小车向左转弯,若没有检测到黑带,左右车轮都前进,
当前面有障碍物时,红外线传感器检测到障碍物,向MultiFLEX 控制器io 口上传输低电平,机器人停止前进,控制器向手臂发出指令,这时各舵机按照手臂预定动作程序运动。
五、功能描述
该自动巡线机器人能够准确的识别小弧度的弯道,并能迅速准确的校正前进的姿态保证机器人能够准确的沿指定的路线前进,并在指定的位置停止,装夹货物。
六、 总结
通过这次课程设计,我们了解了机器人的制作过程,自己亲手安装调试开发机器人,不仅锻炼了我们的动手能力,而且还在过程中熟悉了嵌入式系统的编程设计,不知不觉中锻炼了我们的创新思维。平时在课上学到电机和运动副的问题,却很少有机会去动手实现这些,这次让不但让我们亲手接触这些,还学会了控制电机,运用他们调整机器人的运动及稳定性。不仅将平时课本中的知识移植到了实验中,还在实践中不断的完善知识体系,更好的达到了学以致用的目的。
整个课程设计下来,发觉那些看似高科技的机器人原来离我们并不那么遥远,只要好好发挥我们的创新能力,没有做不到的只有想不到的。其实我们想开发的功能还很多,但是由
于时间和器件的问题,我们只开发了机器人中的一小部分,当这一小部分就让我们感受到了其中的艰辛与快乐。当调试过程中屡次受挫时,我们没有放弃,不断的修改程序,不断的仿真曲线,当我们初见成效时,我们击掌相庆。
总之,经过了这个课程设计让我们受益匪浅,锻炼自己的动手能力,还体现了团队合作的精神,从头到尾我们都是一个团体,收获颇多。
附页:
一、Solidworks 运动仿真曲线:
图1 前轮角速度曲线
图2 前轮角加速度曲线
图3 前轮平均速度曲线
图4 前轮动能曲线
图5 前轮舵机角速度曲线
图6 前轮舵机角加速度曲线
图7 舵机动能曲线
二、机器人装配图:
三、机器人工程图
四、C 语言源程序
#include "Apps/SystemTask.h"
uint8 SERVO_MAPPING[11] = {1,2,3,4,5,6,7,10,20,30,40}; int main()
{
int ad[2] = {0};
int io0 = 0;
MFInit();
MFInitServoMapping(&SERVO_MAPPING[0],11);
MFSetPortDirect(0x00000FFE);
MFSetServoMode(1,0);
MFSetServoMode(2,0);
MFSetServoMode(3,0);
MFSetServoMode(4,0);
MFSetServoMode(5,0);
MFSetServoMode(6,0);
MFSetServoMode(7,0);
MFSetServoMode(10,1);
MFSetServoMode(20,1);
MFSetServoMode(30,1);
MFSetServoMode(40,1);
while (1)
{
io0 = MFGetDigiInput(0);
ad[0] = MFGetAD(0);
ad[1] = MFGetAD(1);
if (io0==0)
{
MFSetServoPos(1,860,80);
MFSetServoPos(2,488,80);
MFSetServoPos(4,400,80);
MFSetServoPos(5,540,80);
MFSetServoPos(6,860,80);
MFSetServoPos(7,290,80);
MFSetServoRotaSpd(10,0);
MFSetServoRotaSpd(20,0);
MFSetServoRotaSpd(30,0);
MFSetServoRotaSpd(40,0);
MFServoAction();
DelayMS(8000);
MFSetServoPos(1,860,80);
MFSetServoPos(2,488,80);
MFSetServoPos(3,220,80);
MFSetServoPos(4,400,80);
MFSetServoPos(5,540,80);
MFSetServoPos(6,860,80);
MFSetServoPos(7,510,80);
MFSetServoRotaSpd(10,0);
MFSetServoRotaSpd(20,0);
MFSetServoRotaSpd(30,0);
MFSetServoRotaSpd(40,0);
MFServoAction();
DelayMS(3000);
MFSetServoPos(1,550,80);
MFSetServoPos(2,488,80);
MFSetServoPos(3,300,80);
MFSetServoPos(4,420,80);
MFSetServoPos(5,550,80);
MFSetServoPos(6,860,80);
MFSetServoPos(7,510,80);
MFSetServoRotaSpd(10,0);
MFSetServoRotaSpd(20,0);
MFSetServoRotaSpd(30,0);
MFSetServoRotaSpd(40,0);
MFServoAction();
DelayMS(4500);
MFSetServoPos(1,550,80);
MFSetServoPos(2,488,80);
MFSetServoPos(3,300,80);
MFSetServoPos(4,420,80);
MFSetServoPos(5,550,80);
MFSetServoPos(6,860,80);
MFSetServoPos(7,300,80);
MFSetServoRotaSpd(20,0);
MFSetServoRotaSpd(30,0);
MFSetServoRotaSpd(40,0);
MFServoAction();
DelayMS(4000);
MFSetServoPos(1,680,60);
MFSetServoPos(2,488,60);
MFSetServoPos(3,400,60);
MFSetServoPos(4,300,60);
MFSetServoPos(5,420,60);
MFSetServoPos(6,860,60);
MFSetServoPos(7,300,60);
MFSetServoRotaSpd(10,0);
MFSetServoRotaSpd(20,0);
MFSetServoRotaSpd(30,0);
MFSetServoRotaSpd(40,0);
MFServoAction();
DelayMS(5000);
MFSetServoPos(1,860,80);
MFSetServoPos(2,488,80);
MFSetServoPos(3,860,80);
MFSetServoPos(4,770,80);
MFSetServoPos(5,680,80);
MFSetServoPos(6,860,80);
MFSetServoPos(7,300,80);
MFSetServoRotaSpd(10,0);
MFSetServoRotaSpd(20,0);
MFSetServoRotaSpd(30,0);
MFSetServoRotaSpd(40,0);
MFServoAction();
DelayMS(4000);
}
else
{
if (ad[0]
{
MFSetServoPos(1,860,80); MFSetServoPos(2,488,80); MFSetServoPos(3,860,80); MFSetServoPos(4,770,80); MFSetServoPos(5,680,80); MFSetServoPos(6,860,80); MFSetServoPos(7,300,80);
MFSetServoRotaSpd(10,180); MFSetServoRotaSpd(20,180); MFSetServoRotaSpd(30,180); MFSetServoRotaSpd(40,180); MFServoAction();
}
else
{
if (ad[1]
{
MFSetServoPos(1,860,80); MFSetServoPos(2,488,80); MFSetServoPos(3,860,80); MFSetServoPos(4,770,80); MFSetServoPos(5,680,80); MFSetServoPos(6,860,80); MFSetServoPos(7,300,80); MFSetServoRotaSpd(10,-180); MFSetServoRotaSpd(20,-180); MFSetServoRotaSpd(30,-180); MFSetServoRotaSpd(40,-180); MFServoAction();
}
else
{
MFSetServoPos(1,860,80); MFSetServoPos(2,488,80); MFSetServoPos(3,860,80); MFSetServoPos(4,770,80); MFSetServoPos(5,680,80); MFSetServoPos(6,860,80); MFSetServoPos(7,300,80); MFSetServoRotaSpd(10,512); MFSetServoRotaSpd(20,-512); MFSetServoRotaSpd(30,512); MFSetServoRotaSpd(40,-512); MFServoAction();
DelayMS(500);
}
}
}
DelayMS(50);
} }