Cinemática de accionamiento diferencial

La clase DifferentialDriveKinematics es una herramienta útil que convierte entre un objeto ChassisSpeeds y un objeto DifferentialDriveWheelSpeeds, que contiene velocidades para los lados izquierdo y derecho de un robot de accionamiento diferencial.

Construyendo el objeto de cinemática

El objeto DifferentialDriveKinematics acepta un argumento constructor, que es el ancho de pista del robot. Esto representa la distancia entre los dos juegos de ruedas en una transmisión diferencial.

Nota

En Java, el ancho de la pista debe estar en metros. En C ++, la biblioteca de unidades se puede usar para pasar el ancho de la pista usando cualquier unidad de longitud.

Conversión de velocidades del chasis a velocidades de las ruedas

El método toWheelSpeeds(ChassisSpeeds speeds) (Java) / ToWheelSpeeds(ChassisSpeeds speeds) (C++) debe usarse para convertir un objeto ChassisSpeeds en un objeto DifferentialDriveWheelSpeeds. Esto es útil en situaciones en las que tiene que convertir una velocidad lineal (vx) y una velocidad angular (omega) a velocidades de rueda izquierda y derecha.

// Creating my kinematics object: track width of 27 inches
DifferentialDriveKinematics kinematics =
  new DifferentialDriveKinematics(Units.inchesToMeters(27.0));

// Example chassis speeds: 2 meters per second linear velocity,
// 1 radian per second angular velocity.
var chassisSpeeds = new ChassisSpeeds(2.0, 0, 1.0);

// Convert to wheel speeds
DifferentialDriveWheelSpeeds wheelSpeeds = kinematics.toWheelSpeeds(chassisSpeeds);

// Left velocity
double leftVelocity = wheelSpeeds.leftMetersPerSecond;

// Right velocity
double rightVelocity = wheelSpeeds.rightMetersPerSecond;

Conversión de velocidades de las ruedas a velocidades del chasis

También se puede utilizar el objeto de cinemática para convertir las velocidades de las ruedas individuales (izquierda y derecha) en un objeto singular ChassisSpeeds. El método toChassisSpeeds(DifferentialDriveWheelSpeeds speeds) (Java) /ToChassisSpeeds(DifferentialDriveWheelSpeeds speeds) (C++) debe usarse para lograr esto.

// Creating my kinematics object: track width of 27 inches
DifferentialDriveKinematics kinematics =
  new DifferentialDriveKinematics(Units.inchesToMeters(27.0));

// Example differential drive wheel speeds: 2 meters per second
// for the left side, 3 meters per second for the right side.
var wheelSpeeds = new DifferentialDriveWheelSpeeds(2.0, 3.0);

// Convert to chassis speeds.
ChassisSpeeds chassisSpeeds = kinematics.toChassisSpeeds(wheelSpeeds);

// Linear velocity
double linearVelocity = chassisSpeeds.vxMetersPerSecond;

// Angular velocity
double angularVelocity = chassisSpeeds.omegaRadiansPerSecond;