摄像头组很稳定的黑线提取算法

上传人:re****.1 文档编号:512625816 上传时间:2024-01-08 格式:DOCX 页数:28 大小:90.34KB
返回 下载 相关 举报
摄像头组很稳定的黑线提取算法_第1页
第1页 / 共28页
摄像头组很稳定的黑线提取算法_第2页
第2页 / 共28页
摄像头组很稳定的黑线提取算法_第3页
第3页 / 共28页
摄像头组很稳定的黑线提取算法_第4页
第4页 / 共28页
摄像头组很稳定的黑线提取算法_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《摄像头组很稳定的黑线提取算法》由会员分享,可在线阅读,更多相关《摄像头组很稳定的黑线提取算法(28页珍藏版)》请在金锄头文库上搜索。

1、/本程序对黑线提取做了很大的改进,未对十字弯处理/*/本程序中加入了一些用于显示车模状态的LED灯/*经实测发现,近处的赛道宽度为60左右,远处为30左右,所以用可变赛道宽度进行搜索*/#include /* common defines and macros */#include derivative.h /* derivative-specific definitions */个人收集整理 勿做商业用途#include / 函数声明/void delay(unsigned int t);# define HighSpeedLimit 40# define LowSpeedLimit 16#

2、 define SteerLeftLimit -35# define SteerRightLimit 35# define COLUMN 90 / 采集列数# define MID_COLUMN 45 / 中间黑线# define ROW 40 采集行数# define LeftLED PORTB_PB0/ 左转方向灯# define RightLED PORTB_PB1/ 右转方向灯# define SpeedUpLED PORTB_PB2/ 加速指示灯# define SlowDownLED PORTB_PB3/ 减速方向灯# define Crossing_RoadLED PORTB_P

3、B4/ 十字弯# define Dashed_RoadLED PORTB_PB5/ 虚线路段# define Mid_Route_Width_Factor 0.48 / 赛道宽度系数int steer_dire_label=0;int SteerDelta=0;/ 舵机最终的偏转增量unsigned int Speed=0;/ 显示当前PWM2占空比大小unsigned int PreSpeed=0;float Threshold_Factor=0.9; /阈值系数设置unsigned int Threshold=120;/初设动态阈值为90,以后每传来一帧数据更新一次个人收集整理勿做商业用途

4、float Kp=0.8;/舵机方向比例系数float Kd=5.0;/舵机方向微分系数 float MotorSpeed_Factor=6.0;/ 马达控制unsigned char Image_DataROWCOLUMN;unsigned int LeftROW,RightROW;/左右黑线unsigned int VisualMiddleROW;/虚拟中线unsigned int MiddleROW;/最终存放中间黑线值的二维数组unsigned int Row_AttributeROW;/ 行属性unsigned int row,column;int m=0;/计算采集到的行数unsi

5、gned char Line_Flag=0; / 奇偶场unsigned int Line_C=0; /采集行数 d int PreSteerDirection=50;/之前的舵机方向,用与前后上匕较 个人收集整理 勿做商业用途unsigned int LeftFlag=0,RightFlag=0;/左右黑线标志unsigned int Left_Start_Flag=0,Right_Start_Flag=0;/左右起始黑线找到标志个人收集整理勿做商业用途unsigned int L_lost_count=0;/ 左黑线丢失计数unsigned int R_lost_count=0;/ 右黑线

6、丢失计数unsigned int L_last_lost=0;/ 左行上一行丢线标志unsigned int R_last_lost=0;/ 右行上一行丢线标志unsigned int L_last_memory=0;/左行上一次有黑线的黑线所在列数unsigned int R_last_memory=0;/右行上一次有黑线的黑线所在列数unsigned int HS_DataROW=40,45,50,55,60,65,70,75,80,85, 个人收集整理90,95,100,105, 110,115,120,124,128,132,136,140,144,148,152,156,160,16

7、3,166,169,172,175,178,181,184,187,189,191,193,194;unsigned int HS_Pointer=0;/指向行数数组中的数据勿做商业用途int error2=0,0;/ 舵机PD调节时的误差参数void delay(unsigned int Time)/ 一般,Time设为10000,可以实现1秒一次int i,j;for(i=0;iTime;i+)for(j=0;j8;j+) void SlowDown(int timer)int i;PWMDTY2=0;PWMDTY3=50;for(i=0;itimer;i+)_asm(nop);PWMDT

8、Y3=0;PWMDTY2=Speed;/*个人收集整理勿做商业用途*函数名称:图像灰度值采集* *功能描述:采集像素值* *输入:无* *输出:无*说明:个人收集整理勿做商业用途*/ void Data_collect(void)int ia=0;while(ia个人收集整理勿做商业用途个人收集整理勿做商业用途个人收集整理勿做商业用个人收集整理勿做商业用途/* *函数名称:PLL_Init* *功能描述:时钟初始化函数* * 说明:BUS CLOCK=80M*途void PLL_Init(void) /pllclock=2*osc*(1+SYNR)/(1+REFDV);CLKSEL=0x00;

9、/disengage PLL to systemPLLCTL_PLLON=1; /turn on PLLSYNR =0xc0 | 0x09;REFDV=0x80 | 0x01;POSTDIV=0x00;pllclock=2*osc*(1+SYNR)/(1+REFDV)=160MHz;勿做商业用途while(!(CRGFLG_LOCK=1);商业用途/when pll is steady ,then use it;个人收集整理个人收集整理勿做CLKSEL_PLLSEL =1;/engage PLL to system;/*/* P0输出频率为300Hz的方波,用于控制舵机*/*/* P2,P3输

10、出频率为20KHZ,用于驱动电机的转速 /*/ void PWM_Init(void)PWME_PWME0=0x00;/禁止P0PWME_PWME2=0x00;/禁止P2PWME_PWME3=0x00;/禁止P3PWMPOL_PPOL0=1;/PWM Polarity 0开始输出高电平.PWMPOL_PPOL2=1;/PWM Polarity 2开始输出高电平.PWMPOL_PPOL3=1;/PWM Polarity 3开始输出高电平.PWMPRCLK=0x43; /0100 0011 A=80M/8=10M,B=80M/16=5M人收集整理勿做商业用途时钟预分频个PWMSCLA=150; /

11、 SA=A/(2*150)=33.33KHZPWMSCLB=20; /SB=B/(2*20)=125KHZ;PWMCLK_PCLK0=1;/P0 选的是 SA 时钟PWMPOL_PPOL0=1; /选用开始为高电平方式PWMCAE_CAE0=0; /选用左对齐方式PWMCLK_PCLK2=1; P2 选的是 SB 时钟PWMPOL_PPOL2=1; /选用开始为高电平方式PWMCAE_CAE2=0; /选用左对齐方式PWMCLK_PCLK3=1; P2 选的是 SB 时钟PWMPOL_PPOL3=1; /选用开始为高电平方式PWMCAE_CAE3=0; /选用左对齐方式PWMCTL=0x00;

12、 / 控制寄存器设置为无联接对舵机,驱动电机PWM波初始化PWMDTY0=50;P0占空比为50%PWMDTY2=20;/P2占空比为50%PWMDTY3=33;P3占空比为50%PWMPER0=100; /P0:Frequency=SA/100=333.33hzPWMPER2=100; /P2:Frequency=SB/100=1.25KHZPWMPER3=100; /P3:Frequency=SB/100=1.25KHZPWME_PWME0=1; / 打开 P0PWME_PWME2=1; / 打开 P2PWME_PWME3=1; / 打开 P3个人收集整理勿做商业用途个人收集整理勿做商业用/*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号