跳到主要内容

搜索不可见目标

在某些情况下,实现搜索行为可能非常有用。在一些比赛中,你要得分的目标可能不在可预测的位置,因此你不能依赖航位推算的自动代码来"足够接近"。例如在2009年,目标是连接在对手机器人上的,而对手机器人也在四处移动。你可能想要实现搜索的另一个原因是,如果你的机器人底盘不够可靠/可重复,无法将你放置在你想要的精确位置。有时候舵轮底盘或全向底盘可能难以驾驶到精确位置(这不是对舵轮或全向底盘的批评;只是让它们驾驶到可重复的位置更具挑战性)。有些比赛甚至允许在自动阶段进行机器人之间的互动。在2006年,我们经常进行自动阶段的对决,防守机器人会试图将进攻机器人撞出得分位置。在这种情况下,你无法确定任何事情!希望这能让你思考一些让机器人自动搜索它最初看不到的目标可能有用的方式。

幸运的是,为你的机器人添加搜索逻辑非常简单。要实现搜索,你只需让机器人扫描目标,一旦找到目标,就开始运行瞄准代码。我们将使用limelight报告的'tv'或'目标有效'值来判断是否看到目标。

	std::shared_ptr<NetworkTable> table = NetworkTable::GetTable("limelight");
float tv = table->GetNumber("tv");
float tx = table->GetNumber("tx");

float steering_adjust = 0.0f;
if (tv == 0.0f)
{
// 我们没有看到目标,通过原地旋转以安全速度搜索目标。
steering_adjust = 0.3f;
}
else
{
// 我们看到了目标,执行瞄准代码
float heading_error = tx;
steering_adjust = Kp * tx;
}

left_command+=steering_adjust;
right_command-=steering_adjust;

CS_seeking_anim