跳到主要内容

进入射程范围

FRC 机器人通常需要定位在距离得分目标特定距离的位置,以便其得分机构能够正常工作。您可以使用简单的比例控制回路配合 limelight 校准过的十字准星,非常轻松地让机器人行驶到距离目标的特定距离。

在这个示例中,您应该确保机器人已经瞄准目标。稍后我们会将瞄准和距离调整合并到一个函数中,但在这个示例中,我们只关注驱动机器人到正确距离的代码。

与瞄准示例类似,这里我们展示一个可以在机器人更新循环中运行的函数。

float KpDistance = -0.1f;  // 距离的比例控制常数
float current_distance = Estimate_Distance(); // 参见"案例研究:估算距离"

if (joystick->GetRawButton(9))
{
float distance_error = desired_distance - current_distance;
driving_adjust = KpDistance * distance_error;

left_command += distance_adjust;
right_command += distance_adjust;
}

通过对 KpDistance 设置进行一些调整,您的机器人应该能够非常快速准确地行驶到所需距离。与瞄准相比,行驶到正确距离通常更容易,因为大多数机器人前进和后退比原地转向更容易。

接下来我们将介绍一个简单的技巧,使行驶到正确距离变得更加容易。您可以使用 limelight 十字准星,而不是实际计算距离。只需将机器人定位在距离目标的理想距离处,然后校准十字准星的 y 位置。现在,当机器人处于正确距离时,您的 y 角度将报告为 0.0。使用这个技巧,您永远不必实际计算真实距离,您的代码可以像这样:

float KpDistance = -0.1f; 

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

if (joystick->GetRawButton(9))
{
driving_adjust = KpDistance * distance_error;

left_command += distance_adjust;
right_command += distance_adjust;
}

如果您需要更改射击距离,只需将机器人移动到新距离并重新校准 limelight 十字准星即可。

Image

这是一个使用上述想法的机器人示例。注意当驾驶员停止驾驶并按下"瞄准"按钮时,机器人如何自动后退到正确的射程范围:

Image