Skip to content

Convert the unitless joystick inputs to actual physical units#5451

Merged
PeterJohnson merged 7 commits intowpilibsuite:mainfrom
jasonli0616:swerve-controller-example-fix-manual-drive-units
Jul 18, 2023
Merged

Convert the unitless joystick inputs to actual physical units#5451
PeterJohnson merged 7 commits intowpilibsuite:mainfrom
jasonli0616:swerve-controller-example-fix-manual-drive-units

Conversation

@jasonli0616
Copy link
Contributor

Taking the joystick inputs from -1 to 1, multiply them by the max speed (as defined in Constants.java) to get the target speed, rather than using the unitless raw joystick inputs.

This resolves issue #5417.

Taking the joystick inputs from -1 to 1, multiply them by the max speed (defined in Constants.java) to get the specified speed.
@calcmogul
Copy link
Member

calcmogul commented Jul 17, 2023

Here's the corresponding change for C++:

diff --git a/wpilibcExamples/src/main/cpp/examples/SwerveControllerCommand/cpp/RobotContainer.cpp b/wpilibcExamples/src/main/cpp/examples/SwerveControllerCommand/cpp/RobotContainer.cpp
index 52b25b9cb..60b493e52 100644
--- a/wpilibcExamples/src/main/cpp/examples/SwerveControllerCommand/cpp/RobotContainer.cpp
+++ b/wpilibcExamples/src/main/cpp/examples/SwerveControllerCommand/cpp/RobotContainer.cpp
@@ -34,10 +34,9 @@ RobotContainer::RobotContainer() {
   // Turning is controlled by the X axis of the right stick.
   m_drive.SetDefaultCommand(frc2::RunCommand(
       [this] {
-        m_drive.Drive(
-            units::meters_per_second_t{m_driverController.GetLeftY()},
-            units::meters_per_second_t{m_driverController.GetLeftX()},
-            units::radians_per_second_t{m_driverController.GetRightX()}, false);
+        m_drive.Drive(m_driverController.GetLeftY() * kMaxSpeed,
+                      m_driverController.GetLeftX() * kMaxSpeed,
+                      m_driverController.GetRightX() * kMaxAngularSpeed, false);
       },
       {&m_drive}));
 }

Copy link
Member

@calcmogul calcmogul left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Java side looks good, but needs C++.

Taking the joystick inputs from -1 to 1, multiply them by the max speed to get the specified speed.
@jasonli0616
Copy link
Contributor Author

jasonli0616 commented Jul 17, 2023

Made the corresponding change in C++

@jasonli0616 jasonli0616 requested a review from calcmogul July 17, 2023 20:20
@calcmogul
Copy link
Member

/format

calcmogul
calcmogul previously approved these changes Jul 17, 2023
@calcmogul
Copy link
Member

/format

calcmogul
calcmogul previously approved these changes Jul 17, 2023
@jasonli0616
Copy link
Contributor Author

jasonli0616 commented Jul 17, 2023

The build (GitHub Actions check) was failing in cpp.

I used kMaxSpeed and kMaxAngularSpeed instead of AutoConstants::kMaxSpeed and AutoConstants::kMaxAngularSpeed.

Should be fixed now in the commit.

@calcmogul
Copy link
Member

/format

@jasonli0616 jasonli0616 requested a review from calcmogul July 17, 2023 21:03
@PeterJohnson PeterJohnson merged commit 9b8d90b into wpilibsuite:main Jul 18, 2023
@jasonli0616 jasonli0616 deleted the swerve-controller-example-fix-manual-drive-units branch February 5, 2024 17:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Swerve controller command example uses unitless joystick inputs for velocity parameters

3 participants