Pular para o conteúdo principal

Entrando no Alcance

Robôs da FRC frequentemente precisam ser posicionados a uma distância específica do alvo de pontuação para que seu mecanismo de pontuação funcione bem. Você pode usar um simples controle proporcional junto com a mira calibrada do limelight para fazer seu robô chegar facilmente a uma distância específica do alvo.

Para este exemplo, você deve garantir que seu robô esteja mirando no alvo. Posteriormente, combinaremos a mira e o ajuste de distância em uma única função, mas neste exemplo estamos focando apenas no código que move o robô para a distância correta.

Similar ao exemplo de mira, aqui mostramos uma função que pode ser executada no loop de atualização do seu robô.

float KpDistance = -0.1f;  // Constante de controle proporcional para distância
float current_distance = Estimate_Distance(); // veja o 'Estudo de Caso: Estimando Distância'

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

left_command += distance_adjust;
right_command += distance_adjust;
}

Com alguns ajustes na configuração do KpDistance, seu robô deve chegar rápida e precisamente à distância desejada. Comparado à mira, chegar à distância correta geralmente é mais fácil porque a maioria dos robôs se move para frente e para trás com mais facilidade do que gira no lugar.

A seguir, descreveremos um truque simples para tornar ainda mais fácil chegar à distância correta. Em vez de calcular a distância real, você pode usar a mira do limelight. Basta posicionar seu robô na distância ideal do alvo e calibrar a posição y da mira. Agora seu ângulo y será reportado como 0.0 quando seu robô estiver na distância correta. Usando este truque, você nunca precisa calcular a distância real e seu código pode ser algo assim:

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;
}

Se você precisar mudar a distância de disparo, basta mover seu robô para a nova distância e recalibrar a mira do limelight.

Image

Aqui está um exemplo de um robô usando a ideia acima. Observe como ele recua automaticamente para o alcance correto quando o piloto para de dirigir e pressiona o botão de "mirar":

Image