智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4425|回复: 31
打印 上一主题 下一主题

摄像头软件方面设计思路

  [复制链接]

10

主题

75

帖子

0

精华

高级会员

Rank: 4

积分
709
QQ
威望
346
贡献
257
兑换币
206
注册时间
2014-6-1
在线时间
53 小时
跳转到指定楼层
1#
发表于 2014-11-10 12:57:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
摄像头软件设计
                                    

整体框架如右图;

【初始化算法】
v  1.锁相环的设置
#define BUS_CLOCK //总线频率
//初始化锁相环(16M模板)
void pll_init()
{
CLKSEL&=0X7F;//关闭锁相环
PLLCTL&=0X8F;//控制寄存器,关闭锁相环电路
CRGINT&=0XDF;//清除一些标志位
                      //锁相环选择
#if(BUS_CLOCK==40000000)
        SYNR=0X44;
#elif(BUS_CLOCK==32000000)
        SYNR=0X43;
#elif(BUS_CLOCK==24000000)
        SYNR=0X42;
#endif
REFDV=0X81;
PLLCTL=PLLCTL|0X70;//开启锁相环电路
asmNOP;
while(!(CRGFLG&0X08);
CLKSEL|=0X80;//开启锁相环
}
v  2.脉冲宽度调制(PWM)初始化
1)     通道选择PWMEx//使能 PWMCTL_CON//是否级联
2)     时钟设置PWMCLK//时钟选择 PWMPRCLK//预分频 PWMSCLA/B//比例因子
3)     系统设置PWMPOL_POLx//极性寄存器 PWMCAEx//中心对齐设置
4)     Pwm配置PWMPER//周期 PWMDTY//占空比
v  3.定时中断及输入捕捉通道的初始化
设定预分频系数;定时器溢出中断使能;定时器使能。
v  4A/D转换模块初始化
将模拟的视频电压信号转换成对应的数值,以便于后面的黑线提取算法实现。
v  5.外部中端的初始化
用于捕捉视频信号的行同步信号,产生外部中断以进行图像采集。
【图像采集算法】
v  考虑到实际赛道只是在白色KT板上布置黑色引导线,路径识别只需大致提取出黑色引导线即可,不必每行采集。因此,我们可以采用隔行采集思想来压缩图像的数据。
【黑线提取算法】
v  1.二值化算法:设置一个阈值value将数据预期比较,大于它就是1小于它就是0 记下第一次和最后一次出现像素值小于阈值时的像素点的列号,算出两者的平均值,以此作为该行上目标引导线的位置。
v  2.直接边缘检测算法:首先找到从白色像素到黑色像素的下降沿和从黑色像素到白色像素的上升沿(也用阈值比较寻找),然后计算上升沿和下降沿的位置差,如果大于一定的标准值,即认为找到了黑线,并可求平均值算出黑线的中心点。
v  3.跟踪边缘检测算法:利用跑道黑色目标线是连续的线。若已寻找到某行的左边缘,则下一次就在上一个左边缘附近进行搜寻。这种方法的特点是始终跟踪每行左边缘的附近,去寻找下一列的左边缘,所以称为跟踪边缘检测算法
【图像滤波算法】
v  在调试过程中会出现两段黑线情况,这种图像信息比较复杂,这时可能存在三种路况:
§  1)赛道比较密集时,检测到多条赛道;
§  2)大“S”弯道;
§  3字交叉道。
v  另外,由于智能车上安装的摄像头相对于赛道存在一定的倾斜角度,因此会造成采集到的赛道图像具有一定的梯形失真,即图像中的赛道远端窄、近端宽,因而也会对路径的正确识别产生影响。对于这种失真,可以通过对每行提取的赛道位置添加一个线性修正值来消除,一般通过实验的方法确定线性补偿的系数。
v  偏差大的数据要去掉。
【控制策略及控制算法】
v  1.赛道参数的计算
偏差计算偏差量linepos[j] 数组存放Offset

       
  • 最远行黑线位置linepos[topline]
      
  • 黑线平均位置averlinepos
      
  • 全白行行数whiteline_sum
曲率
v  2.转向控制
1)分段比例控制
2)前馈补偿控制
v  3.速度控制
1)模糊控制设定速度
2PID控制调整速度
【摄像头简单程序】
//信号线A0
//行同步接PT2  
//场同步接PT1
#define lie_end  260      /////列结尾
#define hang_end  100   //////行结尾
#define lie  32//51     //////   
#define delay(num)   /////延时函数
  {
    unsigned int i,j;
   for(i=0;i<num;i++)
      for(j=0;j<48;j++);
  }
unsigned char c_lie=0,g_lie=0;/////你要采集的行列数组计数
unsigned int lie_count=0,hang_count=0;///摄像头行列计数
   
unsigned char shuju[lie][hang_end];/////存放数据的数组
unsigned int get_n[]={ 16,29,41,52,62,71,79,86,92,98,/////////////////存放要采集的行数
                        103,108,112,116,120,124,128,132,135,138,
                        141,144,147,150,153,156,159,162,165,168,
                        170,172,174,176,178,180,182,184,186,188,
                         190,192,194,196,198,200,202,204,206,208,
                        210,211,212,242,243,245,246,247,248,249,250};
#define uchar unsigned char
#define uint unsigned int;
void chaopin(void);    ///锁相程序     
void TIM_init(void);  /////定时器程序(行场中断)
void shijian(void);
void atd_init(void);            
void pwm_init(void);      
#pragma CODE_SEG NON_BANKED
voidinterrupt 10 IC2ISR(void) { //行中断
    TFLG1_C2F=1;
if(lie_count==get_n[c_lie]) {  //定距采集图像的判断条件
   delay(1);   //黑线中心矫正,确保不采集到消隐信号
   for(hang_count=0;hang_count<=hang_end;hang_count++){  //读取一行的数据
      shuju[c_lie][hang_count]=PORTA_PA0;//采集数据的接口
    }
     
  c_lie++; //二维数组行自加
  }
lie_count++; //摄像头行自加
}
void interrupt 9 IC1ISR(void){ //场中断,各数据清零              
  TFLG1_C1F=1;
  hang_count=0;
  lie_count=0;
  c_lie=0;   
  }  
#pragma CODE_SEG DEFAULT
///////////输入捕捉初始化///////////////////////
void TIM_init(void)
{   
PACTL=0X50;
PACNT=0X0000;
  TIOS=0x00;//定时器通道01 为输入捕捉
  TSCR1=0x80;//定时器使能
  TCTL4=0x18;//通道 1 捕捉下降沿通道 2 捕捉上升沿
  TIE=0x06;  //通道 12 中断使能
  TFLG1=0xFF;//清中断标志位
}
void shijian(void) {
  PITCFLMT_PITE=0;      
  PITCE_PCE0=1;         
  PITLD0=9999;  //1  毫秒
  PITMTLD0=5;      
  PITMUX=0X00;
  PITINTE_PINTE0=1;     
  PITCFLMT_PITE=1;
}
void chaopin(void)
{  
   CLKSEL=0X00;   
   PLLCTL_PLLON=1;   
   SYNR =0xc0 | 0x07;                       
   REFDV=0xc0 | 0x01;
   POSTDIV=0x00;      
   _asm(nop);         
   _asm(nop);
   _asm(nop);
   _asm(nop);
   while(!(CRGFLG_LOCK==1));   
    CLKSEL_PLLSEL =1;                    
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

28

主题

2228

帖子

1

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
15817

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章资源大师奖章

QQ
威望
7430
贡献
4213
兑换币
5193
注册时间
2013-12-9
在线时间
2087 小时
2#
发表于 2014-11-10 16:50:31 | 只看该作者
回复 支持 反对

使用道具 举报

27

主题

1517

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
11255

优秀会员奖章活跃会员奖章在线王奖章论坛元老奖章资源大师奖章

威望
4350
贡献
2795
兑换币
2704
注册时间
2013-10-16
在线时间
2055 小时
毕业学校
并没有毕业
3#
发表于 2014-11-10 17:14:51 | 只看该作者
回复 支持 反对

使用道具 举报

15

主题

116

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2210
威望
1106
贡献
668
兑换币
670
注册时间
2014-7-15
在线时间
218 小时
4#
发表于 2014-11-10 17:26:20 | 只看该作者
回复 支持 反对

使用道具 举报

10

主题

75

帖子

0

精华

高级会员

Rank: 4

积分
709
QQ
威望
346
贡献
257
兑换币
206
注册时间
2014-6-1
在线时间
53 小时
5#
 楼主| 发表于 2014-11-10 18:08:17 | 只看该作者
:lol:lol
回复 支持 反对

使用道具 举报

2

主题

561

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3833

活跃会员奖章优秀会员奖章论坛元老奖章在线王奖章

威望
2078
贡献
1105
兑换币
1150
注册时间
2014-6-8
在线时间
325 小时
6#
发表于 2014-11-10 18:21:42 | 只看该作者
回复 支持 反对

使用道具 举报

13

主题

250

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3621
威望
1776
贡献
1079
兑换币
1136
注册时间
2013-11-19
在线时间
383 小时
7#
发表于 2014-11-10 21:51:53 | 只看该作者
你的资料都是自己的?还是哪找的呢?
回复 支持 反对

使用道具 举报

0

主题

396

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4586
QQ
威望
2920
贡献
1166
兑换币
907
注册时间
2014-9-12
在线时间
250 小时
8#
发表于 2014-11-10 22:08:47 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

319

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1599
威望
818
贡献
535
兑换币
493
注册时间
2013-11-16
在线时间
123 小时
毕业学校
大学
9#
发表于 2014-11-10 22:38:57 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

83

帖子

0

精华

高级会员

Rank: 4

积分
821
威望
360
贡献
245
兑换币
254
注册时间
2014-11-10
在线时间
108 小时
毕业学校
南池口小学
10#
发表于 2014-11-11 08:33:54 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-5 21:56 , Processed in 0.057403 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表