目录
一、前言
此篇主要分享在摄像头基础参数的设置经验,如摄像头位置、曝光值,曝光增益,图像大小,帧率等。
同样声明,本文成果均由本人实践和经验得出,并不保证完全正确,仅供入门者学习和参考。
二、摄像头简要说明
早期总钻风摄像头等各类摄像头厂商就软硬件二值化这个方向疯狂内卷(即摄像头上自带芯片可以实现二值化),导致摄像头价格居高不下,但后来主办方规定不准使用能自动二值化的摄像头,导致之前的高价格摄像头不再具备什么优势。据各车友表示,现在各个厂家的摄像头性能都差不太多。所以各个队伍买摄像头的时候,主要选用130°无畸变摄像头就可以。
虽然,但是个人还是推荐使用逐飞的总钻风摄像头,因为前期学习的大部分器件,以至于整个比赛历程,都离不开逐飞,可以说逐飞贵,但不能说逐飞菜,所以这篇文章也是基于总钻风130°无畸变摄像头。
三、总钻风硬件设置
在逐飞官方店铺中购买的总钻风摄像头一般为带有51芯片(可实现硬件二值化)和无芯片两种,但比赛方明确规定不许使用可以硬件二值化的摄像头参加比赛,所以当收到摄像头后一定要检查是否带有51芯片,根据附件内“总钻风摄像头使用说明”或找淘宝客服要最新资料,自行拔除芯片并修改电路。
同样补充一点,当存在二值化51单片机时,摄像头通信方式为SCCB通信(也好像是串口,没有详细了解),但拔除单片机并根据说明修改电路后,通信方式会变为IIC,此时软件库不需修改,仍是直接调用即可。当时我们使用时没有拔51单片机,就因通信方式问题和某处出现了冲突。但不论如何,绝对不可以带可以硬件二值化的摄像头参加比赛。

四、摄像头位置
摄像头前瞻调整是一个很关键的点,摄像头看太远时,图像远端对反光的抗干扰能力大幅下降,即存在强反光时,在几个像素内灰度变化过于剧烈,几乎无算法可以处理。当看的太近时,摄像头失去前瞻性和预判性,摄像头车速度上限之所以比电磁高,是因为摄像头看的远,同时获取信息量大,而电磁相当于摄像头的一行像素。
当赛方无高度限制时,建议高度为30cm左右,近瞻为15-20cm,远瞻为2.5-4m(视觉车看近点好),当车速比较快以后,摄像头前瞻是极度关键的,可以提前看到弯道和元素,进而提前进行加减速操作。要充分利用摄像头得到信息量优势。
当然,对于绝对不竞速的组别来说,摄像头前瞻就尽量近一些,这样抗反光能力会大幅提高。但实际上,只有视觉是不那么竞速的(但国赛第一跑的也特别快,当时赛场擦轮子都把其他视觉组看傻了),其他只要速度上了1m,摄像头前瞻都需要细调,当调整好后再去写元素处理,同时使用热熔胶把所有可能活动的地方固定死,比赛前再补一层AB胶。
五、总钻风参数设置
1.帧率设置


总钻风使用文档中明确说明,总钻风支持1-500帧可调,但高帧率下(如500帧),就无法支持最大的图像传输了(总钻风支持的分辨率最大为752 * 480),同时文档中也明确说明,只有80 * 60的分辨率支持500帧。(图像分辨率后文详细说明)


注:上述两幅图中,Y轴为偏差值,X轴为打点的个数,通信一次打一个点。出现一连串偏差值一样的点是因为算法太快,导致一张图像被连续计算了几十遍。遇到这种情况时可用标志位确保每张图像只计算一次。
那么高帧率有什么好处:
- 1. 首先高帧率会使你偏差值变化的波形极度平滑,使车身转向等操作更加丝滑(在实际使用时,100帧和500帧车身效果有明显差异,肉眼可观,但本身摩托不使用舵机转向,所以实际舵机效果需自行验证);
- 2. 高帧率对高亮光有很好的压制效果(非反光,整体高亮),上了500帧就等于上了一个偏振片。
但500帧也有十足的弊端:
1. 工频干扰,这个逐飞文档中也有说明,简单点说,就是你根据帧率求出总钻风捕获一张图像的时间(如500帧时获取一张图像的时间是2ms)要满足整除一个系数,对于总钻风来说,这个系数是10,这也就是文档中说的一般选用50帧或100的原因(可以自己算一下这个整除关系)。因此任何大于100帧以及1-49,51-99的帧率都会导致工频干扰的出现。但工频干扰实际有什么影响,可以自行去百度了解,实际我们使用时,并未出现什么干扰,因此建议实际验证效果,如果工频干扰影响不大,还是推荐使用500帧来运行(前提是算法要够快)。我们当时因为总钻风高帧率和灯光秀芯片的通信出现了一定的冲突,原因不明,所以不得不降回100帧使用。
2. 高帧率对算法有着极高的要求,不是所有算法都可以肆无忌惮的开500帧去运行,大多数如大津法、sobel边缘检测一般只能开到100帧,而Canny等高运算需求算法,50帧都很勉强。
2.分辨率设置

至于分辨率设置,也需详细说明。细读逐飞文档可以理解,当分辨率的大小可以被752*480整除时(如375*240, 188 * 120),摄像头获取的视野是相同的,所以说没有特殊需求,一般都是选用这个几个值。但必须重点说明,虽然94 * 60虽然也是整除得到,但其视野是188 * 120裁减出来的,视野极度狭窄,所以说一般使用时分辨率都设置为188 * 120。
3.曝光时间设置
每一个负责摄像头的队员都应对曝光值的设置了如指掌。简单点说就是亮了就调低,暗了就调高,但显然逐飞给出了更好的解决方法,下文给出。同时图像的亮暗也受图像帧率的影响,帧率越高图像越暗,反之亦然。所以说高帧率对环境亮度设置了更高的上限。
4.曝光增益设置
逐飞开源库中明确说明:
#define MT9V03X_GAIN_DEF ( 16 ) // 图像增益 范围 [16-64] 增益可以在曝光时间固定的情况下改变图像亮暗程度,
这个其实用处没那么大,当觉得调曝光值已经遇到瓶颈时,可以试试动动曝光增益来改变现有情况,但实际我也没怎么用过这个参数,就无法细说了。
5.比赛参数设置
划重点,如果华东区赛仍然在南信工举行,那么摄像头参数应设置为:
- 分辨率:188*120;
- 自动曝光:0;
- 曝光时间(曝光值):50~100;
- 曝光增益:16~20;
- 图像偏移:全部为0;
- 不上偏振片
上述参数是丢进去就可以保证你完赛的,当然,若有场地变化各位适当调整,但有一点必须说明,在南信工室内体育场的灯光,在观众席,甚至在比赛场地上,看起来都不是那么亮的,但实际打开摄像头以后,上述参数偏大,图像真的是一片白,所以说不要不信邪,参数是之前一个学长场上十五分钟含泪试出来的。
6.自动曝光
之前说过逐飞对于曝光时间和曝光增益的设置给出了更好的解决方案,那显然就是自动曝光了。开了自动曝光,曝光时间和曝光增益就不需再细调,所以说一定要学会设置自动曝光。这里给出国赛参数:
1.分辨率:188 * 120;
2.自动曝光:32;
3.曝光时间:300;
4.曝光增益:16;
5.图像偏移:全部为0;
上述参数适应绝大多数场景,我在实验室也是这套参数,开了自动曝光以后,曝光时间50 ~ 500几乎都可以,增益也可以随便丢一个,但曝光时间和增益参数不要太夸张,适当的情况下,自动曝光都可以帮你适应不同场景,不管是区赛还是国赛,比赛时,建议使用我自动曝光的参数。
7.图像偏移
奇奇怪怪的需求,没用过我也就不多赘述了,有需要的话就得自己研究。正常情况下都不会去设置这个参数。
六、一些建议
- 当摄像头捕捉到的图像很模糊时,先扭摄像头上的镜头,如果扭了几圈发现没什么变化,就多扭几圈,当扭了几十圈都没明显改善时,就要考虑换镜头或者摄像头了,镜头逐飞有单卖。当扭到图像最清晰时,上点热熔胶把镜头固定住(注意不要遮住镜头)。
- 当屏幕上突然显示摄像头报错时,如果代码没动,直接断电,把摄像头和板子上的连接线都重新拔插下就基本上能解决问题。
- 摄像头代码当写的有一定深度时,代码长度上七八千行是不可避免的,一定注意代码规范,几百个变量里,要确保对每一个变量了如指掌,即代码一定要自己一点一点敲出来,确保对每一行代码的熟悉掌握。
- 英飞凌主控芯片对变量格式和运算要求比较严格,比如float变量不使用强制类型转换,直接与其他类型变量做运算时,会导致主控计算极其卡顿,其他类型变量也是同理,当遇到这类问题时,不妨先查查变量的类型关系。同时编写代码时也一定要注意格式和类型的严谨。
- 最后也是最重要的一点,体育馆内的灯光不同于实验室,实验室不论是车模运行还是人行走,正常情况下都不会出现影子。但在体育馆内,车模直接会被射灯打出一圈影子,可以说影子包围了整个车模。同时,人站在体育馆的赛道上,也会出现影子,人的影子打在运行车模摄像头的前方,可能会严重影响摄像头算法的运行导致车模偏出赛道。今年比赛时,就曾看到不止一队有队员跟车行走,而影子时不时会打在摄像头前方,因此也有少数队伍因为这个翻车,主要是紧张的环境下,车模离奇偏出赛道,大多数人找不到原因在哪里。所以正式比赛时,千万要注意自己的影子与车模的位置关系,非必要不跟车,一定不要让自己的影子和裁判的影子(候场时跟裁判沟通好)打在摄像头前方。对于车模自身的影子,只能自求多福了,今年视觉组区赛也是受到了车模影子的影响,但好在有惊无险。