WPILibC++
unspecified
|
A class for driving Mecanum drive platforms. More...
#include <MecanumDrive.h>
Public Member Functions | |
MecanumDrive (SpeedController &frontLeftMotor, SpeedController &rearLeftMotor, SpeedController &frontRightMotor, SpeedController &rearRightMotor) | |
Construct a MecanumDrive. More... | |
MecanumDrive (const MecanumDrive &)=delete | |
MecanumDrive & | operator= (const MecanumDrive &)=delete |
void | DriveCartesian (double x, double y, double rotation, double gyroAngle=0.0) |
Drive method for Mecanum platform. More... | |
void | DrivePolar (double magnitude, double angle, double rotation) |
Drive method for Mecanum platform. More... | |
void | StopMotor () override |
void | GetDescription (llvm::raw_ostream &desc) const override |
![]() | |
RobotDriveBase (const RobotDriveBase &)=delete | |
RobotDriveBase & | operator= (const RobotDriveBase &)=delete |
void | SetDeadband (double deadband) |
void | SetMaxOutput (double maxOutput) |
Configure the scaling factor for using RobotDrive with motor controllers in a mode other than PercentVbus. More... | |
void | SetExpiration (double timeout) override |
double | GetExpiration () const override |
bool | IsAlive () const override |
bool | IsSafetyEnabled () const override |
void | SetSafetyEnabled (bool enabled) override |
![]() | |
ErrorBase (const ErrorBase &)=delete | |
ErrorBase & | operator= (const ErrorBase &)=delete |
virtual Error & | GetError () |
Retrieve the current error. More... | |
virtual const Error & | GetError () const |
virtual void | SetErrnoError (llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) const |
Set error information associated with a C library call that set an error to the "errno" global variable. More... | |
virtual void | SetImaqError (int success, llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) const |
Set the current error information associated from the nivision Imaq API. More... | |
virtual void | SetError (Error::Code code, llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) const |
Set the current error information associated with this sensor. More... | |
virtual void | SetErrorRange (Error::Code code, int32_t minRange, int32_t maxRange, int32_t requestedValue, llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) const |
Set the current error information associated with this sensor. More... | |
virtual void | SetWPIError (llvm::StringRef errorMessage, Error::Code code, llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) const |
Set the current error information associated with this sensor. More... | |
virtual void | CloneError (const ErrorBase &rhs) const |
virtual void | ClearError () const |
Clear the current error information associated with this sensor. | |
virtual bool | StatusIsFatal () const |
Check if the current error code represents a fatal error. More... | |
Additional Inherited Members | |
![]() | |
enum | MotorType { kFrontLeft = 0, kFrontRight = 1, kRearLeft = 2, kRearRight = 3, kLeft = 0, kRight = 1, kBack = 2 } |
The location of a motor on the robot for the purpose of driving. | |
![]() | |
static void | SetGlobalError (Error::Code code, llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) |
static void | SetGlobalWPIError (llvm::StringRef errorMessage, llvm::StringRef contextMessage, llvm::StringRef filename, llvm::StringRef function, int lineNumber) |
static Error & | GetGlobalError () |
Retrieve the current global error. | |
![]() | |
double | Limit (double number) |
Limit motor values to the -1.0 to +1.0 range. | |
double | ApplyDeadband (double number, double deadband) |
Returns 0.0 if the given value is within the specified range around zero. More... | |
void | Normalize (llvm::MutableArrayRef< double > wheelSpeeds) |
Normalize all wheel speeds if the magnitude of any wheel is greater than 1.0. | |
![]() | |
double | m_deadband = 0.02 |
double | m_maxOutput = 1.0 |
MotorSafetyHelper | m_safetyHelper {this} |
![]() | |
Error | m_error |
![]() | |
static std::mutex | _globalErrorMutex |
static Error | _globalError |
A class for driving Mecanum drive platforms.
Mecanum drives are rectangular with one wheel on each corner. Each wheel has rollers toed in 45 degrees toward the front or back. When looking at the wheels from the top, the roller axles should form an X across the robot.
Drive base diagram:
\_______/ \ | | / | | /_|___|_\ / \
Each Drive() function provides different inverse kinematic relations for a Mecanum drive robot. Motor outputs for the right side are negated, so motor direction inversion by the user is usually unnecessary.
MecanumDrive::MecanumDrive | ( | SpeedController & | frontLeftMotor, |
SpeedController & | rearLeftMotor, | ||
SpeedController & | frontRightMotor, | ||
SpeedController & | rearRightMotor | ||
) |
Construct a MecanumDrive.
If a motor needs to be inverted, do so before passing it in.
void MecanumDrive::DriveCartesian | ( | double | x, |
double | y, | ||
double | rotation, | ||
double | gyroAngle = 0.0 |
||
) |
Drive method for Mecanum platform.
x | The speed that the robot should drive in the X direction. [-1.0..1.0] |
y | The speed that the robot should drive in the Y direction. [-1.0..1.0] |
rotation | The rate of rotation for the robot that is completely independent of the translation. [-1.0..1.0] |
gyroAngle | The current angle reading from the gyro. Use this to implement field-oriented controls. |
void MecanumDrive::DrivePolar | ( | double | magnitude, |
double | angle, | ||
double | rotation | ||
) |
Drive method for Mecanum platform.
magnitude | The speed that the robot should drive in a given direction. [-1.0..1.0] |
angle | The direction the robot should drive in degrees. 0.0 is straight ahead. The direction and maginitude are independent of the rotation rate. |
rotation | The rate of rotation for the robot that is completely independent of the magnitude or direction. [-1.0..1.0] |