随着靳雪雯的讲解,江寒对战神一号的基本结构,很快就有了初步的了解。
接下来就该研究一下,如何改进它的性能,提升战斗力了。
“这是什么传感器?”江寒指着一个小机关。
靳雪雯看了一眼:“这是碰撞传感器。”
“这一颗呢?”
“红外线传感器。”
……
江寒一个个询问过去。
很快,他就看到了一个小洞洞,表面微微凸起。
江寒仔细看了看:“这里好像是个摄像头?”
靳雪雯点了点头:“这叫二维视觉传感器,其实就是一颗摄像头。”
江寒思索了一下,问:“通过这个东西,战神一号就可以‘看’到目标了吧?”
靳雪雯说:“对的,但因为是二维画面,不太容易判断出距离远近,具体工作过程是这样的……”
江寒用心倾听,同时拿出纸和笔,列了几个式子,写写算算起来。
“战神一号”最大的问题,是攻击移动目标时,射击精度太差。
敌机距离太远,子弹就会发生滞后的现象;敌机距离太近时,又会胡乱“抢拍”。
之所以会有这样的表现,归根结底是因为预测算法有BUG。
要想彻底解决这个问题,还是要从根本处入手。
事实上,对于实弹射击来说,无论数据处理速度多快,都必须对目标的移动轨迹做预测。
否则的话,子弹只会追在敌人的屁股后面,永远打不中。
——当己方机器人经过计算、射出子弹时,敌机早就不在原来的位置上了。
“战神一号”定位敌机时,主要使用超声波传感器,限于硬件精度,效果不算很理想。
所以靳雪雯还利用摄像头,通过采集实时图像,辅助定位。
但她在图像处理时,使用了官方提供的图像识别框架。
说实话,官方出品的这个编程框架,稳定性真的不错,但效率方面就没法期待了。
虽然靳雪雯在NOIP中表现不俗,编程功力相当不错,但想要甩掉框架,从0开始自己造轮子,还是力有不逮的。
此外,她在处理图像数据时,对于深度信息的处理,也有很大的问题。
靳雪雯毕竟才初三,无论信息学还是数学,都缺乏了一点底蕴。
能做到现在这样,已经相当不错了,还真没法苛责她什么。
根据靳雪雯的说法,“战神一号”的反应阈值是0.2秒。
也就是说,从发现目标、确认敌机方位,到经过计算,调整自身姿态,然后发射出子弹,这一系列操作至少需要0.2秒的时间。
但这并不是说,其机载计算机的数据处理速度,只能达到每秒5帧。
真要是那样的话,类比成电脑游戏的画面表现,这已经卡成PPT了……
由于图像处理技术的限制,“战神一号”每秒只能处理大约10帧画面。
这个速率其实不算很慢,基本上达到了参赛机器人的平均水准。
但在瞬息万变的战场上,这样的信息处理速度,显然是无法让人满意的。
关于如何改进“战神一号”,江寒很快就有了思路。
如何通过摄像头,算出与敌机的相对距离?
最容易想到的,就是安装第二颗摄像头,形成三维视觉,然后用立体成像算法,把数据放到三维空间中处理。
但这种算法比较复杂,且需要反复测试,调整参数。
这需要大量时间,可明天就要参赛了,可能会有点来不及。
那么还有没有别的办法呢?
其实是有的。
靳雪雯编写的控制程序,其图像处理部分,在通过像素信息计算深度时,存在相当大的误差,对角度的判断也有一点小问题。
这是导致预测失败的根本原因。
只要对目前的图像识别算法,做出一些改进和优化,使其能正确计算深度(距离)和角度,就能在预测敌机的行动时,大大提高成功率了。
同时还要尽量提高数据处理的效率。
当帧率超过20以上,就能极大缓解各种由于延迟导致的问题,超过30,肉眼就看不出卡顿,如果帧率达到50……
江寒算得十分认真。
靳雪雯聚精会神地偷看着他的侧脸。
不知怎么的,小脸忽然就热了起来,小心脏也跳得更加欢快了。
唔,果然认真工作的男人,才是最有魅力的吗?
靳雪雯默默地想着。
就在这时,江寒嘴角微微勾起,忽然抬头看了她一眼:“战神一号的主控代码,你有备份吧?”
“啊?”靳雪雯正沉迷着,闻言顿时一惊。
慢了不止一拍,她才反应了过来,慌忙点了点头:“哦!”
然后定了定神,说:“有的,有好几个版本。”
江寒洒然一笑:“很好,那我就在目前版本的基础上,试着改进、优化一下,看看效果怎么样。”
靳雪雯连连点头:“好的!”
江寒想了想,又说:“不过,你这个机器人的编程环境,我也不是很熟悉……”
沉吟了一下,说:“要不这样吧,咱们合作一下,我来改进算法,你负责编写代码,怎么样?”
靳雪雯兴奋点头:“太好了,就这么办!”
随后,她就拿出改锥和镊子等工具,拆起了“战神一号”的外壳。
江寒看她笨手笨脚的样子,不由得微微一笑:“行了,交给我吧,你去准备好编程环境就行了。”
靳雪雯只好讪讪地一笑,将工具交给了江寒,然后摆弄起自己带来的笔记本电脑去了。
江寒将战车腹板拆下,从中取下了它的数据处理核心。
这是一块卡片计算机,名为“神机w-2012”,在同类产品之中,性能也算得上可圈可点。
靳雪雯一边忙活,一边给江寒介绍。
“神机”的峰值功耗为8W,搭载了一块1.0GHz的ARMCPU,拥有独立的GPU、2GRAM、128GROM,还带有WIFI和USB接口。
其运算速度还是相当过得去的。
跟高配的台式机、笔记本电脑相比,可能略有不及;但与配置一般的智能手机、平板电脑相比,已经差不了多少了。
只是再多的计算资源,也得合理运用,才能发挥出应有的效能。
江寒将“神机”拆下来之后,交给了靳雪雯,让她用USB线连到笔记本上。
这时,开发专用的IDE,也已经准备就绪了。
江寒在纸面上设计着算法,并让靳雪雯修改相应的代码。
首先要做的,是调整摄像头工作时的分辨率。
“战神一号”搭载的这颗摄像头,一共支持三种分辨率:640×320、1280×720、1920×1080。
清晰度越高,获得的图像质量自然越好,但处理起来也就越慢。
因此,江寒一上来就让靳雪雯将摄像头的工作模式,调整到了640×320。
然后通过调整曝光时间,以及矫正Gamma值等手段,获得更好的图像质量。
接下来,到了第一个关键点:机体识别算法。
靳雪雯在自己编写的程序中,使用了官方的图像识别框架,以实现在采集到的图像中,匹配机体外壳上的特征图案。
江寒看了一下框架的源代码,就知道这个东西能不用最好不用。
这个框架复杂而且臃肿,效能十分低下。
唯一的优点就是易学易用,即使是初中生,也可以只用几个月的时间掌握它。
但现在既然追求极限的效率,那就必须抛弃它,从零开始造轮子!
江寒提出了这一点,靳雪雯却犯了愁:“从头写底层……太难了吧?一晚上的时间,只怕不太够啊。”
江寒微微一笑,平静地说:“这个模块我来写吧,等下你把它整合到主程序里就行了。”
顿了顿:“当然,平台相关的部分,还有涉及到硬件操作的地方,你得随时给我指点,不然我还得时不时去翻官方的白皮书。”
靳雪雯欣然应允,将笔记本电脑推到了江寒面前。
江寒开始工作。
图像识别算法的改进方案,他早就在脑海中打好腹稿了。
实战时用来检测碰撞的“皮肤”上,集成了一些LED灯,用来显示血量等信息。
利用这些LED灯,来检测和判定敌机,无疑是比较适合的。
由于LED是发光的,那么就可以调低曝光,以屏蔽环境光干扰;
再二值化处理一下,图像中除了LED部分,就都变成了黑色。
预处理做得好,在后续步骤中,可以大大降低计算量。
至于如何识别图像中的机体……
江寒的第一个念头,就是各种人工神经网络算法。
运用深度学习技术,对输入图像进行识别,输出所属类别和定位信息……
看起来的确相当有可行性。
但江寒稍微深入一想,就知道这个办法只是看起来很美,在比赛中很可能行不通。