WPILibC++
unspecified
|
A class for driving differential drive/skid-steer drive platforms such as the Kit of Parts drive base, "tank drive", or West Coast Drive. More...
#include <DifferentialDrive.h>
Public Member Functions | |
DifferentialDrive (SpeedController &leftMotor, SpeedController &rightMotor) | |
Construct a DifferentialDrive. More... | |
DifferentialDrive (const DifferentialDrive &)=delete | |
DifferentialDrive & | operator= (const DifferentialDrive &)=delete |
void | ArcadeDrive (double y, double rotation, bool squaredInputs=true) |
Arcade drive method for differential drive platform. More... | |
void | CurvatureDrive (double y, double rotation, bool isQuickTurn) |
Curvature drive method for differential drive platform. More... | |
void | TankDrive (double left, double right, bool squaredInputs=true) |
Tank drive method for differential drive 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 differential drive/skid-steer drive platforms such as the Kit of Parts drive base, "tank drive", or West Coast Drive.
These drive bases typically have drop-center / skid-steer with two or more wheels per side (e.g., 6WD or 8WD). This class takes a SpeedController per side. For four and six motor drivetrains, construct and pass in SpeedControllerGroup instances as follows.
Four motor drivetrain:
Six motor drivetrain:
A differential drive robot has left and right wheels separated by an arbitrary width.
Drive base diagram:
|_______| | | | | | | |_|___|_| | |
Each Drive() function provides different inverse kinematic relations for a differential drive robot. Motor outputs for the right side are negated, so motor direction inversion by the user is usually unnecessary.
DifferentialDrive::DifferentialDrive | ( | SpeedController & | leftMotor, |
SpeedController & | rightMotor | ||
) |
Construct a DifferentialDrive.
To pass multiple motors per side, use a SpeedControllerGroup. If a motor needs to be inverted, do so before passing it in.
void DifferentialDrive::ArcadeDrive | ( | double | y, |
double | rotation, | ||
bool | squaredInputs = true |
||
) |
Arcade drive method for differential drive platform.
Note: Some drivers may prefer inverted rotation controls. This can be done by negating the value passed for rotation.
y | The value to use for forwards/backwards. [-1.0..1.0] |
rotation | The value to use for the rotation right/left. [-1.0..1.0] |
squaredInputs | If set, decreases the input sensitivity at low speeds. |
void DifferentialDrive::CurvatureDrive | ( | double | y, |
double | rotation, | ||
bool | isQuickTurn | ||
) |
Curvature drive method for differential drive platform.
The rotation argument controls the curvature of the robot's path rather than its rate of heading change. This makes the robot more controllable at high speeds. Also handles the robot's quick turn functionality - "quick turn" overrides constant-curvature turning for turn-in-place maneuvers.
y | The value to use for forwards/backwards. [-1.0..1.0] |
rotation | The value to use for the rotation right/left. [-1.0..1.0] |
isQuickTurn | If set, overrides constant-curvature turning for turn-in-place maneuvers. |
void DifferentialDrive::TankDrive | ( | double | left, |
double | right, | ||
bool | squaredInputs = true |
||
) |
Tank drive method for differential drive platform.
left | The value to use for left side motors. [-1.0..1.0] |
right | The value to use for right side motors. [-1.0..1.0] |
squaredInputs | If set, decreases the input sensitivity at low speeds. |