RoboMaster

标题: 【求助帖】机器人装甲块的视觉识别是如何实现的?「上」 [打印本页]

作者: 永不言弃    时间: 2019-4-22 11:42
标题: 【求助帖】机器人装甲块的视觉识别是如何实现的?「上」
本文作者:
东北林业大学Ares战队视觉组前队员 刘祖基
我只是进行分享与转载,感谢他


作者: 永不言弃    时间: 2019-4-22 11:43
首先要说的是,作为一个大学生,在学习之余能够参加比赛是一件非常有意义的事情,当你过完整个大学再回过来看的时候,你可能不会记得你从课堂上学到了多少知识,但是你一定会记得你再在验室学到了什么,在比赛过程中学到了什么。这是一个值得你去付出,而且只要坚持下去就必然丰收的过程。筹赛期间,你会经历各种各样的挑战,你会有压力,你会感到无力,感到自身能力的不足,重新认识自己,不再为一点点的小成就而沾沾自喜,但是只要征服它们你会有前所未有的满足感,这些都是你在课堂上,在书本里体会和学习不到的,说白了,实验室更多的培养的是你的一种能力,一种面临困难举步维艰,仍然不断前行的坚持。
作者: 永不言弃    时间: 2019-4-22 11:43
一. 装甲块的识别
1. 基本思路
对于装甲块的识别,我们目前采用的还是传统的目标检测方法,即通过提取目标的特征老师别目标,而装甲最显著的特征就是灯条以及灯条的颜色。
大致的思路就是,首先降低摄像头的曝光来使得背景更加简单,对于比赛场地复杂的情况来说,这一点是很重要的,在识别一个物体时候你首先要做的就是简化背景避免很多不必要的干扰信息,然后才是对前景和背景的分离,这里的前景指的就是要识别的目标,除了要识别的目标之外都称之为背景。
在降低曝光值之后会得到一幅背景相对简单的图像,然后对目标进行提取,这里主要是识别装甲板的灯柱,既通过两个灯柱来重构装甲。



作者: 永不言弃    时间: 2019-4-22 11:43
2. 摄像头曝光问题
降低摄像头的曝光值可以使得背景简单,但是这个曝光值在不同的环境之下是不同的,这里最理想的就是将曝光值设置为动态自适应的,但是要注意的是这个自适应值的稳定性,摄像头的暴光值每改变一次都需要重置摄像头,这样是很耗时的,所以该自适应的暴光值要在开场时候就根据现场的灯光情况来自适应的确定一个曝光值,之后的整场比赛中则不能够在次调整以免对整个系统造成影响。
我们目前还是采用的手动设置曝光的方法,这个方法的好处就是根据自己在场地实测的效果来设置曝光值,相对来说要更加的可靠,根据写程序者自己的经验来取曝光值。缺点就是很不方便,而却要是场地环境突然变化可能造成影响。所以这里还是建议能够找到一个自适应的方法去设置曝光值。特别注意的是曝光值会对物体颜色有一定的影响。

作者: 永不言弃    时间: 2019-4-22 11:43
3. 灯柱的识别和装甲拟合
在得到一帧图像之后我们要对图像中的灯柱进行识别和提取。
首先是区分颜色。这里采用的是HSV空间的颜色识别,通过设置不同的H,S和V的值可以识别不同的颜色,具体的参数和数值请自行百度查询,值得一提的是这里的V是代表亮度,这个值的取值大小对应相应颜色的亮度,可以简单的理解为发光色和不发光色,比如蓝色的灯就是发光色,蓝色的布就是不发光色。这个也是识别发光灯柱的一个依据,但是取值仍然是一个问题,最好还是能够自适应,如果不行,就只能人工设定,找一个鲁棒性最好的值。这里的H值表示的是色度,这个取值区间可以稍微的比百度的给定区间大一些,这是由于降低曝光对物体本生颜色有影响,需要扩大阈值区间才能更完整的识别到对应的颜色。通过HSV后会得到一个二值图像,白色部分是你要识别的颜色(这里以蓝色举例),黑色部分为其他颜色被当成背景滤除。


作者: 永不言弃    时间: 2019-4-22 11:43
接下来就是拟合轮廓。将识别到的蓝色部分也就是二值图像的白色部分用opencv 的内置找轮廓函数将蓝色部分的轮廓提取出来,这里将较小的轮廓去除(一般较小的轮廓为噪点,不用处理),然后再用最小矩形或者最小椭圆(使用时要注意这两者的区别)将蓝色轮廓部分包围起来,这样你就能够得到包围矩形的旋转角和长度以及宽度(这里要求对最小包围矩形和最小包围椭圆深入理解),通过长宽之间的比值和差值可以判断该蓝色物体受不是灯柱,因为灯柱是长条形,有明显的长宽比和长宽差值以及一些其他的形状信息,然后就是将认为是灯柱的部分进行两两对比,通过他们之间的相对角度和长宽比以及其他性质来判断这两个灯柱是不是同一个装甲的两体灯柱,找到这样的两条灯柱就用他们的信息拟合出装甲,完成识别的任务。这其中还运用到很多形态学的操作,程序里都有体现,这里不再细说。

作者: 永不言弃    时间: 2019-4-22 11:44
要注意的是,识别到单个固定装甲是很容易的,要在复杂的情况下锁定一个装甲就需要更多的逻辑以及策略,要考虑很多实战时候会出现得问题,比如两个装甲同时出现要击打哪一块,大装甲和小装甲同时出现要击打哪一块,当敌人扭腰得时候要怎么击打等。这些都是要考虑的问题。
作者: 永不言弃    时间: 2019-4-22 11:44
二. 坐标变换测距和控制击打
1. solvepnp测距
识别到目标之后就是对目标相对位置的确定。这里可以根据目标物体在一帧图像中像素点的坐标来当做物体的坐标点,在后面控制时只需要将这个坐标量与图像中心点的差值乘以一个系数就可。这里测距使用的是solvepnp算法,该算法以摄像头为坐标原点建立一个摄像头坐标系,只要给出图像中目标的像素点就可以得到目标物体在摄像头坐标系下的坐标(X,Y,Z);其中,X是横坐标,Y为纵坐标,Z为深度(距离)。



作者: 永不言弃    时间: 2019-4-22 11:44
要使用Solvepnp首先要对摄像头进行标定(这里自行百度有很多方法),采用棋盘标定法标定摄像头,得到摄像头的内参矩阵和外参矩阵,将这两个矩阵分别放到一个数组中,具体方式如图2.1所示。其中K为内参矩阵,D为外参矩阵或者叫做旋转平移矩阵。
作者: 永不言弃    时间: 2019-4-22 11:44
接着就是对装甲点的提取,注意实际的装甲点要和图像中的装甲点一一对应,这里采用装甲的左上为坐标原点,分别取左上,左中,左下,右上,右中,右下这6个点为特征点如图2.2所示,单位为米。接下来就是solvepnp API的调用,使用方法如图2.3所示。
作者: 永不言弃    时间: 2019-4-22 11:44
最后会得到一个旋转矩阵rvec和平移矩阵tvec,其中tvec矩阵中(0,0)坐标的数值就是摄像头坐标系下装甲左上角点的X坐标,同样的(1,0)为Y坐标,(3,0)为Z坐标。这里的Z坐标就是所要求的距离。这里需要注意的是装甲的实际特征点和图像中识别到的特征点一定要一一对应不然会出错。



作者: 永不言弃    时间: 2019-4-22 11:44
要注意的问题是,当装甲距离过远一般超过4.5米左右时,solvepnp得到的距离值就会出现不稳定的跳变,这一方面是应为图像中装甲太小,识别和特征点的提取都有很大误差。另一方面可能就是算法本身的不完善,所以这里要多加注意。还有一点就是装甲出现轴向旋转的时候测距也会出现问题。这个影响不是很大,应为在实战中当一个装甲转到另一边的时候必然会有另一块装甲相对你的位置是正面的。


作者: 永不言弃    时间: 2019-4-22 11:47
2. 控制和击打
知道距离之后接下来就是控制和击打。首先要做的就是固定好摄像头的位置,这里的要求就是当装甲出现在摄像头中心的时候,激光点也要正好打在装甲板的正中心,激光点要与弹道协调好,即激光点和子弹击打点重合。在图像中用装甲中心点的像数值与图像中心点的像素值的差值作为控制量,传入到PD控制模块。这里的PD是指PID控制只使用P和D项。采用PD控制能够使系统有更高的响应速度。



作者: 永不言弃    时间: 2019-4-22 11:47
说到控制之前的控制方式有很大的系统延时,根据我的了解,以前的控制系统采用了三个环来控制,这样很大程度上降低了系统的响应速度。哨兵采用的控制方式改为两个环控制之后响应速度有明显的提高,但是用在步兵上时虽然响应速度提高了,但是很容易出现震荡,不稳定。这里希望能够找到一个更高效的控制方式,比如用角度控制,也许还会达到更好的效果。最后要给枪口加上一个弹道补偿,用得计算出的距离和当前弹速来计算时间,算出这个时间弹道的下落高度,适当提高枪口。



作者: 永不言弃    时间: 2019-4-22 11:47
这里最好是能够找到一种新的控制方式取代原来的方式。如果还是采用原来的方式那这一块主要就是参数的调整方面,找到一个合适的PD参数同时要注意限制输出量,考虑目标出现在图像边缘的时候偏差量很大,导致猛的甩头控制超调的情况。
作者: 永不言弃    时间: 2019-4-22 11:47
技术干货|机器人装甲块的视觉识别是如何实现的?「上」 - RoboMaster的文章 - 知乎
https://zhuanlan.zhihu.com/p/55444151
作者: whl970831    时间: 2019-4-22 13:49
.....,大哥,这种水贴强啊
作者: 永不言弃    时间: 2019-4-22 13:59
whl970831 发表于 2019-4-22 13:49
.....,大哥,这种水贴强啊

分享干货
作者: 快拆小分队    时间: 2019-4-22 14:28
实际上刘同学这篇之前已经分享过  https://bbs.robomaster.com/thread-7770-1-1.html
作者: MonsterMechanil    时间: 2019-4-23 14:50
这是什么操作????
作者: DTEzh    时间: 2019-5-17 18:33
厉害了。我围观围观微观下!!




欢迎光临 RoboMaster (https://bbs.robomaster.com/) Powered by Discuz! X3.2