寻找不可见目标
在某些情况下,实现寻找行为可能会很有用。在一些比赛中,你试图得分的目标可能不在可预测的位置,所以你不能依赖死记硬背的自主代码来"接近"目标。例如,在2009年的比赛中,目标被附加在对手的机器人上,而这些机器人也在四处移动 。你可能想要实现寻找行为的另一个原因是,如果你的机器人的传动系统不够可靠/重复,无法将你精确地放置在你想要的位置。有时,摆动驱动或全向驱动可能难以驱动到精确的位置(这并不是对摆动或全向驱动系统的批评;只是让它们驱动到可重复的位置更具挑战性)。一些比赛甚至允许在自主模式下进行机器人之间的互动。在2006年,我们经常进行自主对决,防守机器人会试图将进攻机器人撞出得分位置。在这种情况下,你不能确定任何事情!希望这能让你思考一些方法,让你的机器人自动寻找最初看不到的目标可能会有用。
幸运的是,为你的机器人添加寻找逻辑非常简单。要实现寻找,你只需让你的机器人扫描目标,一旦找到目标,就开始运行瞄准代码。我们将使用limelight报告的'tv'或'target valid'值来知道我们是否看到了目标。
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;