# TYUST-RM2023-NewMaker哨兵视觉代码
致谢
首先感谢各高校开源代码为本套代码提供的参考,以及感谢2021、2022赛季算法组师兄们的努力,太原工业学院,吉林大学,东北大学等兄弟们的帮助。
秉承着开源精神,促进各战队间技术交流提升,我队决定本赛季开源本套代码,希望对其他战队提供一定的参考价值。
说明
本套代码是太原科技大学NewMaker战队2023赛季哨兵开源代码,仅提供战队间技术交流使用,不得用于任何商业行为。
本套代码主要含有:TYUST-RM2023赛季哨兵视觉代码,主要模块分为装甲板识别、SVM支持向量机,PNP角度解算、复活机制,双相机驱动及串口通信等。
如对代码有理解上的问题以及bug等,可联系:
景佳柱(QQ:108487627)
1. 算法设计
![image](https://github.com/DesperatePencil/TYUST-RM2023-/assets/150637758/2386552c-85fb-42a9-8e1f-836cb3b473e0)
2.识别思路
2.1 通过电控发送的数据确定击打颜色,进行通道分离,阈值筛选,通道相减,二值化,膨胀等过程,为后期框选识别做准备。
![image](https://github.com/DesperatePencil/TYUST-RM2023-/assets/150637758/cbe8a4fa-c36a-4d45-a2ee-0239bee3cce0)
2.2 对处理完的图像进行轮廓检测,并计算最小包围矩形,根据灯条尺寸,装甲板两边尺寸等条件,筛选出灯条轮廓。为后续筛选装甲板,PNP 角度解算做准备。
![image](https://github.com/DesperatePencil/TYUST-RM2023-/assets/150637758/a3e9e597-e096-4be8-9f6e-97e7a8b9d871)
2.3 根据灯条平行度,中心连线水平度,灯条长宽比,左右灯条长度差比值等进行装甲板初步筛选。
![image](https://github.com/DesperatePencil/TYUST-RM2023-/assets/150637758/70e2edac-4668-4f78-9569-5a1722a0d5f7)
2.4 通过透视变换处理图像后,进行数字识别,以确保识别无误,以便后续确定击打优先级。
![image](https://github.com/DesperatePencil/TYUST-RM2023-/assets/150637758/adca5b03-2340-4dc8-99d5-30df69fb341a)
2.5 通过以上操作,确定极大优先级,发送击打信息给电控,以完成自动开火。
3. 重要算法原理阐述、公式推导
3.1 SVM 数字识别
数字识别是装甲板检测的最后一项工作,也是能否击打装甲板的关键,是体现鲁棒性最重要的一环。
(1) 通过透视变换将各个角度的数字转换到正面,实现平衡性和共性比例不变性,提高分类效率。
(2) 通过加权来设置对步兵,英雄以及工程的击打优先级,以便更好的发挥哨兵的作用。
![image](https://github.com/DesperatePencil/TYUST-RM2023-/assets/150637758/45d8b498-7592-4f70-985e-90c4b836722f)
3.2 PNP 角度解算
通过处理,判断得到最佳装甲板后,将其进行 PNP 角度解算,得到相机坐标系中目标装甲板的坐标和相应的姿态角。经过坐标系变换到云台坐标系,并再加一定的
运算得到云台到目标装甲板的 pitch,yaw,距离等信息。提取出装甲板,旋转臂,旋转中心等关键要素,分析出目标形状位置及有效击打区域。
![image](https://github.com/DesperatePencil/TYUST-RM2023-/assets/150637758/ad7b0313-6b1b-4bcd-a5b6-80aa8a3354a1)
Z 轴:
= 2( 21, 11)
Y 轴:
= 2(− 31, √ 32 2 + 33 2 )
X 轴:
= 2( 32, 33)
通过以上处理来解算出装甲板位姿,为后续准确击打做准备。
4. 自启动:
通过写脚本和用 Ubuntu 自带的‘Startup Applications’软件进行自启动。
5. 串口通信:
通过 USB 转 ttl 模块,变化为 4pin 线接入主控板,与嵌入式达成通信协议,将数据发送给下位机,同时开放串口权限,并通过调用函数收取下位机发送的数据。
6. 硬件:
Intel NUC11、8mm度申工业相机、USB转ttl。
7. 算法性能,优缺点分析优化方案
算法性能:
目前可以精准框选装甲板以进行击打,图像处理速度较快,可以很好的完成视觉的基本功能。
优点:
(1) 本赛季新加了数字识别,使识别跟稳定,准确性更高,,以保证更强的鲁棒性。
(2) 设置了击打优先级,在识别到多兵种的情况下,可通过优先级进行击打,将哨兵作用最大化。
(3) 新增大津法自动调节阈值,保证在较暗环境下也可以稳定识别自瞄。
缺点:
(1)预测效果不佳,对移动的物体命中率不高,建议使用卡尔曼进行预测。
(2)在装甲板移动过快的情况下会掉识别,距离较远时识别会抖动等。
8.算法性能演示
![image](https://github.com/DesperatePencil/TYUST-RM2023-/assets/150637758/d49dbdf4-3c3f-4740-82e9-123c2fa528d5)
![image](https://github.com/DesperatePencil/TYUST-RM2023-/assets/150637758/148f5bca-c128-40cc-9952-a181be0525f1)
![image](https://github.com/DesperatePencil/TYUST-RM2023-/assets/150637758/c8901f7e-c93c-4725-9276-d6eb10e0ecc7)
![image](https://github.com/DesperatePencil/TYUST-RM2023-/assets/150637758/002c8b0f-8025-43ac-8db6-94b5e9165de1)