mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-22 01:11:42 +00:00
[wpilib] Make drive classes follow NWU axes convention (#4079)
All trigonometric functions and vector classes assume North-West-Up axes convention, so using North-East-Down convention with them is really error-prone. We've broken something every time we touched the drive classes. We originally used North-East-Down to match the joystick convention, but the volume of long-lived bugs has made this not worth it in retrospect. The rest of WPILib also uses North-West-Up, so this makes things consistent. KilloughDrive was removed since no one uses it.
This commit is contained in:
@@ -45,35 +45,35 @@ TEST(MecanumDriveTest, CartesianIK) {
|
||||
|
||||
TEST(MecanumDriveTest, CartesianIKGyro90CW) {
|
||||
// Forward in global frame; left in robot frame
|
||||
auto speeds = frc::MecanumDrive::DriveCartesianIK(1.0, 0.0, 0.0, 90.0);
|
||||
auto speeds = frc::MecanumDrive::DriveCartesianIK(1.0, 0.0, 0.0, 90_deg);
|
||||
EXPECT_DOUBLE_EQ(-1.0, speeds.frontLeft);
|
||||
EXPECT_DOUBLE_EQ(1.0, speeds.frontRight);
|
||||
EXPECT_DOUBLE_EQ(1.0, speeds.rearLeft);
|
||||
EXPECT_DOUBLE_EQ(-1.0, speeds.rearRight);
|
||||
|
||||
// Left in global frame; backward in robot frame
|
||||
speeds = frc::MecanumDrive::DriveCartesianIK(0.0, -1.0, 0.0, 90.0);
|
||||
speeds = frc::MecanumDrive::DriveCartesianIK(0.0, -1.0, 0.0, 90_deg);
|
||||
EXPECT_DOUBLE_EQ(-1.0, speeds.frontLeft);
|
||||
EXPECT_DOUBLE_EQ(-1.0, speeds.frontRight);
|
||||
EXPECT_DOUBLE_EQ(-1.0, speeds.rearLeft);
|
||||
EXPECT_DOUBLE_EQ(-1.0, speeds.rearRight);
|
||||
|
||||
// Right in global frame; forward in robot frame
|
||||
speeds = frc::MecanumDrive::DriveCartesianIK(0.0, 1.0, 0.0, 90.0);
|
||||
speeds = frc::MecanumDrive::DriveCartesianIK(0.0, 1.0, 0.0, 90_deg);
|
||||
EXPECT_DOUBLE_EQ(1.0, speeds.frontLeft);
|
||||
EXPECT_DOUBLE_EQ(1.0, speeds.frontRight);
|
||||
EXPECT_DOUBLE_EQ(1.0, speeds.rearLeft);
|
||||
EXPECT_DOUBLE_EQ(1.0, speeds.rearRight);
|
||||
|
||||
// Rotate CCW
|
||||
speeds = frc::MecanumDrive::DriveCartesianIK(0.0, 0.0, -1.0, 90.0);
|
||||
speeds = frc::MecanumDrive::DriveCartesianIK(0.0, 0.0, -1.0, 90_deg);
|
||||
EXPECT_DOUBLE_EQ(-1.0, speeds.frontLeft);
|
||||
EXPECT_DOUBLE_EQ(1.0, speeds.frontRight);
|
||||
EXPECT_DOUBLE_EQ(-1.0, speeds.rearLeft);
|
||||
EXPECT_DOUBLE_EQ(1.0, speeds.rearRight);
|
||||
|
||||
// Rotate CW
|
||||
speeds = frc::MecanumDrive::DriveCartesianIK(0.0, 0.0, 1.0, 90.0);
|
||||
speeds = frc::MecanumDrive::DriveCartesianIK(0.0, 0.0, 1.0, 90_deg);
|
||||
EXPECT_DOUBLE_EQ(1.0, speeds.frontLeft);
|
||||
EXPECT_DOUBLE_EQ(-1.0, speeds.frontRight);
|
||||
EXPECT_DOUBLE_EQ(1.0, speeds.rearLeft);
|
||||
@@ -133,35 +133,35 @@ TEST(MecanumDriveTest, CartesianGyro90CW) {
|
||||
drive.SetDeadband(0.0);
|
||||
|
||||
// Forward in global frame; left in robot frame
|
||||
drive.DriveCartesian(1.0, 0.0, 0.0, 90.0);
|
||||
drive.DriveCartesian(1.0, 0.0, 0.0, 90_deg);
|
||||
EXPECT_DOUBLE_EQ(-1.0, fl.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, fr.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, rl.Get());
|
||||
EXPECT_DOUBLE_EQ(-1.0, rr.Get());
|
||||
|
||||
// Left in global frame; backward in robot frame
|
||||
drive.DriveCartesian(0.0, -1.0, 0.0, 90.0);
|
||||
drive.DriveCartesian(0.0, -1.0, 0.0, 90_deg);
|
||||
EXPECT_DOUBLE_EQ(-1.0, fl.Get());
|
||||
EXPECT_DOUBLE_EQ(-1.0, fr.Get());
|
||||
EXPECT_DOUBLE_EQ(-1.0, rl.Get());
|
||||
EXPECT_DOUBLE_EQ(-1.0, rr.Get());
|
||||
|
||||
// Right in global frame; forward in robot frame
|
||||
drive.DriveCartesian(0.0, 1.0, 0.0, 90.0);
|
||||
drive.DriveCartesian(0.0, 1.0, 0.0, 90_deg);
|
||||
EXPECT_DOUBLE_EQ(1.0, fl.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, fr.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, rl.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, rr.Get());
|
||||
|
||||
// Rotate CCW
|
||||
drive.DriveCartesian(0.0, 0.0, -1.0, 90.0);
|
||||
drive.DriveCartesian(0.0, 0.0, -1.0, 90_deg);
|
||||
EXPECT_DOUBLE_EQ(-1.0, fl.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, fr.Get());
|
||||
EXPECT_DOUBLE_EQ(-1.0, rl.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, rr.Get());
|
||||
|
||||
// Rotate CW
|
||||
drive.DriveCartesian(0.0, 0.0, 1.0, 90.0);
|
||||
drive.DriveCartesian(0.0, 0.0, 1.0, 90_deg);
|
||||
EXPECT_DOUBLE_EQ(1.0, fl.Get());
|
||||
EXPECT_DOUBLE_EQ(-1.0, fr.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, rl.Get());
|
||||
@@ -177,35 +177,35 @@ TEST(MecanumDriveTest, Polar) {
|
||||
drive.SetDeadband(0.0);
|
||||
|
||||
// Forward
|
||||
drive.DrivePolar(1.0, 0.0, 0.0);
|
||||
drive.DrivePolar(1.0, 0_deg, 0.0);
|
||||
EXPECT_DOUBLE_EQ(1.0, fl.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, fr.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, rl.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, rr.Get());
|
||||
|
||||
// Left
|
||||
drive.DrivePolar(1.0, -90.0, 0.0);
|
||||
drive.DrivePolar(1.0, -90_deg, 0.0);
|
||||
EXPECT_DOUBLE_EQ(-1.0, fl.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, fr.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, rl.Get());
|
||||
EXPECT_DOUBLE_EQ(-1.0, rr.Get());
|
||||
|
||||
// Right
|
||||
drive.DrivePolar(1.0, 90.0, 0.0);
|
||||
drive.DrivePolar(1.0, 90_deg, 0.0);
|
||||
EXPECT_DOUBLE_EQ(1.0, fl.Get());
|
||||
EXPECT_DOUBLE_EQ(-1.0, fr.Get());
|
||||
EXPECT_DOUBLE_EQ(-1.0, rl.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, rr.Get());
|
||||
|
||||
// Rotate CCW
|
||||
drive.DrivePolar(0.0, 0.0, -1.0);
|
||||
drive.DrivePolar(0.0, 0_deg, -1.0);
|
||||
EXPECT_DOUBLE_EQ(-1.0, fl.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, fr.Get());
|
||||
EXPECT_DOUBLE_EQ(-1.0, rl.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, rr.Get());
|
||||
|
||||
// Rotate CW
|
||||
drive.DrivePolar(0.0, 0.0, 1.0);
|
||||
drive.DrivePolar(0.0, 0_deg, 1.0);
|
||||
EXPECT_DOUBLE_EQ(1.0, fl.Get());
|
||||
EXPECT_DOUBLE_EQ(-1.0, fr.Get());
|
||||
EXPECT_DOUBLE_EQ(1.0, rl.Get());
|
||||
|
||||
Reference in New Issue
Block a user