机电系统综合实践
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
15级机械电子专业《机电系统综合实践》课程设计报告
基于STM32的机械臂控制
一、设计目的
1.掌握STM32的基本工作原理和开发使用方法; 2.掌握STM32中断结构和对中断的处理过程; 3.掌握STM32异步串口的工作原理和使用方法; 4.掌握OV2640、蓝牙模块和键盘的使用原理及编程方法; 5.掌握舵机工作原理和使用方法;
6.熟悉6自由度机械臂正逆运动学分析方法。 二、设计内容
本实验使用OV2640获取“跳一跳”游戏界面图像,经STM32开发板处理后获取控制信息,发送至机械臂控制其自动进行游戏。具体内容分解如下:
1.在STM32开发板上使用OV2640获取图像,并在液晶显示屏上显示;
2.通过异步串口(蓝牙)在上位机上显示预处理后的图像; 3.对预处理后的图像进一步处理,获取目标点和距离等信息,进一步计算获取机械臂控制信息; 4.经串口将控制信息发送至机械臂; 5.使用按键控制STM32开发板的工作状态。
三、设计原理
1.图像信息采集及处理
根据设计要求,采用OV2640获取“跳一跳”游戏界面图像,并进行调试采集图
像分辨率,其工作原理是:按一定的分辨率,以隔行扫描的方式采样图像上的点,当扫描到某点时,就通过图像传感芯片将该点处图像成一一对应关系的电压值,然后将此电压值通过视频信号端输出,并将图片保存在相应的存储器内。通过图像矩阵赋值为对应的RGB 值,调试出所需的灰度图像。 2.功能(函数)分解
图像转换及灰度处理功能函数: //图像转换将16位值分别赋值给r,g,b while(pixcnt < 100*120*2) { r=ov2640_rgb565[pixcnt] & 0xF8;
g=((ov2640_rgb565[pixcnt]&0x07)<<5)+((ov2640_rgb565[pixcnt+1]&
0xE0)>>3);
b=(ov2640_rgb565[pixcnt+1] & 0xF8)<<3;
//图像的灰度处理 ov2640_HSV[pixcnt1++]=(r*30 + g*59 + b*11 + 50)/100; pixcnt += 2; } pixcnt=0; pixcnt1=0;
img_out();
………………………………………
装 …………………………………
订 ……………………………
线 …………………………
机电工程学院_________专业_______年级姓名_______________________
//寻找图像的最低亮度 min=255;// for(i=0;i<100;i++) for(j=0;j<120/2;j++) if(ov2640_HSV[i*120+j] min=ov2640_HSV[i*120+j]; //寻找相邻的像素小于50的像素点 for(i=0;i<100;i++) for(j=120-1;j>0;j--) if((int)ov2640_HSV[i*120+j] -(int)ov2640_HSV[i*120+j-1])<-50) { right1[i]=j-1; break; } 3.程序流程图 4.获取目标点和距离(函数) //寻找棋子的中心点 left=0; right=0; for(i=100-1;(int)i>0;i--) for(j=0;j for(k=right1[i];k>0;k--) if(ov2640_HSV[i*120+k]==min) { right=k; goto MAN_X; } } LCD_ShowChar(man_x*4,man_y*4,'X',24,1); 5.机械臂的控制 (1)RP 关节是组成机械臂/机器人的基础,R 是旋转关节(Revolute Joint ),P 是平移关节(Prismatic Joint )。基础关节肯定是只有一个自由度(Degree of freedom/DOF)的,旋转关节只绕某一个轴旋转,平移关节只在某一条直线上运动。 (2)DH 模型通过限制原点位置和 X 轴的方向,人为减少了两个自由度,因此它只需要用四个参数即可表达关节之间原本是六自由度的坐标变换。DH 选的四个参数都有非常明确的物理含义: link length (连杆长度):两个关节的轴(旋转关节的旋转轴,平移关节的平移轴)之间的公共法线长度。 link twist (连杆扭转):一个关节的轴相对于另一个关节的轴绕它们的公共法线旋转的角度。 ……………………………………… 装 ………………………………… 订 …………………………… 线 ………………………… 机电工程学院_________专业_______年级姓名_______________________ link offset (连杆偏移):一个关节与下一个关节的公共法线和它与上一个关节的公共法线沿这个关节轴的距离。 joint angle (关节转角):一个关节与下一个关节的公共法线和它与上一个关节的公共法线绕这个关节轴的转角。 (3)逆运动学最基本的思路,是从正运动学反过来,对于机械臂而言,也就是已知末端执行器的位置和朝向,求每个关节的角度。机械臂的三维运动是比较复杂的,这里为了简化模型更加便于大家的理解,对模型进行精简,先去掉下方云台的旋转关节,这样就可以在二维的平面上进行运动学分析了。 6.函数内具体问题的处理 (1)图像储存时对存储空间大小的定义:当储存空间过大时会出现内存不足的问题,当过小时会无法成功获取到图像,因此 要多次尝试找出一个合适的存储区间,编程设置如下程序设计: #define OV2640_JPEG_WIDTH 1024 //JPEG 拍照的宽度 #define OV2640_JPEG_HEIGHT 768 //JPEG 拍照的高度 u8* ov2640_framebuf; //帧缓存 u8* ov2640_rgb565; u8* ov2640_HSV; extern u8 ov_frame; //在timer.c 里面定义 //文件名自增(避免覆盖) //mode:0,创建.bmp 文件;1,创建.jpg 文件. //bmp 组合成:形如"0:PHOTO/PIC13141.bmp"的文件名 //jpg 组合成:形如"0:PHOTO/PIC13141.jpg"的文件名 void camera_new_pathname(u8 *pname,u8 mode) { u8 res; u16 index=0; while(index<0XFFFF) { if(mode==0)sprintf((char*)pname,"0:PHOTO/PIC%05d.bmp",index); else sprintf((char*)pname,"0:PHOTO/PIC%05d.jpg",index); res=f_open(ftemp,(const TCHAR*)pname,FA_READ); //尝试打开这个文件 if(res==FR_NO_FILE)break; //该文件名不存在=正是我们需要的. index++; ……………………………………… 装 ………………………………… 订 …………………………… 线 ………………………… 机电工程学院_________专业_______年级______班 姓名_________学号________________