Cinématique d’entraînement différentiel

La classe DifferentialDriveKinematics est un outil utile qui convertit entre un objet ChassisSpeeds et un objet DifferentialDriveWheelSpeeds, qui contient des vitesses pour les côtés gauche et droit d’un robot à entraînement différentiel.

Construction de l’objet cinématique

L’objet DifferentialDriveKinematics accepte un argument constructeur, qui est la largeur de piste du robot. Cela représente la distance entre les deux trains de roues sur un entraînement différentiel.

Note

En Java, la largeur de la piste doit être en mètres. En C ++, la librairie d’unités peut être utilisée pour transmettre la largeur de piste en utilisant n’importe quelle unité de longueur.

Conversion de Chassis Speeds vers Wheel Speeds

La méthode toWheelSpeeds(ChassisSpeeds speeds) (Java) / ToWheelSpeeds(ChassisSpeeds speeds) (C++) doit être utilisée pour convertir un objet ChassisSpeeds en un objet DifferentialDriveWheelSpeeds. Ceci est utile dans les situations où vous devez convertir une vitesse linéaire (vx) et une vitesse angulaire (omega) en vitesses de roue gauche et droite.

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

Conversion de Wheel Speeds vers Chassis Speeds

On peut également utiliser l’objet cinématique pour convertir les vitesses de roue individuelles (gauche et droite) en un objet ChassisSpeeds unique. La méthode toChassisSpeeds(DifferentialDriveWheelSpeeds speeds) (Java) / ToChassisSpeeds(DifferentialDriveWheelSpeeds speeds) (C++) doit être utilisée pour y parvenir.

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