|
LightLib
PROS library for VEX V5: EKF/MCL localization, RAMSETE path following, high-level chassis API
|
#include <xDriveModel.hpp>
Public Member Functions | |
| XDriveModel (std::shared_ptr< AbstractMotor > itopLeftMotor, std::shared_ptr< AbstractMotor > itopRightMotor, std::shared_ptr< AbstractMotor > ibottomRightMotor, std::shared_ptr< AbstractMotor > ibottomLeftMotor, std::shared_ptr< ContinuousRotarySensor > ileftEnc, std::shared_ptr< ContinuousRotarySensor > irightEnc, double imaxVelocity, double imaxVoltage) | |
| Model for an x drive (wheels at 45 deg from a skid steer drive). | |
| void | forward (double ipower) override |
| Drive the robot forwards (using open-loop control). | |
| void | driveVector (double iforwardSpeed, double iyaw) override |
| Drive the robot in an arc (using open-loop control). | |
| void | driveVectorVoltage (double iforwardSpeed, double iyaw) override |
| Drive the robot in an arc. | |
| void | rotate (double ipower) override |
| Turn the robot clockwise (using open-loop control). | |
| void | strafe (double ipower) |
| Drive the robot side-ways (using open-loop control) where positive ipower is to the right and negative ipower is to the left. | |
| void | strafeVector (double istrafeSpeed, double iyaw) |
| Strafe the robot in an arc (using open-loop control) where positive istrafeSpeed is to the right and negative istrafeSpeed is to the left. | |
| void | stop () override |
| Stop the robot (set all the motors to 0). | |
| void | tank (double ileftSpeed, double irightSpeed, double ithreshold=0) override |
| Drive the robot with a tank drive layout. | |
| void | arcade (double iforwardSpeed, double iyaw, double ithreshold=0) override |
| Drive the robot with an arcade drive layout. | |
| void | curvature (double iforwardSpeed, double icurvature, double ithreshold=0) override |
| Drive the robot with a curvature drive layout. | |
| virtual void | xArcade (double irightSpeed, double iforwardSpeed, double iyaw, double ithreshold=0) |
| Drive the robot with an arcade drive layout. | |
| virtual void | fieldOrientedXArcade (double ixSpeed, double iySpeed, double iyaw, QAngle iangle, double ithreshold=0) |
| Drive the robot with a field-oriented arcade drive layout. | |
| void | left (double ispeed) override |
| Power the left side motors. | |
| void | right (double ispeed) override |
| Power the right side motors. | |
| std::valarray< std::int32_t > | getSensorVals () const override |
| Read the sensors. | |
| void | resetSensors () override |
| Reset the sensors to their zero point. | |
| void | setBrakeMode (AbstractMotor::brakeMode mode) override |
| Set the brake mode for each motor. | |
| void | setEncoderUnits (AbstractMotor::encoderUnits units) override |
| Set the encoder units for each motor. | |
| void | setGearing (AbstractMotor::gearset gearset) override |
| Set the gearset for each motor. | |
| void | setMaxVelocity (double imaxVelocity) override |
| Sets a new maximum velocity in RPM. | |
| double | getMaxVelocity () const override |
| void | setMaxVoltage (double imaxVoltage) override |
Sets a new maximum voltage in mV in the range [0-12000]. | |
| double | getMaxVoltage () const override |
| std::shared_ptr< AbstractMotor > | getTopLeftMotor () const |
| Returns the top left motor. | |
| std::shared_ptr< AbstractMotor > | getTopRightMotor () const |
| Returns the top right motor. | |
| std::shared_ptr< AbstractMotor > | getBottomRightMotor () const |
| Returns the bottom right motor. | |
| std::shared_ptr< AbstractMotor > | getBottomLeftMotor () const |
| Returns the bottom left motor. | |
Public Member Functions inherited from okapi::ChassisModel | |
| ChassisModel ()=default | |
| ChassisModel (const ChassisModel &)=delete | |
| ChassisModel & | operator= (const ChassisModel &)=delete |
Public Member Functions inherited from okapi::ReadOnlyChassisModel | |
| virtual | ~ReadOnlyChassisModel ()=default |
Protected Attributes | |
| double | maxVelocity |
| double | maxVoltage |
| std::shared_ptr< AbstractMotor > | topLeftMotor |
| std::shared_ptr< AbstractMotor > | topRightMotor |
| std::shared_ptr< AbstractMotor > | bottomRightMotor |
| std::shared_ptr< AbstractMotor > | bottomLeftMotor |
| std::shared_ptr< ContinuousRotarySensor > | leftSensor |
| std::shared_ptr< ContinuousRotarySensor > | rightSensor |
Definition at line 14 of file xDriveModel.hpp.
| okapi::XDriveModel::XDriveModel | ( | std::shared_ptr< AbstractMotor > | itopLeftMotor, |
| std::shared_ptr< AbstractMotor > | itopRightMotor, | ||
| std::shared_ptr< AbstractMotor > | ibottomRightMotor, | ||
| std::shared_ptr< AbstractMotor > | ibottomLeftMotor, | ||
| std::shared_ptr< ContinuousRotarySensor > | ileftEnc, | ||
| std::shared_ptr< ContinuousRotarySensor > | irightEnc, | ||
| double | imaxVelocity, | ||
| double | imaxVoltage | ||
| ) |
Model for an x drive (wheels at 45 deg from a skid steer drive).
When all motors are powered +100%, the robot should move forward in a straight line.
| itopLeftMotor | The top left motor. |
| itopRightMotor | The top right motor. |
| ibottomRightMotor | The bottom right motor. |
| ibottomLeftMotor | The bottom left motor. |
| ileftEnc | The left side encoder. |
| irightEnc | The right side encoder. |
|
overridevirtual |
Drive the robot with an arcade drive layout.
Uses voltage mode.
| iforwardSpeed | speed in the forward direction |
| iyaw | speed around the vertical axis |
| ithreshold | deadband on joystick values |
Implements okapi::ChassisModel.
|
overridevirtual |
Drive the robot with a curvature drive layout.
The robot drives in constant radius turns where you control the curvature (inverse of radius) you drive in. This is advantageous because the forward speed will not affect the rate of turning. The algorithm switches to arcade if the forward speed is 0. Uses voltage mode.
| iforwardSpeed | speed forward direction |
| icurvature | curvature (inverse of radius) to drive in |
| ithreshold | deadband on joystick values |
Implements okapi::ChassisModel.
|
overridevirtual |
Drive the robot in an arc (using open-loop control).
Uses velocity mode. The algorithm is (approximately): leftPower = forwardSpeed + yaw rightPower = forwardSpeed - yaw
| iforwardSpeed | speed in the forward direction |
| iyaw | speed around the vertical axis |
Implements okapi::ChassisModel.
|
overridevirtual |
Drive the robot in an arc.
Uses voltage mode. The algorithm is (approximately): leftPower = forwardSpeed + yaw rightPower = forwardSpeed - yaw
| iforwadSpeed | speed in the forward direction |
| iyaw | speed around the vertical axis |
Implements okapi::ChassisModel.
|
virtual |
Drive the robot with a field-oriented arcade drive layout.
Uses voltage mode. For example: Both fieldOrientedXArcade(1, 0, 0, 0_deg) and fieldOrientedXArcade(1, 0, 0, 90_deg) will drive the chassis in the forward/north direction. In other words, no matter the robot's heading, the robot will move forward/north when you tell it to move forward/north and will move right/east when you tell it to move right/east.
| ixSpeed | forward speed – (+1) forward, (-1) backward |
| iySpeed | sideways speed – (+1) right, (-1) left |
| iyaw | turn speed – (+1) clockwise, (-1) counter-clockwise |
| iangle | current chassis angle (0_deg = no correction, winds clockwise) |
| ithreshold | deadband on joystick values |
|
overridevirtual |
Drive the robot forwards (using open-loop control).
Uses velocity mode.
| ispeed | motor power |
Implements okapi::ChassisModel.
| std::shared_ptr< AbstractMotor > okapi::XDriveModel::getBottomLeftMotor | ( | ) | const |
Returns the bottom left motor.
| std::shared_ptr< AbstractMotor > okapi::XDriveModel::getBottomRightMotor | ( | ) | const |
Returns the bottom right motor.
|
overridevirtual |
Implements okapi::ChassisModel.
|
overridevirtual |
[0-12000]. Implements okapi::ChassisModel.
|
overridevirtual |
Read the sensors.
Implements okapi::ReadOnlyChassisModel.
| std::shared_ptr< AbstractMotor > okapi::XDriveModel::getTopLeftMotor | ( | ) | const |
Returns the top left motor.
| std::shared_ptr< AbstractMotor > okapi::XDriveModel::getTopRightMotor | ( | ) | const |
Returns the top right motor.
|
overridevirtual |
Power the left side motors.
Uses velocity mode.
| ispeed | The motor power. |
Implements okapi::ChassisModel.
|
overridevirtual |
Reset the sensors to their zero point.
Implements okapi::ChassisModel.
|
overridevirtual |
Power the right side motors.
Uses velocity mode.
| ispeed | The motor power. |
Implements okapi::ChassisModel.
|
overridevirtual |
Turn the robot clockwise (using open-loop control).
Uses velocity mode.
| ipower | motor power |
Implements okapi::ChassisModel.
|
overridevirtual |
|
overridevirtual |
Set the encoder units for each motor.
| units | new motor encoder units |
Implements okapi::ChassisModel.
|
overridevirtual |
|
overridevirtual |
Sets a new maximum velocity in RPM.
The usable maximum depends on the maximum velocity of the currently installed gearset. If the configured maximum velocity is greater than the attainable maximum velocity from the currently installed gearset, the ChassisModel will still scale to that velocity.
| imaxVelocity | The new maximum velocity. |
Implements okapi::ChassisModel.
|
overridevirtual |
Sets a new maximum voltage in mV in the range [0-12000].
| imaxVoltage | The new maximum voltage. |
Implements okapi::ChassisModel.
|
overridevirtual |
| void okapi::XDriveModel::strafe | ( | double | ipower | ) |
Drive the robot side-ways (using open-loop control) where positive ipower is to the right and negative ipower is to the left.
Uses velocity mode.
| ispeed | motor power |
| void okapi::XDriveModel::strafeVector | ( | double | istrafeSpeed, |
| double | iyaw | ||
| ) |
Strafe the robot in an arc (using open-loop control) where positive istrafeSpeed is to the right and negative istrafeSpeed is to the left.
Uses velocity mode. The algorithm is (approximately): topLeftPower = -1 * istrafeSpeed + yaw topRightPower = istrafeSpeed - yaw bottomRightPower = -1 * istrafeSpeed - yaw bottomLeftPower = istrafeSpeed + yaw
| istrafeSpeed | speed to the right |
| iyaw | speed around the vertical axis |
|
overridevirtual |
Drive the robot with a tank drive layout.
Uses voltage mode.
| ileftSpeed | left side speed |
| irightSpeed | right side speed |
| ithreshold | deadband on joystick values |
Implements okapi::ChassisModel.
|
virtual |
Drive the robot with an arcade drive layout.
Uses voltage mode.
| irightSpeed | speed to the right |
| iforwardSpeed | speed in the forward direction |
| iyaw | speed around the vertical axis |
| ithreshold | deadband on joystick values |
|
protected |
Definition at line 269 of file xDriveModel.hpp.
|
protected |
Definition at line 268 of file xDriveModel.hpp.
|
protected |
Definition at line 270 of file xDriveModel.hpp.
|
protected |
Definition at line 264 of file xDriveModel.hpp.
|
protected |
Definition at line 265 of file xDriveModel.hpp.
|
protected |
Definition at line 271 of file xDriveModel.hpp.
|
protected |
Definition at line 266 of file xDriveModel.hpp.
|
protected |
Definition at line 267 of file xDriveModel.hpp.