Introducción a la cinemática y la clase de velocidades del chasis

¿Qué es la cinemática?

El nuevo conjunto de cinemática contiene clases de cinemática y odometría de accionamiento diferencial, accionamiento de viraje y accionamiento mecanum. Las clases de cinemática ayudan a convertir entre un objeto universal `` ChassisSpeeds “”, que contiene velocidades lineales y angulares para un robot a velocidades utilizables para cada tipo individual de transmisión, es decir, velocidades de rueda izquierda y derecha para una transmisión diferencial, velocidades de cuatro ruedas para una transmisión mecanum , o estados de módulos individuales (velocidad y ángulo) para un cambio de dirección.

¿Qué es la odometría?

La odometría implica el uso de sensores en el robot para crear una estimación de la posición del robot en el campo. En FRC, estos sensores suelen ser varios codificadores (el número exacto depende del tipo de unidad) y un giroscopio para medir el ángulo del robot. Las clases de odometría utilizan las clases de cinemática junto con las entradas periódicas del usuario sobre velocidades (y ángulos en el caso de viraje) para crear una estimación de la ubicación del robot en el campo.

La clase de velocidades de chasis

El objeto ChassisSpeeds es esencial para la nueva suite de cinemática y odometría de WPILib. El objeto ChassisSpeeds representa las velocidades de un chasis de robot. Esta estructura tiene tres componentes:

  • vx: la velocidad del robot en la dirección x (hacia adelante).

  • vy: la velocidad del robot en la dirección y (lateral). (Los valores positivos significan que el robot se mueve hacia la izquierda).

  • omega: la velocidad angular del robot en radianes por segundo.

Nota

Un tren motriz no holonómico (es decir, un tren motriz que no se puede mover hacia los lados, por ejemplo, un accionamiento diferencial) tendrá un componente vy de cero debido a su incapacidad para moverse hacia los lados.

Construcción de un objeto ChassisSpeeds

El constructor del objeto ChassisSpeeds es muy sencillo y acepta tres argumentos para vx, vy y `` omega``. En Java, vx y vy deben expresarse en metros por segundo. En C++, la biblioteca de unidades puede usarse para proporcionar una velocidad lineal usando cualquier unidad de velocidad lineal.

// The robot is moving at 3 meters per second forward, 2 meters
// per second to the right, and rotating at half a rotation per
// second counterclockwise.
var speeds = new ChassisSpeeds(3.0, -2.0, Math.PI);

Creación de un objeto ChassisSpeeds a partir de velocidades relativas al campo

También se puede crear un objeto ChassisSpeeds a partir de un conjunto de velocidades relativas al campo cuando se proporciona el ángulo del robot. Esto convierte un conjunto de velocidades deseadas relativas al campo (por ejemplo, hacia la estación de alianza opuesta y hacia el límite del campo derecho) en un objeto ChassisSpeeds que representa velocidades relativas al marco del robot. Esto es útil para implementar controles orientados al campo para un robot de accionamiento giratorio o mecanum.

El método estático ChassisSpeeds.fromFieldRelativeSpeeds (Java) / ChassisSpeeds::FromFieldRelativeSpeeds (C ++) se puede utilizar para generar el objeto ChassisSpeeds a partir de velocidades relativas al campo. Este método acepta vx (relativo al campo), vy (relativo al campo), omega y el ángulo del robot.

// The desired field relative speed here is 2 meters per second
// toward the opponent's alliance station wall, and 2 meters per
// second toward the left field boundary. The desired rotation
// is a quarter of a rotation per second counterclockwise. The current
// robot angle is 45 degrees.
ChassisSpeeds speeds = ChassisSpeeds.fromFieldRelativeSpeeds(
  2.0, 2.0, Math.PI / 2.0, Rotation2d.fromDegrees(45.0));

Nota

No se establece explícitamente que la velocidad angular sea «relativa al campo» porque la velocidad angular es la misma que se mide desde una perspectiva de campo o una perspectiva de robot.