学霸笔记

霸气de小男生 提交于 2020-01-16 18:42:58

北邮摄像头

一、摄像头基本原理

我们的像素是多少
不需要太大的像素,不然会降低接受图像速度
提高帧数,降低像素
中断处理PCLK像素值、HREF行、VSYNC场:一场一zhen

1、用到的就是行中断和场中断

  • 行\场中断:需要用到外部引脚中断,同步
  • DMA传输:一般:外设到CPU到内存;DMA:由DMA控制器直接向外设取数据,此时CPU就只需要等待DMA完成接受的信号
  • 中断处理:行中断来了,存到一个数组里,行到达像素高度,行中断清零,场中断,盯着
  • Field_Over_Flag=1
  • 当然,直接接受场中断就更好了

2、图像采集优化

  • 没记

二、摄像头图像处理

1.1、图像二值化

  • 根据环境在出发前设定固定阈值:小于阈值直接设成白色(0)
  • 通过OLED打印,通过按键对于图像二值化阈值进行调整
  • 大津法,遍历阈值,发现方差最大

2、赛道边线提取

2.1 图像校正

  • 获取摄像头视野角度,水平倾角,高度
  • 计算实际图像与获取图像的XY坐标对应关系
  • 对于缺失值进行
  • 加权来计算缺失点计算量太大,只需要关键点(比如:赛道边缘什么)

2.2 赛道中心提取

2.2.1 常规赛道
  • 捕捉赛道左侧右侧边缘坐标
  • 计算梯度幅度和方向;保留局部梯度最大的点,已得到细化的边缘
2.2.2 特殊赛道
  • 环岛识别检测、十字交叉路口
  • 找出关键特征

三、摄像头代码框架

1、main.c

  • 关闭总中断,防止初始化失败,初始化结束,就开中断
  • 清空缓冲区

2、imageprocess

  • 设置二值化阈值(可使用大津法)
  • while循环
  • 如果接收到场中断,行场中断关闭!!然后操作,最后场中断flag置零
  • 具体步骤:清零一些参数、寻找边线、获取标志位、传到OLED刷新等等

3、isr.c

  • pit_isr,用pit控制pid,因为pid有积分微分,pid最好放在pit里

4、图像采集伪代码

  • 从下面行开始读取,因为下面的信息比较有用,读取的有效行与车速成正比(前瞻性)
  • lastmiddleplace
  • 左侧找得到边缘、右侧找不到边缘:右侧用边框、右边补线
  • 重点:每行和画面中线的偏差值做累加、越远的权值应该越大、输入pid控制中,来控制舵机
  • 多少行、行权重、每次记录这次的中心值(毕竟每张图片都是连续的)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!