小型足球机器人角球脚本中稳定接球的实现

Posted AIplusX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小型足球机器人角球脚本中稳定接球的实现相关的知识,希望对你有一定的参考价值。

主要内容

主要内容在我的古月居博客:
小型足球机器人角球脚本中稳定接球的实现

场景分析

在这里插入图片描述

如上图所示,中场会在上半边的场内绕某点做公转的同时进行自转的操作,前锋会过去拿球,前锋拿到球过一段时间之后会将高尔夫球挑射到对面去,在前锋挑球之后,中场会根据最小二乘法拟合出来的直线去接球,接到球之后会直接射门,因此在这个场景中的中场接球动作就十分重要了,因为他要是接不到或者说接不稳球的话就会直接导致角球失误。

思路分析

具体程序是这个:

void get_k_b(const WorldModel* model, float& b_interrupt, float &k_slope, vector<point2f>& ball_points){
	const int nCount = 4;//取帧数作为依据
	vector<float> vResult;
	float data_x[nCount];
	float data_y[nCount];
	for (int i = 0; i<nCount; i++){
		ball_points.push_back(model->get_ball_pos(i));
		data_x[i] = ball_points[i].x;
		data_y[i] = ball_points[i].y;
		cout << "ball_points[" << i << "]的坐标是" << ball_points[i] << endl;
	}
	Min2Method(data_x, data_y, nCount, vResult);//获得曲线的斜率和截距
	k_slope = vResult[0];
	cout << "k_slope的大小是" << k_slope << endl;
}
void get_angle(float& angle, const float& k_slope, const point2f& vel){
	if (vel.angle() <= PI / 2 && vel.angle() >= (-PI / 2)){//在1,4象限
		angle = atan(k_slope);
	}
	else if (vel.angle() >= PI / 2 && vel.angle() <= PI){//在第2象限
		angle = atan(k_slope) + PI;
	}
	else if (vel.angle() <= (-PI / 2) && vel.angle() >= -PI){//在第3象限
		angle = atan(k_slope) - PI;
	}
	cout << "vel.angle()的大小是" << vel.angle() << endl;
	cout << "angle的大小是" << angle << endl;
}

在这里插入图片描述

//离球距离小于200才开始接球,否则保持静止
if (r2b_dist < 200){
	//变动x坐标接球
	if (x_dist<y_dist){
		task.target_pos.y = runner.y ;
		task.target_pos.x = target.x;
		if (r2b_dist < 10){
			task.target_pos = runner;
		}
	}
	//变动y坐标接球
	else{
		task.target_pos.x = runner.x;
		task.target_pos.y = target_x.y;
		if (r2b_dist < 10){
			task.target_pos = runner;
		}
	}
}
else
{
	task.target_pos = runner;
}
task.orientate = ((opp_goal - runner).angle() );

以上这段程序在我的公众号AIplusX里面的程序资料的robot_soccer文件夹里,具体位置看这个:
在这里插入图片描述

主要内容

主要内容在我的古月居博客:
小型足球机器人角球脚本中稳定接球的实现

在这里插入图片描述

以上是关于小型足球机器人角球脚本中稳定接球的实现的主要内容,如果未能解决你的问题,请参考以下文章

用IT看世界杯——枯藤老树昏鸦,足球IT小龙虾

小型自动化运维--expect脚本

Zabbix中小型企业Zabbix监控实战之告警大全

目标运动模型

UIDynamicBehavior的简单使用:接球小游戏

Java 接球游戏