目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导: https://blog.csdn.net/qq_37340229/article/details/128243277
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于机器视觉的室内智能安防车系统 -STM32和 OpenCV
课题背景和意义
实现技术思路
一、系统整体设计
1)Android 手机端实现了用户与小车的交互,用户通过手机端为小车自动巡逻规划路线,路线数 据的生成分为路线规划与路线学习两种方式。
2)智能小车对实时获取的视频数据进行火焰和入室人员检测,检测后的图像数据压缩编码并上传至云平台
3)网关作为小车与云平台通信的桥梁,实现了与无线 路 由 器 的 连 接 以 及 TCP 数 据 与 串 口 数 据 的 相 互转换。
二、智能安防车硬件系统设计
1)STM32F407 核心板外围配备多种传感器实现对环境参数的采集;
2)树莓派为核心板的机器视觉单元通过 CSI 接口连接 CMOS 摄像头,通过串口与 STM32 双向通信,通过双绞与网关进行连接,实现其采集图像数据的 上 传 。
三、室内安防车自动巡逻机制的实现
如果叉积结果大于 0,拐向为右拐;叉积结果小于0,拐向为左拐。
图为智能车自动巡逻导航流程,每读取一帧如表 所示数据,安防车自动行驶一段路,直到数据帧读完,则 安防车行驶完整条路线,导航结束。 首先对行径控制标 识进行判断,如果标识为前进或后退,控制器控制电机 旋转,从而驱动安防车,在行驶过程中通过电机编码器 对电机转速进行测量。
由于 MCU 处理的是离散信号,因此需使用PID离 散化公式。假设采样时间间隔为 T,则在 k时刻,偏差为 e ( k ),积分为 e ( k ) + e ( k - 1 ) + e ( k - 2 ) + … + e ( 0 ),微分为( e ( k ) - e ( k - 1 ) ) T,离散化后的公式如下:
式中:比例系数为 Kp;积分系数为 Kp ⋅ T Ti,用 Ki 表示; 微分系数为 Kp ⋅ Td T,用 Kd表示。可以写成如下形式
旋转精确角度实现机制
要使 F最小,即下式成立:
再由上式进行数据补偿,下式得到偏航角:
四、基于 OpenCV 图像识别的火焰识别
更新样本集的权重分布:
3)将各个弱分类器加权平均得到强分类器
五、分类器设计及软件实现
利用 OpenCV 库实现,首先训练用于检测 火焰的分类器,在准备好一定数量的正负样本以及对样 本进行预处理后,通过 OpenCV 自带的命令进行训练, 设计设置分类器的级联层数为 20,每一层的最低 正确检测率为 0.999,最大错误接受率为 0.5,1 000 个正 样本,600 个负样本,图片宽高为 60,在 CPU 为双核四线 程 2.6 GHz,内存为 8 GB 配置的 PC 上耗时 8 h 15 min 完成。
代码部分
void display(uchar temp) //判断障碍距离小车的距离,左转180,前进,峰呤器报警1602显示
{ uint ge,shi,bai,i;
if((temp<=20)&&(temp>2)) //小于15厘米 小车后退 再左转 { back(); left_180(); } if(count>=20) {bai=temp/100; //1602显示数据 date_data[5]=bai; shi=(temp0)/10; date_data [6]=shi; ge=temp0; date_data[7]=ge; for(i=0;i<8;i++) { LCD1602_WriteCom(0x80+i); LCD1602_WriteData(date_data[i]+48); } count=0; } }
void bizhang_test() { int i,j=0;
uchar distance_dat; delay(50); for(i=0;i<8;i++) { LCD1602_WriteCom(0x80+i); LCD1602_WriteData(ENCHAR_PuZh7[i]); } while(1) { run(); EA=0; //关总中断 TRIG=1; // 发射20us脉冲信号 delay(30);
'.
.
TRIG=0;
while(ECHO==0); //等待接收信号 state=0; //标志清零 EA=1; //开总中断 EX0=1; //打开外部中断0 P3.2外部中断0引脚 此时为高电平 TH0=0x00; //定时器0 初值 TL0=0x00;
TF0=0; // 定时器0方式1计数溢出标志 TR0=1; // 定时器0方式1启动定时器1
while(state!=1);
EX0=0; // 关闭外部中断0 TR0=0; // 关闭定时器0中断 TF0=0; // 定时器1方式1计数溢出标志 if(state==1) //检测到障碍物计算离障碍物的距离 { time=(timeH*4.352+timeL*0.017); //设定超声波的速度为340m/s 计数一次1us distance_dat=time; } else //未检测到障碍物 无返回信号 {
distance_dat=0; } distance[j]=distance_dat; j++; if(j==3) { if(distance[0]>distance[1]) {} else { distance[0]=distance[1]; } if(distance[0]>distance[2]) {} else { distance[0]=distance[2]; } if(distance[0]>distance[3]) {} else { distance[0]=distance[3];
'.
定时 } distance_dat=distance[0]; j=0; display(distance_dat); } count++; } }
void xunji_test() { int i; delay(50); for(i=0;i<8;i++) {
LCD1602_WriteCom(0x80+i);
LCD1602_WriteData(ENCHAR_PuZh6[i]); } while(1) {
// delay(10); state_1=HW;
DAT=state_1&(0x0f); //判断低4位的状态 switch(DAT) { case 0x00: run(); break; case 0x01: right_120(); break; case 0x02: right_90(); break; case 0x04: left_90(); break; case 0x06: run(); break; case 0x03: right_120(); break; case 0x08: left_120();
实现效果图样例
我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。
毕设帮助,疑难解答,欢迎打扰!