RM圆桌005抢人头要靠自瞄

1.什么是自瞄?你们是怎么利用自瞄获取比赛胜利的?为什么要做自瞄?优势在哪?

所谓自瞄,就是利用机器视觉来实现自动瞄准敌方和辅助打击的一种技术,在以往的比赛中,都是以纯手动打击为主,但人的操作和反应能力往往不如机器的快,正确的使用自瞄,宛如“开挂”一般,可以大大提升各单位的命中率既输出能力,给己方的输出提供强有力的支持和保障,在赛场上,拥有自瞄的队伍通常能起到非常强大的震慑作用,给队伍带来很大的技术优势。

2.自瞄怎么做起?

1)编程语言选择

C++、python:

C++是编译型语言,是编译执行的,程序是先需要编译成二进制执行程序,既机器码,然后才能执行,编译的时候编译器可以进行一些优化,python是解释型语言,是解释执行的,和物理机CPU之间多了解释器这层,所以运行效率C++>>python。

通常最好的选择是用c++搭建辅助打击框架,不过python也可以用在部分算法的验证、辅助工具的编写上面,在编程能力有限的情况下,python也是个不二选择。

2)第三方库的运用

OpenCV:OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和MacOS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

HALCON:HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包,拥有应用广泛的机器视觉集成开发环境。它节约了产品成本,缩短了软件开发周期——HALCON灵活的架构便于机器视觉和图像分析应用的快速开发。

3)计算平台的选择

这里介绍两种主流的选择

A)NUC

NUC是intel推出的miniPC,性能和日常使用的笔记本甚至台式机的性能相当,优点是体积较小,而且由于是intel框架的,程序的移植非常容易,不需要做什么修改就能从自己的PC移植到NUC上,缺点是显卡用到是Intel的集成显卡,不易使用GPU加速的算法。

B)NVIDIAJETSON(TX1、TX2)

NVIDIAJetson是业内领先的AI计算平台,它面向移动嵌入式系统市场中的GPU加速并行处理。在深度学习和计算机视觉方面的高性能、低能耗计算,使得Jetson成为计算密集型嵌入式项目的理想平台。

因为该平台和PC的框架不同,所以使用过的人都会发现该平台有些很奇怪的坑,但如果用好了,该平台的性能是远大于NUC的,尤其是它在神经网络上的加速,是NUC无法比的,此外,TX1、TX2的体积和质量比NUC小很多,非常适合在对重量敏感的机器人上应用(如无人机)。

当然以上两个计算平台的共同特点就是贵……..

如果想要节省RMB,就只能牺牲计算的速度,退而求其次选择其他的开发平台,

3.自瞄算法的一般思路

2)图像预处理

因为灯条分为红蓝两色,预处理时可以采取颜色分割的方法将图像处理为二值图方便下一步的灯条提取。

HSV颜色空间分割:通常相机获取得到的图像都是RGB颜色空间,不方便直接进行颜色分离,因此转化为HSV颜色空间再进行分割。

HSV颜色空间由色调(Hue)、饱和度(Saturation)、亮度(Value)三个分量构成,HSV更接近于人眼的主观感受。我们可以通过下面的图来展示HSV颜色分布情况:

通过寻找红色蓝色对应的分量,将该颜色的区域划分出来,最后得到二值化的图像。

3)灯条提取

首先将上面处理好的二值图的轮廓提取出来(例如使用opencv的findContours函数),然后通过一系列条件排除掉假灯条,接着用最小包围矩形或最小包围椭圆去计算各个轮廓,选出最符合灯条特征的轮廓(例如判断灯条的长宽比、形状等等)。

4)装甲片识别

提取出所有可能的灯条之后,将“灯条”两两匹配,根据两“灯条”之间的距离、斜率之差、两灯条之间的长度之比等条件选出合适的待选装甲片,之后再通过筛选装甲片选择“最像”的那个(比如通过识别装甲片中间的数字判断是否为真装甲片),计算出装甲片的中点位置,至此完成了装甲片的识别。

5)云台控制

获得装甲片中点位置后,计算该点与图像中心(假设装甲片中心到达图像中心时云台正好对准装甲片中心)的差值,将图像x轴的差值作为云台yaw轴的控制输入量,y轴的差值作为云台pitch轴的控制输入量,不断地发送实时的“偏差”值,做一个闭环的控制。至此就实现了自瞄最基本的功能。

4.自瞄大家都有做,怎样才能做得稳呢?(做自瞄有什么诀窍?)

1)硬件的选型很重要,有个好的相机可以解决很多算法上的问题,并使算法效益最大化

相机通常有以下一些参数:

等等。

工业相机与普通相机的部分区别:

根据实际需求,选择一个合适的相机对结果非常重要。

2)专注于一点并做到极致,比哪里都做一点的效果更好

例如:大部分学校的自瞄都会出现“跟不上”既云台瞄准跟不上目标的移动,这里提供一个idea,与其想各种各样的预测算法,不如先把现有代码优化到极致,使它的实时性最高并最小化误识别率,最终效果可能会让你意料之外的好。

3)巧妙运用GPU加速

Opencv包含了CUDA(CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题)加速的版本,有些图像的操作在GPU上的速度会大大提高,而TX2、TX1这类嵌入式平台,往往CPU的处理能力有限,如果所有算法都在CPU上跑效率会大打折扣,而TX2、TX1恰巧完美支持CUDA和提供各种图像加速的API。

5.自瞄要在备赛的哪个阶段去做呢?你认为达成什么条件做自瞄才能发挥它的用处?

自瞄应该越早做越好,因为自瞄需要充分的鲁棒性测试和命中率测试,需要在不同的环境下测试可行性,测试最终效果是否真的比“手打”好,同时所说的“自瞄”大多数是有人的参与的,既不完全是全自动的瞄准+打击,通常的方案是人为控制是否开启自动瞄准,并且当多目标出现时人为选择要瞄准的目标,手动控制子弹的发射,因此操作手需要对该系统充分熟悉,只有达到人机合一的境界,自瞄才能充分发挥它的效果。

6.做自瞄最应该避免犯的错误是什么呢?

忽略电控部分的重要性:在视觉识别稳定的情况下,一个优良的控制算法会对效果大大加分,再例如利用响应更快的电机、为自瞄定制的电调,会明显提高自瞄的实时性和命中率。

以下为网友提问:

7.如果是用神经网络和机器学习去做跟踪处理,现在已经做到可以识别车了,那接下来是不是应该转化为识别灯条上的装甲板?华工是在tx2上面进行运算的吗?

答:我们用的都是传统算法识别装甲片的,神经网络的方法没有尝试过,觉得会比较慢;我们在大部分机器人上用的是nuc,无人机上用的是TX2。

8.请问自瞄过程中,怎样对目标进行预测,运用到什么策略或算法?

答:2018年的比赛中并没有在预测上做太大的功夫,不过可以尝试一下卡尔曼预测。

9.请问华工现在采用的是什么视觉方案呢?

答:参考上面回答的一般思路。

10.视觉算法设计到大量像素运算,为了保证实时性同时不牺牲性能,都有哪些优化方案?

答:如果用的平台是TX1、TX2的话,可以试试GPU加速。

11.请问视觉解算出角度后,与电控之间的配合,有什么需要注意的吗?

其实没有需要特别注意的地方,只要保证串口相互通信正常,和电控的控制算法相匹配即可。

12.请问在自瞄系统中高性能工业相机是否必要,算法效率真的可以发挥高性能工业相机的性能优势吗?

答:有必要,能,不过个人认为反过来也是对的,高性能工业相机反而能提高算法的效率。

13.深度学习做检测一般可以达到很高的准确率,但是一般比c+++opencv方案会更耗时,用深度学习做自瞄这个思路靠谱吗?

答:我会选择更加实时的方案。

14.请问进行目标跟踪时有哪些算法能有效帮助我们进行实时跟踪呢?

答:各种滤波算法。

15.工业摄像机,如果选择高帧率,那么就低像素;如果高像素,那么就帧率就会下降。请问你们是怎么选择的?

答:高帧率低像素。

16.想问下主讲人识别出装甲板后采用什么方法测距比较好呢?

答:利用小孔成像的原理测距。

17.自瞄摄像头的fov多少比较合适?

答:看实际情况,如果摄像头安装在云台上,可能60°就够了,但如果摄像头安装在地盘上,可能需要广角一点的摄像头防止目标跟丢。

18.GPU加速算法具体怎么实现呢?

答:cuda,TensorRT等等。

19.同问一下大佬识别出目标后除了重力都需要考虑那些补偿呢?

答:说实话,我们并没有把重力的因素写在算法里面。

20.识别出来之后单目测距有什么算法可以优化吗?

答:单目测距本来也不是很可靠,所以算出来的距离一般只是作为参考使用的,不会作为准确计算的数值使用。

21.请问大佬的测距用的深度还是双目呢?

答:单目。

22.请问要解算打击角度的时候弹道是怎么预测的呢,因为重力影响装甲在图像中心的时候发射弹丸并不能打中。

答:把准星参考点补偿高一点。

23.优先级的判断是要交给操作手吗?

答:战场的情况很复杂,不能保证算法的决策比人的决策可靠。

24.卡尔曼对于爆发运动预测效果还是比较差,请问有什么好的解决方案吗?

答:自己写相应的滤波算法,将所有可能的情况考虑进去。

25.有性价比高的工业相机推荐吗,或者是比较实用的上?

我们直接在淘宝上选的比较便宜的不知名品牌,不过比较好的牌子可以考虑海康威视、大华。

26.大佬们是怎么解决自瞄算法处理产生延迟,影响云台控制的?

答:我们的做法是将视觉算法的速度做到极致,来使延迟的影响最小化。

27.请问贵校有在自瞄系统中使用例如KCF跟踪一类的跟踪算法?

答:并没有使用。

28.如果要用卡尔曼预测的话,他的Q、R值应该如何整定?

答:可以参考这篇知乎:

29.想问一下大佬华工这样的顶级队伍分辨率采用多少呀,帧率能到达多少呢?

答:用的是640*480,帧率60。

30.请问贵校使用的摄像头图像采集的延迟有多大?150ms可以接受吗?

答:这个我们没测过;不过150ms延时可能有些大,移动目标基本很难打中。

31.那NUC是否运用加速算法呢?

答:NUC没有用GPU加速,都是用CPU跑的。

32.请问大佬有没有使用粒子滤波,KCF或者等等其他的跟踪算法吗?

答:没有,就只是自己写了一些防止数据跳动的滤波算法。

33.请问大佬是用什么机器学习模型算法呢,还是使用深度学习呢?

答:没有用到机器学习。

34.请问一下大佬有用yolov3这样的算法吗?

答:没有。

35.请问算法单帧耗时大概是个什么情况呢?跟随时又是怎么消除这个延时所带来的影响呢?

答:单帧大概20ms,我们并没有用上什么算法来消除延时,就只是尽量提高运行帧率,不过可以考虑卡尔曼滤波。

36.小白提问:请问提升识别的稳定性从哪些方面进行呢?识别时断时续

答:将所有可能的情况考虑进去,同时要充分测试各种环境下的识别率。

37.请问一下大佬,单目的话,距离信息怎么求解呢?pnp算法吗?

答:利用小孔成像的原理,pnp也可以求解出。

38.请问进行目标跟踪时有哪些算法能有效帮助我们进行实时跟踪呢?什么滤波算法比较优秀呢?

答:还是卡尔曼。

39.那一般来说,pnp的误差大概是多少呢?

答:需要实际测试,不同场景、摄像头、算法都有影响,给个参考,10%左右。

40.请问华工这些滤波算法是视觉做呢还是电控做呢?

答:视觉。

41.请问工业相机选择帧率多少的比较合适呢?在算法优化到最佳情况的条件下?

答:60以上。

42.想请问一下弹道的预测方面时使用了什么模型呢?实际测试中弹道比较散,请问出了摩擦轮闭环以外还有什么方法可以提高弹道的集中度吗?

答:我们做的时候没有特地考虑弹道的预测,有关弹道的问题要问机械组的成员,我不太清楚。

43.大佬对DSO算法有什么见解吗?

答:没用过、也没听说过。

44.问大佬,目前opencv的跟踪算法有哪些比较靠谱?

答:opencv没有提供很多跟踪算法,主要是用来提取特征、识别装甲片。

45.请问在识别过后是否使用了跟踪算法进行目标跟踪?

46.那请问大佬对于视觉识别到的目标信息是怎么处理的呢,是作为云台双环的输入量?还是代替云台位置环?

答:这个问题我不是很清楚,但输入的是相对量(偏差)。

47.刚才大佬说摄像头安装在云台上60°就够了,又说采用低分辨率高帧率,那这样远处的物体不很小很难识别吗,这样请问下大佬识别多远的物体呢?

答:的确不是很远,3m的效果是最好的。

48.请问一下除了采用PNP粗测,华工用于精确测距的算法是什么呢?

答:没用用其他的精确测距算法。

49.单目不可靠的话大佬没有考虑其他测距方式吗?

答:目前没有。

50.请问大佬队伍对于多目标同时出现是采用操作手手动筛选的,还是算法自己选择?我觉得靠操作手去手动筛选的这个程序写不来。

答:靠操作手。

51.同mym问,单目的粗测不靠谱只能用与参考,那该用什么数值作为准确计算用呢?

答:我们直接用粗测的值计算的。

52.小白的视觉算法一换光源就瞎了,总需要临场调试。大佬们的视觉是怎样适应不同光线条件,怎样高效的在比赛条件下调试的?

答:这个问题问的比较广,总的来说就是调整摄像头的参数,提高算法的鲁棒性,在比赛条件下通过录像后期调试,测试场地时最好能实现远程调试。

53.想问下大佬用多少分辨率,帧率又能达到多少?

答:同上。

55.请问您说的高帧率是指多少百帧以上呢?请问发给下位机的频率多少比较适中呢?

答:高帧率一般60以上够用,当然越高越好,只要算法的速度有那么快,发给下位机的频率要看串口波特率还有电控那边的处理能力。

56.请问大佬,识别装甲板,怎么区分大小装甲板呢?因为使用pnp,大小装甲板参数不一样啊。

答:可以考虑识别装甲片中间的数字。

57.60帧是不是有点保守?

58.请问大佬60帧不会发生卡顿吗?

参考上一问,没有明显的卡顿。

59.很多调好的参数改变光照后就检测不到装甲了,这个问题有解吗?

答:除了用鲁棒性更高的算法,就只能根据现场光照微调参数了。

60.请问大佬们是怎么选取最优目标的呢?

答:操作手选择。

61.自瞄的时候是完全把云台的控制权交给视觉吗?那这时候底盘的方向是怎么控制的?还是自动跟随云台吗?

答:是,地盘跟随云台。

62.请问大佬,看了下大佬的回复,我看到的是贵校没有用opencv的如KCF的跟踪算法也没有用到预测算法,贵校的自瞄是以计算装甲板中心与图像中心,并补偿为主嘛?

答:基本上是。

63.请问大佬,自瞄是怎么解决误识别问题呢?我在做自瞄,误识别很严重。

答:还是要将所有情况考虑进去,剔除伪装甲片,同时可以考虑识别装甲片的数字。

64.用于云台上的单目自瞄摄像头可以解决今年大符识别的问题吗?

答:这里不讨论大符的问题。

答:看需要,如果操作手适合打静距离目标就放在2-3m,如果喜欢狙击的话就用长焦。

66.看往届视频,很多学校会在底盘上面安装双目摄像头,这个主要是用来做什么的?

答:其他学校不清楚,我们前年用两个摄像头只是备用。

67.没有机器学习怎么识别贴纸和打符呢?

答:自瞄没用机器学习,打神符才用了。

68.请问大佬既然说单目测距不准那贵校是如何获取准确的距离信息呢?

热心网友帮答:

69.视觉算法设计到大量像素运算,为了保证实时性同时不牺牲性能,都有哪些优化方案?

答:在自瞄中,如果识别到了目标可以缩小区域而不是进行全局搜索,即采用ROI的方法减少图像的运算,提高算法速度。

70.请问在自瞄系统中高性能工业相机是否必要,算法效率真的可以发挥高性能工业相机的性能优势吗?

71.同问一下大佬识别出目标后除了重力都需要考虑那些补偿呢?

答:可以考虑空气阻力的影响

72.请问要解算打击角度的时候弹道是怎么预测的呢,因为重力影响装甲在图像中心的时候发射弹丸并不能打中。

答:子弹是一个抛物线模型,需要考虑重力的影响

73.大佬们是怎么解决自瞄算法处理产生延迟,影响云台控制的?

答:算法相对控制的延时是一定存在延迟的,所以要加入预测去补偿延迟

74.请问贵校使用的摄像头图像采集的延迟有多大?150ms可以接受吗?

答:竞培的小哥哥回答,采集图像延时150ms有点儿高,一般工业相机的帧率有100hz,延时可以控制在10ms左右。但如果是普通相机的话,延时就会比较高。

THE END
1.为什么要学编程?这也可以培养人们的毅力和耐性。5. 掌握未来职业技能:未来的很多职业都需要掌握编程技能,例如数据科学家、机器学习工程师等等。6. 理解数字化世界:编程可以帮助人们更好地理解数字化世界,掌握数字化世界的规律和趋势。7. 提高自我价值:掌握编程技能可以提高自己的自我价值,让自己更加有自信和自信心。https://zhidao.baidu.com/question/1743714745227727187.html
2.学编程有什么好处(全面)什么是编程学编程有什么好处,,文章浏览阅读1.1k次,点赞9次,收藏9次。综上所述,学编程的好处是多方面的。它不仅能够提升个人的逻辑思维和问题解决能力,增强创造力和创新能力,提高工作竞争力,促进跨学科学习,培养耐心和专注力,拓展全球视野与合作机会,还能够增强自信心与成就感,培养自学能力和持https://blog.csdn.net/fafdafaafdfafQWQ/article/details/142671156
3.学编程后,我做了这10个有毒的在线免费设计神器!(下)最初想做一些更酷的可视化效果,就学习了一门适合编程小白入门但创造性超强的编程语言 Processing ,用它做了一些可视化作品和循环动图的打卡,在这些过程中就发现编程的乐趣与可拓展性,后来又入门了 html 和 js ,开发了这一系列在线设计工具。 开发这么一款工具需要花多久时间?开发过程遇到最大的挑战是什么? https://www.uisdc.com/10-design-artifact-2
4.少儿编程有必要学吗少儿编程学习需要具备哪些条件→MAIGOO知识摘要:对于想培养编程思维或者日后有考虑从事编程行业的孩子来说,学习少儿编程还是有必要的,编程学习从青少儿时期就开始培养,这是有很大好处的,例如学习少儿编程可以培养孩子独立解决问题的能力、培养全新的思维方式、拓宽学习的边界等。然而要学习编程,也要具备一定的条件,那么,青少儿编程学习需要具备哪些能力?下面就来一https://www.maigoo.com/goomai/224821.html
5.ASP.NETCore适用于.NET的开源Web框架.NET 是一个开发人员平台,由工具、编程语言、库组成,用于构建许多不同类型的应用程序。 ASP.NET Core 通过专门用于生成 web 应用的工具和库扩展了.NET 开发人员平台。 更深入发掘: 什么是 ASP.NET Core? 了解ASP.NET Core 通过我们的教程、视频课程和文档,了解 ASP.NET Core 提供的所有功能。 https://asp.net/
6.2024年Pytho怎样自学LinuxJava是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于Java,对C++等其他程序设计语言也一样管用。有编程高手认为,Java也好C也好没什么分别,拿来就用。为什么他们能达到如此境界?我想是因为编程语言之间有共通之处,领会了编程的精髓,自然能够做到一通百通。如何学习程序设计理所当然也有许多共通的地方。 https://win7sp.com/post/33390.html
7.编程学习之路,迷茫中的探索与突破学编程太痛苦了,编程之路,迷茫1、缺乏明确的学习目标 许多初学者在开始学习编程时,往往没有明确的学习目标,他们可能只是听说编程很热门,或者觉得学习编程可以带来一些好处,但并不清楚自己为什么要学习编程,以及想要达到什么样的水平,这种缺乏目标的情况容易导致学习动力不足,进而产生迷茫感。 http://skypure.com.cn/post/30310.html
8.为什么我们要学习编程?51CTO博客为什么我们要学习编程? 1. 为什么需要学习编程? 如今,学习编程的人分为两类,一类是程序员,另一类是期望成为程序员的人。 编程这个事儿,在大多数人眼中还是一种特定领域的、专门的技能,认为学的人都是需要以此谋生的。 其实,我曾经跟一个作为一个“码龄”超过20年的老程序员聊过,他是这样认为的:在不久的将来https://blog.51cto.com/aiyc/2887978
9.需求分析报告(通用12篇)本章进入生态系统的学习,首先要学习生物与环境的关系。本节有很多代表适应方式和生物关系的名词,容易混淆,有必要引入CAI使这些关系具体形象,让学生容易理解,深化记忆。另外种群数量变化规律曲线的得出也是比较难的,引入CAI,给予动态的解释,很有必要. CAI创意: https://www.ruiwen.com/word/xuqiufenxibaogao.html
10.南京少儿编程有哪几所比较好少儿编程教育是时代发展的产物,为培养未来的全能人才而备受关注,那么为什么会有越来越多的家长给孩子报班学习呢?到底有没有必要学?大家可以从以下几点进一步了解下少儿编程课程的意义。 1. 少儿编程是一门符合孩子智力成长特点的课程,教学内容具有趣味性和挑战性,能够培养孩子的学习兴趣,锻炼他们的专注能力。 http://www.jixiaotong.com/it/shaoer/43861.html
11.媒体报道集锦多家媒体点赞华理暑期社会实践活动(二)正如授课老师带领学员操控编程机器人,真正领悟编程机器人因为被编程后而获得循迹或避障的功能。实践团队用充实丰富的课堂教导学生,科技不再是遥远未来的新兴事物,是与生活息息相关的事物,是时代洪流下年轻学生应该也必须去接触学习的知识。 媒介:科技知识普及的意义https://news.ecust.edu.cn/2019/0911/c6a149906/page.htm
12.《世界十大学习方法》之费曼技巧图1-2 学习和生产的类比生产的产品不质检可以吗?学习的知识不检测是否学会对吗?费曼技巧一个核心作用就是检测哪些知识没有学会,然后你就可以集中力量来弥补这些知识。本节分为六个部分,第一部分论述费曼技巧是什么。第二部分使论述费曼技巧从哪里来。第三部分论述费曼技巧为什么有效。第四部分论述费曼技巧怎么用。第https://www.360doc.cn/mip/1027860177.html
13.白岩松不许孩子考第一,98%的人都上当了:不明白这一点的父母,养不现在很多编程课用的都是国外的软件,为了让我们的孩子更系统、更专业的学习编程,编程猫联合了腾讯、阿里等名企的技术专家自主研发了适合中国孩子学习的编程工具。 不仅如此,编程猫的工具Kitten已经成为全国青少年编程能力等级考试指定工具。 孩子们在编程猫的社区上传的编程作品累计有3000多万了。 https://m.thepaper.cn/wap/resource/jsp/newsDetail_forward_10681376
14.Python学习笔记二进制数只使用数字0、1表示,在Python中,二进制整数使用前缀0b表示,比如:0b0110,0b1100。 十六进制数除了0~9十个数字以外,还使用a、b、c、d、e、f,在Python中,十六进制使用前缀0x,比如:0x12ef,0xde2431af。 十进制数、二进制数和十六进制数之间是可以相互转换的,如果感兴趣的同学,可以学习《编程必备基础https://www.jianshu.com/p/8d4b11d7968d