1、智能机器人课程设计总结汇报 姓 名: 组 员: 指导老师: 时 间: 一、课程设计设计目标了解机器人技术基础知识和相关电工电子学、单片机、机械设计、传感器等相关技术。初步掌握机器人运动学原理、基于智能机器人控制理论,并应用于实践。 经过学习,具体掌握智能机器人控制技术,并使机器人能独立实施一定任务。基础要求:要求设计一个能走迷宫(迷宫为立体迷宫)机器人。要求设计机器人行走机构,控制系统、传感器类型选择及排列布局。要有走迷宫策略(软件步骤图)。对于走迷宫小车控制系统设计关键有多个方面:控制电路设计,传感器选择和安放位置设计,程序设计二、总体方案2.1 机器人寻路算法选择将迷宫看成一个m*n网络,
2、机器人经过传感器反馈信息感知迷宫形状,并将各个节点和周围节点联通性信息存放于存放器中,再依据已经构建好地图搜索离开迷宫路径。这里可选择回溯算法。对每个网格从左到右,每个网格含有4个方向,分别定义。并要求机器人行进过程中不停探测前方是否有障碍物,同时探测时按左侧规则,进入新网格后优先探测目前方向左侧方向。探测过程中统计每个网格四个方向上状态:通路、不通或未知,探测得到不一样状态后记统计,同时统计目前网格四个方向是否已被探测过。若某网格四个方向全部探测过则利用标志位表示该网格已访问。为了寻求到从起点到终点最好路径,统计目前网格在四个方向上邻接网格序号,由此最终可在机器人已探测过网格中利用Dijks
3、tra算法找到最好路径。并为计算方便,统计网格所在迷宫中行号、列号。并机器人探索过程中设置一个回溯网格栈统计机器人经过迷宫网格序号及方向,此方向是从一个迷宫网格到下一个迷宫网格经过方向。设置一个方向队列统计机器人在某网格内探测方向次序。设置一个回溯路径数组统计需要回溯时从回溯起点到回溯终点迷宫网格序号及方向。考虑到迷宫比较简单,且关键为纵横方向直线,可采取让小车在路口一直左转或一直右转方法走迷宫,也就是让小车沿迷宫边缘走。这么最终也能走出迷宫。此次课程设计采取此方法。即控制策略为机器人左侧有缺口时,向左进入缺口,当机器人前方有障碍是,向右旋转180,其它情况保持前进。2.2 传感器选择因为需要
4、检测机器人左侧和前方是否有通路,采取红外传感器对机器人行进方向和左侧进行感知。红外避障传感器是依据红外线反射来工作。当碰到障碍物时,发出红外线被反射面反射回来,被传感器接收到,信号输出引脚就会给出低电平提醒信号。本机器人系统红外避障信号采取直接检测方法进行,直接读取引脚电平。传感器感应障碍物距离阈值能够经过调整传感器上变阻器来改变。行进过程中,机器人可能会偏绿迷宫横轴或纵轴方向。碰触传感器利用外力作用传输给单片机信息,当碰触传感器碰到迷宫墙壁后,传感器检测到信号就能够判定小车碰壁。经过电路处理后,信号输出接口输出数字信号送给控制器,从而让控制器进行决议调整小车姿态。本机器人系统共使用了2个碰触
5、传感器,分别安装在小车左前方和右前方,使得机器人在偏离航向撞击迷宫侧面后能够立即对航向进行修正。四个传感器一共占用四个外部中止。3.3 总体结构设计碰撞开关直流电机电机驱动模块电源模块STM32红外避障传感器三、具体实现3.1 芯片选择最小系统已经设计好,此次课程设计采取控制芯片为STM32F103RBT6它是32位Cortex-M3内盒控制芯片, 主频达成72MHz, 拥有128kB 闪存, 20kB SRAM,锁相环,内置 8MHz and 32kHz时钟电路,含有PWM模块,方便电机转速控制。3.2 控制电路设计(1)电机驱动:电机驱动电路原理图图所表示,采取BTS7960芯片驱动电机,
6、以控制机器人两个驱动轮,利用PWM控制方法,经过改变PWM波占空比,达成调整电机转速目标,实现机器人前进,后退,转向,刹车等功效。每个电机全部由一个H桥电路驱动,由两个输入信号共同控制。两个电机共由4路PWM波进行控制,结合上述电机驱动原理,小车运动方法能够经过以下方法实现:四个控制信号均为低电平时,电机停转,小车停止;电机左右轮电机同向等速运行时,能够实现前行或后退动作;小车左右转向经过两轮差速来实现。在本机器人设计中,需要实现90角度转弯,是经过电机定速运动和延时配合完成,经过不停调试确定出最好旋转时间。(2)电源模块:采取电池供电,可行供电方案原理图以下(3)引脚(外部中止)分配:PA0
7、,PA4,PA5,PA15为中止输入引脚。PA0引脚对应外部中止由机器人前向红外传感器触发,PA4,PA5分别连接机器人前进方向左侧和右侧碰撞开关,PA4,PA5上升沿信号代表机器人和迷宫左,右侧发生碰撞,触发对应地终端服务程序,调整航向。PA15接收左侧红外传感器产生触发信号,当机器人左侧出现缺口时,触发中止服务程序,机器人向左转向进入缺口。3.3 程序设计部分(1)机器人移动:机器人靠两个驱动轮,一个从动轮进行移动,每个驱动轮由一个电机,两个驱动芯片进行控制。驱动芯片输出电平高低决定电机转向,占空比决定了电机转速。首先应配置芯片PWM模块,具体过程以下:#include pwm.hfloa
8、t mo1,mo2,mo3,mo4;void PWM_Init(u16 arr,u16 psc) RCC-APB1ENR|=1CRL&=0X00FFFFFF;GPIOA-CRL|=0XBB000000;GPIOA-ODR|=16|1CRL&=0XFFFFFF00;GPIOB-CRL|=0X000000BB;GPIOB-ODR|=10|1ARR=arr; TIM3-PSC=psc;TIM3-CCER|=11|15|19|1CCMR1|=712|7CCMR1|=111|1CCMR2|=712|7CCMR2|=111|1CCER|=112|18|14|1CR1=0x0080; /ARPE TIM3-
9、CR1|=1EGR |= 1CR1|=0x01;本段代码使能TIM3时钟,启用PA6,PA7,PB0,PB1引脚复用功效,并对计数器进行对应设置(向下计数),使得芯片能在这四个引脚上输出所需PWM波。因为前进,后退,转向,全部是反复性动作,直接对这些操作进行宏定义,需要时候直接调用,能减轻程序编写负担:#define Moto_PwmMax 899 /#define LEFT_MOTOR_F TIM3-CCR1#define LEFT_MOTOR_B TIM3-CCR2#define RIGHT_MOTOR_B TIM3-CCR3#define RIGHT_MOTOR_F TIM3-CCR4注
10、:TIM3产生PWM波对应寄存器宏定义以下#define go_forward LEFT_MOTOR_F =3500;LEFT_MOTOR_B =0; RIGHT_MOTOR_F =3500; RIGHT_MOTOR_B =0;#define go_back LEFT_MOTOR_F =0; LEFT_MOTOR_B =3500; RIGHT_MOTOR_F =0; RIGHT_MOTOR_B =3500;#define turn_left LEFT_MOTOR_F =0; LEFT_MOTOR_B =0; RIGHT_MOTOR_F =4000; RIGHT_MOTOR_B =0;#defi
11、ne turn_left_90 LEFT_MOTOR_F =0; LEFT_MOTOR_B=0;RIGHT_MOTOR_F=4000;RIGHT_MOTOR_B=0;delay_ms(800);delay_ms(800);delay_ms(600);RIGHT_MOTOR_F=0;#define turn_right LEFT_MOTOR_F =4000;LEFT_MOTOR_B =0;RIGHT_MOTOR_F =0;RIGHT_MOTOR_B =0;delay_ms(200);#define turn_back_righ LEFT_MOTOR_F=4000;LEFT_MOTOR_B=0;R
12、IGHT_MOTOR_F=0;RIGHT_MOTOR_B=4000;delay_ms(800);delay_ms(800);delay_ms(400);LEFT_MOTOR_F=0;RIGHT_MOTOR_B=0;#define turn_back_left LEFT_MOTOR_F =0; LEFT_MOTOR_B =4000;RIGHT_MOTOR_F =4000;RIGHT_MOTOR_B=0;delay_ms(800);delay_ms(800);delay_ms(400);LEFT_MOTOR_B=0;RIGHT_MOTOR_F=0;#define stop LEFT_MOTOR_F
13、 =0; LEFT_MOTOR_B =0;RIGHT_MOTOR_F =0;RIGHT_MOTOR_B =0;/多个机器人基础动作宏定义因为采取向下计数方法,CCR中值代表对应引脚高电平连续时间长度,响应值越大,PWM占空比越大,驱动电机转速越快。(2)机器人对外界感知及对应中止服务程序编写:#includeexti.hvoid EXTIX_Init(void) RCC-APB2ENR|=1CRL&=0XFF00FFF0;GPIOA-CRL|=0X00880008; GPIOA-CRH&=0X0FFFFFFF;GPIOA-CRH|=0X80000000;GPIOA-ODR|=(1PR=1PR=1PR=1PR=1APB2ENR|=1CRL&=0XFF00FFF0;/PA0,4,5设置成输入 GPIOA-CRL|=0X00880008; GPIOA-CRH&=0X0FFFFFFF;/PA15设置成输入 GPIOA-CRH|=0X80000000; GPIOA-ODR|=(1PR=1PR=1PR=1PR=115; /清除LINE0上中止标志位