Paso 4: Actualización de la odometría y visualización de la posición del robot

Ahora que las posiciones simuladas del codificador, las velocidades y los ángulos del giroscopio se actualizan con información precisa periódicamente, estos datos pueden utilizarse para actualizar la posición del robot en un bucle periódico (como el método periódico() en un Subsistema). En la simulación, el bucle periódico utilizará lecturas simuladas del codificador y del giroscopio para actualizar la odometría, mientras que en el robot real, el mismo código utilizará lecturas reales del hardware físico.

Nota

Para más información sobre el uso de la odometría, ver este documento.

Visualización de la postura del robot

La pose del robot puede ser visualizada en el GUI del simulador (durante la simulación) o en un dashboard como Glass (en un robot real) enviando la pose de odometría sobre un objeto «Field2d». Un Campo2d puede ser construido trivialmente sin ningún argumento constructivo:

private Field2d m_field = new Field2d();

Esta instancia de Field2d debe enviarse a través de NetworkTables. El mejor lugar para hacer esto es en el constructor de su subsistema.

public Drivetrain() {
  ...
  SmartDashboard.putData("Field", m_field);
}

Nota

La instancia de Field2d también se puede enviar usando una API NetworkTables de nivel inferior o usando API de Shuffleboard.

Finalmente, la posición de su odometría debe actualizarse periódicamente en el objeto Field2d. Recuerde que esto debe ser en un método general periodic(), es decir, uno que se ejecute tanto durante la simulación como durante la operación real del robot.

public void periodic() {
  ...
  // This will get the simulated sensor readings that we set
  // in the previous article while in simulation, but will use
  // real values on the robot itself.
  m_odometry.update(m_gyro.getRotation2d(),
                    m_leftEncoder.getDistance(),
                    m_rightEncoder.getDistance());
  m_field.setRobotPose(m_odometry.getPoseMeters());
}

Importante

Es importante que este código se coloque en un método periodic() regular - uno que se llame periódicamente independientemente del modo de operación. Si está usando la biblioteca basada en comandos, este método ya existe. Si no, eres responsable de llamar a este método periódicamente desde la clase principal Robot.

Nota

En este punto hemos cubierto todos los cambios de código necesarios para ejecutar su código. Deberías dirigirte a la página Interfaz de usuario de la simulación para obtener más información sobre cómo ejecutar la simulación y añadir el campo en el que se ejecutará tu robot simulado a la GUI.