摄像头组很稳定的黑线提取算法.docx
《摄像头组很稳定的黑线提取算法.docx》由会员分享,可在线阅读,更多相关《摄像头组很稳定的黑线提取算法.docx(33页珍藏版)》请在冰豆网上搜索。
![摄像头组很稳定的黑线提取算法.docx](https://file1.bdocx.com/fileroot1/2023-6/10/b42cbc30-71b2-4312-a7e5-904269770c6e/b42cbc30-71b2-4312-a7e5-904269770c6e1.gif)
摄像头组很稳定的黑线提取算法
//本程序对黑线提取做了很大的改进,未对十字弯处理
/*******************************************/
//本程序中加入了一些用于显示车模状态的LED灯
/*经实测发现,近处的赛道宽度为60左右,远处为30左右,所以用可变赛道宽度进行搜索*/
#include/*commondefinesandmacros*/
#include"derivative.h"/*derivative-specificdefinitions*/个人收集整理勿做商业用途
#include
//-----------函数声明-----------------//
voiddelay(unsignedintt);
#defineHighSpeedLimit40
#defineLowSpeedLimit16
#defineSteerLeftLimit-35
#defineSteerRightLimit35
#defineCOLUMN90//采集列数
#defineMID_COLUMN45//中间黑线
#defineROW40//采集行数
#defineLeftLEDPORTB_PB0//左转方向灯
#defineRightLEDPORTB_PB1//右转方向灯
#defineSpeedUpLEDPORTB_PB2//加速指示灯
#defineSlowDownLEDPORTB_PB3//减速方向灯
#defineCrossing_RoadLEDPORTB_PB4//十字弯
#defineDashed_RoadLEDPORTB_PB5//虚线路段
#defineMid_Route_Width_Factor0.48//赛道宽度系数
intsteer_dire_label=0;
intSteerDelta=0;//舵机最终的偏转增量
unsignedintSpeed=0;//显示当前PWM2占空比大小
unsignedintPreSpeed=0;
floatThreshold_Factor=0.9;//阈值系数设置
unsignedintThreshold=120;//初设动态阈值为90,以后每传来一帧数据更新一次个人收集整理勿做商业用途
floatKp=0.8;//舵机方向比例系数
floatKd=5.0;//舵机方向微分系数
floatMotorSpeed_Factor=6.0;//马达控制
unsignedcharImage_Data[ROW][COLUMN];
unsignedintLeft[ROW],Right[ROW];//左右黑线
unsignedintVisualMiddle[ROW];//虚拟中线
unsignedintMiddle[ROW];//最终存放中间黑线值的二维数组
unsignedintRow_Attribute[ROW];//行属性
unsignedintrow,column;
intm=0;//计算采集到的行数
unsignedcharLine_Flag=0;//奇偶场
unsignedintLine_C=0;//采集行数dintPreSteerDirection=50;//之前的舵机方向,用与前后比较个人收集整理勿做商业用途
unsignedintLeftFlag=0,RightFlag=0;//左右黑线标志
unsignedintLeft_Start_Flag=0,Right_Start_Flag=0;//左右起始黑线找到标志个人收集整理勿做商业用途
unsignedintL_lost_count=0;//左黑线丢失计数
unsignedintR_lost_count=0;//右黑线丢失计数
unsignedintL_last_lost=0;//左行上一行丢线标志
unsignedintR_last_lost=0;//右行上一行丢线标志
unsignedintL_last_memory=0;//左行上一次有黑线的黑线所在列数
unsignedintR_last_memory=0;//右行上一次有黑线的黑线所在列数
unsignedintHS_Data[ROW]={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,163,166,169,
172,175,178,181,184,187,189,191,193,194};
unsignedintHS_Pointer=0;//指向行数数组中的数据
interror[2]={0,0};//舵机PD调节时的误差参数
voiddelay(unsignedintTime)
{//一般,Time设为10000,可以实现1秒一次
inti,j;
for(i=0;i