写在前面
2019浙江省的足球机器人小型组对抗赛是4V4的,然后目标就是通过4台小型足球机器人之间的配合将“足球”射入对方球门以获胜 我当年参加了比赛,也获得了一个不错的成绩,因此特意写下一系列博客来分享一下我的方案(基于2019年规则的4V4对抗)。 这是我的GitHub开源代码的地址:
我之后的博客将按照角球,中场球,前场球等进行分类讲解我的开源代码,希望大家能在我的基础上更上一层楼
总体方案
我把包括守门员在内所有小车的skill都重新再写了一遍,所以我的所有方案都是基于自己写的skill来实现的,如果用官方的skill的话,效果不理想哦 我们总体的方案就是让前锋在外面进攻,后卫和中场就在紧贴着禁区线和守门员一起进行防守,这个方案最大程度的保证了我方的安全性,但是也需要前锋动作写的非常好,这样才能进球,事实证明我方的前锋非常稳健和具有进攻性。 至于战术,我就是比较简单粗暴了,如果是我方直接球或者间接球进攻的话我们就是直接前锋猛冲射门,如果是我方防守的话,我们会等对方开球之后直接转换成进攻模式。
开源代码结构概述
skill层
task层
守门员
我的守门员相对于官方的守门员来说就是增加了一种叫做最小二乘法的算法,这个算法能做到将一些离散的点拟合成直线或者曲线,所以我的守门员思路就是:采集几帧里球的位置,然后以球场中心作为原点建立坐标系,并且根据之前采集到的几帧球的位置拟合出一条直线,根据直线的交点来预判出守门员的防守点
前锋
我的前锋是我整个战术最关键的地方,也是唯一的进球机会,我的前锋需要满足以下几个条件:
前锋的行走速度要足够快
我的犀利的前锋是我能斩获省一的关键之一。当把小车的目标点设置在距离小球dis距离的时候小车就会以很快的速度拿球,这是我们前锋的关键点1 图形解释如下图: 拿到球之后就需要射门,我设计的动作是这样的:首先判断小车是否拿到了球,如果拿到球了之后将小车的目标点设为球门,在这个过程中判断是否可以射门,满足射门条件就可以射门了。这里也有一个小技巧,不要把目标点设为球门中点,设置为偏离中点一定距离,这样不但可以减小小车转向的幅度,而且以刁钻的角度射门更加难以防守。这就是我的前锋的关键点2
前锋接球要足够准
我现在的前锋还是有一些缺陷的,就是对于赛场上的一些状况判断不够完善,希望后浪可以在我这个开源的基础上进行改进。目前我的方案:只要球在场上运动,前锋就根据拟合出来的曲线去接球,或者是直接根据小球的实时坐标去追球,拟合的方案就是用前面讲的最小二乘法,追球的方法和追到球之后的操作在上一部分已经描述过了。
中场and后卫
我的中场和后卫挺憨的,开了球之后中场和后卫就紧贴禁区线进行防守。但是,我获胜的另外一个关键点也是在这里哦~ 但其实也算是一个投机取巧的办法吧,那就是一般情况下,敌方小车开球,官方的防守位置都是在离球50cm左右的地方,这样敌方小车挑球就可以过人,因此挑射发球也正是大部分人采取的方案。我把小车的防守位置拉到了100cm甚至150cm的地方,这样敌方小车不论是平射还是挑射都是直接把球送到我的前锋手里,然后我方犀利的前锋拿球射门,美滋滋~
战术技巧
在实际比赛中,除了我的前锋,最容易得分的就是角球了,因此我的战术就是尽量制造出更多的角球,然后通过角球来得分,那么角球的防守和进攻就很重要了。我有一个sao想法,就是多写几个角球进攻的脚本,然后在task层的lua语言里随机调用这些脚本动作,这样敌方就很难进行防守了。那么防守的话要么用算法来判断敌方可能的进攻方案,要么写好几套防守方案,到时候在比赛的时候可以申请暂停然后换上克制敌方角球进攻的防守方案。
待改善的地方
赛后我总结了一些我的不足和待改进的地方,希望后浪们可以在我的开源基础上进一步加强,提高足球机器人的高度并将他的魅力带给更多的人,有问题的话欢迎在评论区提出哦。 后续我将会更新一系列博客来介绍我的开源代码,敬请期待~
(づ ̄3 ̄)づ╭❤~一键三连,这次一定(๑•̀ㅂ•́)و✧