机器人课程设计报告_第1页
机器人课程设计报告_第2页
机器人课程设计报告_第3页
机器人课程设计报告_第4页
机器人课程设计报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、智能机器人课程设计总结报告姓 名:组 员:指导老师:时间:一、课程设计设计目的了解机器人技术的基本知识以及有关电工电子学、单片机、 机械设计、 传感器等相关技术。初步掌握机器人的运动学原理、 基于智能机器人的控制理论, 并应用于实践。 通过 学习,具体掌握智能机器人的控制技术,并使机器人能独立执行一定的任务。基本要求: 要求设计一个能走迷宫 (迷宫为立体迷宫 )的机器人。 要求设计机器人的行走 机构,控制系统、传感器类型的选择及排列布局。要有走迷宫的策略(软件流程图) 。对于 走迷宫小车控制系统设计主要有几个方面:控制电路设计,传感器选择以及安放位置设计, 程序设计二、总体方案2.1 机器人的

2、寻路算法选择将迷宫看成一个 m*n 的网络,机器人通过传感器反馈的信息感知迷宫的形状, 并将各个 节点的与周围节点的联通性信息存储于存储器中, 再根据已经构建好的地图搜索离开迷宫的 路径。这里可选择回溯算法。对每个网格从左到右,每个网格具有 4 个方向,分别定义。并 规定机器人行进过程中不停探测前方是否有障碍物, 同时探测时按左侧规则, 进入新网格后 优先探测当前方向的左侧方向。 探测过程中记录每个网格的四个方向上的状态: 通路、 不通 或未知, 探测得到不同状态后记记录, 同时记录当前网格的四个方向是否已被探测过。 若某 网格四个方向全部探测过则利用标志位表示该网格已访问。 为了寻找到从起点

3、到终点的最佳 路径,记录当前网格在四个方向上的邻接网格序号, 由此最后可在机器人已探测过的网格中 利用 Dijkstra 算法找到最佳路径。并为计算方便,记录网格所在迷宫中行号、列号。并机 器人探索过程中设置一个回溯网格栈记录机器人经过的迷宫网格序号及方向, 此方向是从一 个迷宫网格到下一个迷宫网格经过的方向。 设置一个方向队列记录机器人在某网格内探测方 向的顺序。设置一个回溯路径数组记录需要回溯时从回溯起点到回溯终点的迷宫网格序号及 方向。考虑到迷宫比较简单, 且主要为纵横方向的直线, 可采用让小车在路口始终左转或者始 终右转的方法走迷宫, 也就是让小车沿迷宫的边沿走。 这样最终也能走出迷宫

4、。 本次课程设 计采用此方法。 即控制策略为机器人左侧有缺口时, 向左进入缺口, 当机器人前方有障碍是, 向右旋转 180°,其余情况保持前进。2.2 传感器的选择由于需要检测机器人左侧和前方是否有通路,采用红外传感器对机器人行进方向和左侧进行感知。红外避障传感器是依据红外线的反射来工作的。当遇到障碍物时,发出的红外线被反射面反射回来,被传感器接收到,信号输出引脚就会给出低电平提示信号。本机器人系统的红外避障信号采用直接检测的方式进行,直接读取引脚电平。 传感器感应障碍物的距离阈值可以通过调节传感器上的变阻器来改变。行进过程中,机器人可能会偏绿迷宫的横轴或纵轴的方向。碰触传感器利用外

5、力的作用传递给单片机信息,当碰触传感器碰到迷宫墙壁后,传感器检测到信号就可以判断小车碰壁。 经过电路处理后,信号输出接口输出数字信号送给控制器,从而让控制器进行决策调整小车姿态。本机器人系统共使用了 2个碰触传感器,分别安装在小车的左前方和右前方,使得机器人在偏离航向撞击迷宫侧面后可以立即对航向进行修正。四个传感器一共占用四个外部中断。3.3总体结构设计锁相环,内置8MHz and 32kHz时钟电路,具有 PWM模块,方便电机转速的控制。3.2控制电路设计(1)电机驱动:电机驱动电路原理图如图所示,采用BTS7960芯片驱动电机,以控制机器人的两个驱动轮,利用PWM控制方法,通过改变PWM波

6、的占空比,达到调节电机转速的目的,实现机器人 的前进,后退,转向,刹车等功能。每个电机都由一个H桥电路驱动,由两个输入信号共同控制。两个电机共由4路PWM波进行控制,结合上述的电机驱动原理,小车运动方式可以通过如下方式实现:四个控制信号均为低电平时,电机停转,小车停止;电机的左右轮电机同向等速运行时,可以实现前行或后退的动作;小车的左右转向通过两轮差速来实现。在本机器人的设计中,需要实现的90°角度转弯,是通过电机定速运动和延时的配合完成的,通过不断调试确定出最佳的旋转时间。(2)电源模块:采用电池供电,可行的供电方案原理图如下(3)引脚(外部中断)分配:PA0,PA4,PA5,PA

7、15为中断输入引脚。PAO引脚对应的外部中断由机器人前向红外传感器 触发,PA4, PA5分别连接机器人前进方向的左侧和右侧的碰撞开关,PA4, PA5的上升沿信号代表机器人与迷宫的左,右侧发生碰撞,触发相应地终端服务程序,调整航向。PA15接收左侧红外传感器产生的触发信号, 当机器人左侧出现缺口时, 触发中断服务程序,机器人 向左转向进入缺口。3.3 程序设计部分(1)机器人的移动:机器人靠两个驱动轮, 一个从动轮进行移动, 每个驱动轮由一个电机, 两个驱动芯片进 行控制。驱动芯片输出电平的高低决定电机的转向,占空比决定了电机的转速。首先应配置芯片的 PWM模块,具体过程如下:#includ

8、e "pwm.h"float mo1,mo2,mo3,mo4;void PWM_Init(u16 arr,u16 psc)RCC->APB1ENR|=1<<1;GPIOA->CRL&=0X00FFFFFF;GPIOA->CRL|=0XBB000000;GPIOA->ODR|=1<<6|1<<7;GPIOB->CRL&=0XFFFFFF00;GPIOB->CRL|=0X000000BB;GPIOB->ODR|=1<<0|1<<1;TIM3->ARR=ar

9、r;TIM3->PSC=psc;TIM3->CCER|=1<<1|1<<5|1<<9|1<<13;TIM3->CCMR1|=7<<12|7<<4;TIM3->CCMR1|=1<<11|1<<3;TIM3->CCMR2|=7<<12|7<<4;TIM3->CCMR2|=1<<11|1<<3;TIM3->CCER|=1<<12|1<<8|1<<4|1<<0;TIM3-

10、>CR1=0x0080; /ARPE e 1? uTIM3->CR1|=1<<4;TIM3->EGR |= 1<<0;TIM3->CR1|=0x01;本段代码使能TIM3时钟,启用PA6, PA7,PB0, PB1引脚的复用功能,并对计数器进行 相应设置(向下计数),使得芯片能在这四个引脚上输出所需的PWM波。由于前进,后退,转向,都是重复性的动作,直接对这些操作进行宏定义,需要的时候直接调用,能减轻程序编写的负担:#define Moto_PwmMax 899/TIM3->CCR1TIM3->CCR2TIM3->CCR3TIM

11、3->CCR4#define LEFT_MOTOR_F#define LEFT_MOTOR_B#define RIGHT_MOTOR_B #define RIGHT_MOTOR_F注:TIM3产生PWM波相应寄存器的宏定义如下 #define go_forwardLEFT_MOTOR_F =3500;LEFT_MOTOR_B =0;RIGHT_MOTOR_F =3500;RIGHT_MOTOR_B =0;#define go_backLEFT_MOTOR_F =0; LEFT_MOTOR_B =3500; RIGHT_MOTOR_F =0; RIGHT_MOTOR_B =3500;#de

12、fine turn_leftLEFT_MOTOR_F =0;LEFT_MOTOR_B =0;RIGHT_MOTOR_F =4000;RIGHT_MOTOR_B =0;#define turn_left_90LEFT_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_rightLEFT_MOTOR_F =4000;LEFT_MOTOR_B =0;RIGHT_MOTOR_F =0;

13、RIGHT_MOTOR_B =0; delay_ms(200);#define turn_back_righLEFT_MOTOR_F=4000;LEFT_MOTOR_B=0;RIGHT_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_leftLEFT_MOTOR_F =0;LEFT_MOTOR_B =4000;RIGHT_MOTOR_F =4000;RIGHT_MOTOR_B=0; delay_ms(

14、800); delay_ms(800); delay_ms(400);LEFT_MOTOR_B=0;RIGHT_MOTOR_F=0;#define stopLEFT_MOTOR_F =0;LEFT_MOTOR_B =0;RIGHT_MOTOR_F =0;RIGHT_MOTOR_B =0;/ 几个机器人基本动作的宏定义响应值越大,由于采用向下计数的方式,CCF中的值代表相应引脚高电平持续时间长度,PW站空比越大,驱动电机转速越快。(2) 机器人对外界的感知及相应中断服务程序的编写:#include"exti.h"void EXTIX_Init(void)RCC->APB

15、2ENR|=1<<2;JTAG_Set(JTAG_SWD_DISABLE);GPIOA->CRL&=0XFF00FFF0;GPIOA->CRL|=0X00880008;GPIOA->CRH&=0X0FFFFFFF;GPIOA->ODR|=(1<<0);Ex_NVIC_Config(GPIO_A,0,FTIR);Ex_NVIC_Config(GPIO_A,4,RTIR);Ex_NVIC_Config(GPIO_A,5,RTIR);Ex_NVIC_Config(GPIO_A,15,RTIR);MY_NVIC_Init(2,1,EXTI

16、0_IRQChannel,4);MY_NVIC_Init(3,1,EXTI4_IRQChannel,4);MY_NVIC_Init(4,1,EXTI9_5_IRQChannel,4);MY_NVIC_Init(1,1,EXTI15_10_IRQChannel,4);GPIOA的配置,使能相关时钟,并将PA0,PA4,PA5,PA1设为输入引脚,并设置好中断优先级。void EXTI0_IRQHandler(void)delay_ms(100);if(KEY0=0)LED1=0;LED2=0;go_back;delay_ms(800);turn_back_right;LED1=1;LED2=1;

17、EXTI->PR=1<<0;前向红外传感器触发的中断服务程序,当PA0出现下降沿时,代表机器人前方已经出现了障碍物,此时执行向右掉头的动作。void EXTI4_IRQHandler(void) delay_ms(100);if(KEY4=1)LED1=0;flag=1;go_back;delay_ms(400);turn_left;delay_ms(400);LED1=1;EXTI->PR=1<<4;右侧碰撞开关触发外部中断, 消抖后判断是否确实发生碰撞, 如果是, 则机器人应向左校正航向。void EXTI9_5_IRQHandler(void) del

18、ay_ms(100);if(KEY5=1)LED2=0;flag=2;go_back;delay_ms(400);turn_right;delay_ms(400);LED2=1;EXTI->PR=1<<5;左侧碰撞开关触发外部中断, 消抖后判断是否确实发生碰撞, 如果是, 则机器人应向右校正航向。void EXTI15_10_IRQHandler(void) delay_ms(100); if(KEY15=1)turn_left_90;while(KEY0=1)go_forward;delay_ms(100);go_back;delay_ms(600);turn_left_9

19、0;while(KEY15=1)if(KEY5=1)go_back;delay_ms(400);turn_right;delay_ms(400);if (KEY4=1)go_back;delay_ms(400);turn_left;delay_ms(400);else go_forward; delay_ms(100); delay_ms(1000); EXTI->PR=1<<15;/PA15 出现下降沿,代表机器人前进方向的左侧出现了缺口,应当执行向左转向的操作。注:中断程序中部分变量的宏定义如下#define KEY0 PAin(0)#define KEY4 PAin(4

20、)#define KEY5 PAin(5)#define KEY15 PAin(15)(3) 主程序设计:PWM外部首先进行初始化,调用实现写好的函数使能相关时钟,配置相关引脚的功能,使得模块能正常工作,对 NVIC 进行设置,使得四个由传感器触发外部中断能共正常工作。进行初始化后, 在没有碰撞开关,机器人前方没有障碍, 左侧没有缺口的情况下,中断都不触发,机器人应该保持向前行走的状态,程序如下:#include "test.h"int flag=0;u8 mode='0'float distance=0;int main(void)Stm32_Clock_

21、Init(9);delay_init(72);uart_init(72,9600);PWM_Init(10000,0);EXTIX_Init();led_int();while(1)go_forward;(4) 程序流程图说明:附件:程序/ 主程序#include "test.h"#define KEY0 PAin(0)#define KEY4 PAin(4)#define KEY5 PAin(5)#define KEY15 PAin(15)#define LED2 PCout(11) / PA8 板子上的红灯,上面的#define LED1 PCout(12) / PD2

22、int main(void)Stm32_Clock_Init(9); / 主频 72M delay_init(72); / 延时初始化uart_init(72,9600); / 初始化串口 1(PA9,PA10、) 串口 2(PA2,PA3、) 串口 3(PB10,PB11) PWM_Init(10000,0);EXTIX_Init();led_int();while(1)go_forward;/ 中断程序#include"exti.h"/ 外部中断初始化程序/初始化 PA0,PA4,PA5,PA1为中断输入.void EXTIX_Init(void)RCC->APB

23、2ENR|=1<<2; /使能 PORTA时钟JTAG_Set(JTAG_SWD_DISABLE关闭 JTAG和 SWDGPIOA->CRL&=0XFF00FFF0;/PA0,4,设 置成输入 GPIOA->CRL|=0X00880008;GPIOA->CR H&=0X0FFFFFFF;/PA1 设置成输入GPIOA->ODR|=(1<<0); /PA0,4 上拉Ex_NVIC_Co nfig(GPIO_A,O,FTIR);/下降沿触发,反转Ex_NVIC_Co nfig(GPIO_A,4,RTIR);/上升沿触发,左转Ex_NV

24、IC_Co nfig(GPIO_A,5,RTIR);/上升沿触发,右转Ex_NVIC_Co nfig(GPIO_A,15,RTIR);/上升沿触发,缺口MY_NVIC_Init(2,1,EXTI0_IRQChannel,4);/抢占 2,子优先级 1,组 4MY_NVIC_Init(3,1,EXTI4_IRQChannel,4);MY_NVIC_Init(4,1,EXTI9_5_IRQChannel,4);MY_NVIC_Init(1,1,EXTI15_10_IRQChannel,4);/外部中断0服务程序PA.O PB.O PC.0PG都对应到中断线 0void EXTI0_IRQHandler(void)delay_ms(100);/ 消抖if(KEY0=0) /按键 2LED1=0; /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论