Saltar al contenido principal

Buscando Objetivos No Visibles

Implementar un comportamiento de búsqueda puede ser útil en varias situaciones. En algunos juegos, el objetivo en el que intentas anotar puede no estar en una ubicación predecible, por lo que no puedes confiar en un código autónomo de navegación a estima para acercarte "lo suficiente". Por ejemplo, en 2009, los objetivos estaban unidos a los robots de los oponentes que también se movían. Otra razón por la que podrías querer implementar la búsqueda es si el tren de transmisión de tu robot no es lo suficientemente confiable/repetible para ubicarte exactamente en la posición que deseas. A veces, los sistemas de transmisión tipo swerve u omnidireccionales pueden tener problemas para conducir a ubicaciones precisas (esto no es una crítica a los sistemas swerve u omnidireccionales; simplemente es más desafiante lograr que se muevan a ubicaciones repetibles). Algunos juegos incluso han permitido la interacción robot-robot durante el modo autónomo. En 2006, a menudo participábamos en duelos autónomos donde los robots de defensa intentaban sacar a los robots ofensivos de la posición de anotación. ¡En este caso no puedes estar seguro de nada! Esperamos que esto te haga pensar en algunas formas en las que podría ser útil que tu robot busque automáticamente un objetivo que inicialmente no puede ver.

Afortunadamente, agregar lógica de búsqueda a tu robot es muy fácil. Para implementar la búsqueda, simplemente haces que tu robot escanee un objetivo y una vez que lo encuentra, comience a ejecutar el código de apuntado. Usaremos el valor 'tv' o 'target valid' (objetivo válido) reportado por limelight para saber si vemos un objetivo o no.

	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)
{
// No vemos el objetivo, buscamos el objetivo girando en el lugar a una velocidad segura.
steering_adjust = 0.3f;
}
else
{
// Vemos el objetivo, ejecutamos el código de apuntado
float heading_error = tx;
steering_adjust = Kp * tx;
}

left_command+=steering_adjust;
right_command-=steering_adjust;

CS_seeking_anim