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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//本程序对黑线提取做了很大的改进,未对十字弯处理

/*******************************************/

//本程序中加入了一些用于显示车模状态的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

#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_PB4//十字弯

#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,以后每传来一帧数据更新一次float Kp=0.8;//舵机方向比例系数

float Kd=5.0;//舵机方向微分系数

float MotorSpeed_Factor=6.0;//马达控制

unsigned char Image_Data[ROW][COLUMN];

unsigned int Left[ROW],Right[ROW];//左右黑线

unsigned int VisualMiddle[ROW];//虚拟中线

unsigned int Middle[ROW];//最终存放中间黑线值的二维数组

unsigned int Row_Attribute[ROW];//行属性

unsigned int row,column;

int m=0;//计算采集到的行数

unsigned 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;//右黑线丢失计数

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_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}; unsigned int HS_Pointer=0;//指向行数数组中的数据

int error[2]={0,0};//舵机PD调节时的误差参数

void delay(unsigned int Time)

{ //一般,Time设为10000,可以实现1秒一次

int i,j;

for(i=0;i

for(j=0;j<8;j++) {

}

}

void SlowDown(int timer){

int i;

PWMDTY2=0;

PWMDTY3=50;

for(i=0;i

_asm(nop);

PWMDTY3=0;

PWMDTY2=Speed;

}

/**************************************************

** 函数名称: 图像灰度值采集

** 功能描述: 采集像素值

** 输入: 无

** 输出: 无

相关文档
最新文档