Mecanum Drive Kinematics¶
MecanumDriveKinematics class is a useful tool that converts between a
ChassisSpeeds object and a
MecanumDriveWheelSpeeds object, which contains velocities for each of the four wheels on a mecanum drive.
Constructing the Kinematics Object¶
MecanumDriveKinematics class accepts four constructor arguments, with each argument being the location of a wheel relative to the robot center (as a
Translation2d). The order for the arguments is front left, front right, back left, and back right. The locations for the wheels must be relative to the center of the robot. Positive x values represent moving toward the front of the robot whereas positive y values represent moving toward the left of the robot.
Converting Chassis Speeds to Wheel Speeds¶
toWheelSpeeds(ChassisSpeeds speeds) (Java) /
ToWheelSpeeds(ChassisSpeeds speeds) (C++) method should be used to convert a
ChassisSpeeds object to a
MecanumDriveWheelSpeeds object. This is useful in situations where you have to convert a forward velocity, sideways velocity, and an angular velocity into individual wheel speeds.
Recall that a
ChassisSpeeds object can be created from a set of desired field-oriented speeds. This feature can be used to get wheel speeds from a set of desired field-oriented speeds.
Using custom centers of rotation¶
Sometimes, rotating around one specific corner might be desirable for certain evasive manuevers. This type of behavior is also supported by the WPILib classes. The same
ToWheelSpeeds() method accepts a second parameter for the center of rotation (as a
Translation2d). Just like the wheel locations, the
Translation2d representing the center of rotation should be relative to the robot center.
Because all robots are a rigid frame, the provided
vy velocities from the
ChassisSpeeds object will still apply for the entirety of the robot. However, the
omega from the
ChassisSpeeds object will be measured from the center of rotation.
For example, one can set the center of rotation on a certain wheel and if the provided
ChassisSpeeds object has a
vy of zero and a non-zero
omega, the robot will appear to rotate around that particular wheel.
Converting wheel speeds to chassis speeds¶
One can also use the kinematics object to convert a
MecanumDriveWheelSpeeds object to a singular
ChassisSpeeds object. The
toChassisSpeeds(MecanumDriveWheelSpeeds speeds) (Java) /
ToChassisSpeeds(MecanumDriveWheelSpeeds soeeds) (C++) method can be used to achieve this.