WPILibC++  unspecified
frc::DifferentialDrive Class Reference

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>

Inheritance diagram for frc::DifferentialDrive:
Collaboration diagram for frc::DifferentialDrive:

Public Member Functions

 DifferentialDrive (SpeedController &leftMotor, SpeedController &rightMotor)
 Construct a DifferentialDrive. More...
 
 DifferentialDrive (const DifferentialDrive &)=delete
 
DifferentialDriveoperator= (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
 
- Public Member Functions inherited from frc::RobotDriveBase
 RobotDriveBase (const RobotDriveBase &)=delete
 
RobotDriveBaseoperator= (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
 
- Public Member Functions inherited from frc::ErrorBase
 ErrorBase (const ErrorBase &)=delete
 
ErrorBaseoperator= (const ErrorBase &)=delete
 
virtual ErrorGetError ()
 Retrieve the current error. More...
 
virtual const ErrorGetError () 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

- Public Types inherited from frc::RobotDriveBase
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 Public Member Functions inherited from frc::ErrorBase
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 ErrorGetGlobalError ()
 Retrieve the current global error.
 
- Protected Member Functions inherited from frc::RobotDriveBase
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.
 
- Protected Attributes inherited from frc::RobotDriveBase
double m_deadband = 0.02
 
double m_maxOutput = 1.0
 
MotorSafetyHelper m_safetyHelper {this}
 
- Protected Attributes inherited from frc::ErrorBase
Error m_error
 
- Static Protected Attributes inherited from frc::ErrorBase
static std::mutex _globalErrorMutex
 
static Error _globalError
 

Detailed Description

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:

class Robot {
public:
frc::Talon m_frontLeft{1};
frc::Talon m_rearLeft{2};
frc::SpeedControllerGroup m_left{m_frontLeft, m_rearLeft};
frc::Talon m_frontRight{3};
frc::Talon m_rearRight{4};
frc::SpeedControllerGroup m_right{m_frontRight, m_rearRight};
frc::DifferentialDrive m_drive{m_left, m_right};
};

Six motor drivetrain:

class Robot {
public:
frc::Talon m_frontLeft{1};
frc::Talon m_midLeft{2};
frc::Talon m_rearLeft{3};
frc::SpeedControllerGroup m_left{m_frontLeft, m_midLeft, m_rearLeft};
frc::Talon m_frontRight{4};
frc::Talon m_midRight{5};
frc::Talon m_rearRight{6};
frc::SpeedControllerGroup m_right{m_frontRight, m_midRight, m_rearRight};
frc::DifferentialDrive m_drive{m_left, m_right};
};

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.

Constructor & Destructor Documentation

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.

Member Function Documentation

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.

Parameters
yThe value to use for forwards/backwards. [-1.0..1.0]
rotationThe value to use for the rotation right/left. [-1.0..1.0]
squaredInputsIf 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.

Parameters
yThe value to use for forwards/backwards. [-1.0..1.0]
rotationThe value to use for the rotation right/left. [-1.0..1.0]
isQuickTurnIf 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.

Parameters
leftThe value to use for left side motors. [-1.0..1.0]
rightThe value to use for right side motors. [-1.0..1.0]
squaredInputsIf set, decreases the input sensitivity at low speeds.

The documentation for this class was generated from the following files: