北邮摄像头
一、摄像头基本原理
我们的像素是多少
不需要太大的像素,不然会降低接受图像速度
提高帧数,降低像素
中断处理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控制中,来控制舵机
- 多少行、行权重、每次记录这次的中心值(毕竟每张图片都是连续的)
来源:CSDN
作者:谁的铁王座
链接:https://blog.csdn.net/jokerxsy/article/details/104008256