smartdrive#

Invoering#

De smartdrive klasse bestuurt hoe een robot rijdt en draait met behulp van motoren, wielen en een sensor. Een smartdrive kan een Inertial Sensor of Gyro Sensor gebruiken om de richting en rotatie te volgen.

smartdrive gebruikt de sensor om de robot nauwkeurig te laten bewegen en draaien. Aan het begin van elk project kalibreert de aandrijving de sensor automatisch. Houd de robot tijdens de kalibratie ongeveer 2 seconden stil, zodat hij correct kan bewegen en draaien.

De smartdrive klasse is gebaseerd op de drivetrain-klasse. Deze kan dezelfde aandrijf- en draaifuncties gebruiken als drivetrain, en voegt ook sensor-gebaseerde functies toe zoals turnToHeading en turnToRotation.

Klasseconstructors#

1 — Creëert een smartdrive met behulp van bestaande motor_group objecten voor de linker (&l) en rechter (&r) zijde, samen met een traagheidssensor of gyroscoopsensor.

smartdrive(
    motor_group     &l,
    motor_group     &r,
    inertial        &g,
    double          wheelTravel = 320,
    double          trackWidth  = 320,
    double          wheelBase   = 130,
    distanceUnits   unit = mm,
    double          externalGearRatio = 1.0 );

2 — Creëert een slimme aandrijving met behulp van bestaande motor objecten voor de linker (&l) en rechter (&r) zijde, samen met een traagheidssensor of gyroscoopsensor.

smartdrive(
    motor           &l,
    motor           &r,
    inertial        &g,
    double          wheelTravel = 320,
    double          trackWidth  = 320,
    double          wheelBase   = 130,
    distanceUnits   unit = mm,
    double          externalGearRatio = 1.0 );

Klasse-destructor#

Vernietigt het smartdrive-object smartdrive en geeft de bijbehorende resources vrij.

~smartdrive();

Parameters#

De sensorparameter kan een inertial of gyro object zijn.

Parameter

Type

Beschrijving

&l / &r

motor_group / motor

Verwijzingen naar bestaande motor of motor_group instanties. Beide parameters moeten van hetzelfde type zijn: ofwel twee motor_group instanties of twee motor instanties. De parameter &l verwijst naar de linker motor of motorgroep, en &r verwijst naar de rechter motor of motorgroep.

&g

gyro&

Een verwijzing naar een bestaande gyro of inertial instantie.

wheelTravel

double

De omtrek van de aandrijfwielen. De standaardwaarde is 320.

trackWidth

double

De afstand tussen het linker- en rechterwiel. De standaardwaarde is 320.

wheelBase

double

De afstand tussen de voor- en achterwielen. De standaardwaarde is 130.

unit

distanceUnits

De eenheid voor wheelTravel, trackWidthen wheelBase: mm (millimeter, standaard) of inches.

externalGearRatio

double

De overbrengingsverhouding die wordt gebruikt om de aandrijfafstand aan te passen als er versnellingen worden gebruikt. De standaardwaarde is 1.0.

Voorbeeld#

/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */

// Create the left and right motor instances
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the inertial instance
inertial myInertial = inertial(PORT3);

// Create the smartdrive instance
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor object
    rightMotor, // right motor object
    myInertial, // inertial object
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

Lidfuncties#

De klasse smartdrive omvat de volgende lidfuncties:

Acties — Beweeg de robot met behulp van de richtings- of rotatiefunctie.

Instellingen — Pas de waarden voor kop- en rotatiehoek aan.

  • setHeading — Wijzigt de huidige richting van de robot naar een nieuwe richting.

  • setRotation — Verandert de huidige rotatie van de robot naar een nieuwe rotatie.

Waarden — Controleer koptekst en rotatie.

  • heading — Geeft de huidige richting van de robot weer, van 0 tot 359 graden.

  • rotation — Geeft de huidige rotatie van de robot terug.

Een smartdrive kan ook gebruikmaken van de overgeërfde lidfuncties van drivetrain, zoals drive, driveFor, turn, turnFor, stop, isDone, en isMoving.

Voordat er functies van het smartdrive-lid smartdrive kunnen worden aangeroepen, moet er een smartdrive-instantie smartdrive worden aangemaakt, zoals hieronder weergegeven:

/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */

// Create the left and right motor instances
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the inertial instance
inertial myInertial = inertial(PORT3);

// Create the smartdrive instance
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor object
    rightMotor, // right motor object
    myInertial, // inertial object
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

turnToHeading#

Een koers is de richting waarin de robot kijkt, gemeten in graden. turnToHeading draait de robot in een specifieke richting tussen -359 en 359 graden. De robot draait in de kortste richting om de doelkoers te bereiken.

De beginrichting van de robot is 0 graden.

Het project wacht tot de robot klaar is met draaien voordat de volgende regel code wordt uitgevoerd.

Available Functions

1 — Draait de aandrijving naar de opgegeven richting met behulp van de momenteel geconfigureerde draaisnelheid.

bool turnToHeading(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — Draait de aandrijving naar de opgegeven richting met de opgegeven snelheid.

bool turnToHeading(
    double        angle,
    rotationUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

Parameter

Type

Beschrijving

angle

double

De richting waarin de robot moet kijken, in graden. Dit kan van -359 tot 359 graden zijn bij gebruik van deg of degrees.

units

rotationUnits

De rotatie-eenheid is: deg , rev of raw . Eén omwenteling is gelijk aan 360 graden.

velocity

double

De draaisnelheid varieert van 0% tot 100% bij gebruik van velocityUnits::pct, van 0 tot 600 rpm bij gebruik van rpm, of van 0 tot 3600 graden per seconde bij gebruik van dpsAls er geen snelheid wordt opgegeven, draait de robot met de huidige draaisnelheid.

units_v

velocityUnits

De snelheidseenheid: velocityUnits::pct (procent), rpm (rotaties per minuut), of dps (graden per seconde).

waitForCompletion

bool

true (standaard) zorgt ervoor dat het project wacht tot de robot klaar is met draaien voordat de volgende regel code wordt uitgevoerd. false zorgt ervoor dat de volgende regel code direct wordt uitgevoerd.

Return Values

Geeft als Booleaanse waarde terug of de robot de beoogde koers heeft bereikt.

  • true — De robot heeft de beoogde koers bereikt.

  • false — De robot heeft de beurt niet afgemaakt, of de functie is teruggekeerd voordat de beurt was voltooid omdat waitForCompletion was ingesteld op false.

Notes
  • Het uitvoeren van een andere aandrijfbewegingsfunctie (zoals turn of drive) terwijl turnToHeading bezig is, onderbreekt de huidige beweging.

  • Omdat turnToHeading doelgebaseerd is (een angle parameter gebruikt), werken functies zoals isDone en isMoving met turnToHeading.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

turnToRotation#

turnToRotation draait de robot naar een specifieke rotatie.

Rotatie is de mate waarin de robot is gedraaid, gemeten in graden of omwentelingen. Aan het begin van een project wordt de rotatiewaarde ingesteld op 0 graden. Rotatie kan ook worden ingesteld met behulp van de functie setRotation.

De rotatiewaarden zijn absoluut. Dit betekent dat de draairichting afhangt van de huidige rotatie van de robot. Naar rechts draaien vergroot de rotatie, naar links draaien verkleint de rotatie.

Als de robot bijvoorbeeld begint bij 0 graden en je draait hem 720 graden, dan draait hij twee keer naar rechts. Als je hem vervolgens 360 graden draait, draait hij één keer naar links, omdat 360 minder is dan 720.

Het project wacht tot de robot klaar is met draaien voordat de volgende regel code wordt uitgevoerd.

Available Functions

1 — Draait de aandrijflijn naar de gespecificeerde rotatie met behulp van de momenteel geconfigureerde draaisnelheid.

bool turnToRotation(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — Draait de aandrijflijn naar het gespecificeerde toerental bij de gespecificeerde snelheid.

bool turnToRotation(
    double        angle,
    rotationUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

Parameter

Type

Beschrijving

angle

double

De rotatiewaarde waarnaar de robot zal draaien.

units

rotationUnits

De rotatie-eenheid is: deg , rev of raw . Eén omwenteling is gelijk aan 360 graden.

velocity

double

De draaisnelheid varieert van 0% tot 100% bij gebruik van velocityUnits::pct, van 0 tot 600 rpm bij gebruik van rpm, of van 0 tot 3600 graden per seconde bij gebruik van dpsAls er geen snelheid wordt opgegeven, draait de robot met de huidige draaisnelheid.

units_v

velocityUnits

De snelheidseenheid: velocityUnits::pct (procent), rpm (rotaties per minuut), of dps (graden per seconde).

waitForCompletion

bool

true (standaard) zorgt ervoor dat het project wacht tot de robot klaar is met draaien voordat de volgende regel code wordt uitgevoerd. false zorgt ervoor dat de volgende regel code direct wordt uitgevoerd.

Return Values

Geeft als Booleaanse waarde terug of de robot de beoogde rotatie heeft bereikt.

  • true — De robot heeft de beoogde rotatie bereikt.

  • false — De robot heeft de beurt niet afgemaakt, of de functie is teruggekeerd voordat de beurt was voltooid omdat waitForCompletion was ingesteld op false.

Notes
  • Het uitvoeren van een andere aandrijfbewegingsfunctie (zoals turn of drive) terwijl turnToRotation bezig is, onderbreekt de huidige beweging.

  • Omdat turnToRotation doelgebaseerd is (een angle parameter gebruikt), werken functies zoals isDone en isMoving met turnToRotation.

Examples
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

calibrateDrivetrain#

calibrateDrivetrain kalibreert de traagheidssensor of gyroscoopsensor die is geconfigureerd met de smartdrive.

Kalibratie zorgt ervoor dat de sensor beweging correct meet. Houd de robot tijdens de kalibratie ongeveer 2 seconden stil. Als de robot beweegt tijdens de kalibratie, meet de sensor de beweging mogelijk niet correct.

Het project wacht tot de kalibratie is voltooid voordat de volgende regel code wordt uitgevoerd.

calibrateDrivetrain wordt automatisch gegenereerd door VEXcode wanneer een aandrijflijn is geconfigureerd met een traagheidssensor of gyroscoopsensor. Het wordt meegeleverd als onderdeel van de projectbroncode en maakt geen deel uit van de VEX EXP C++ API.

Available Functions
void calibrateDrivetrain();

Parameters

Deze functie accepteert geen parameters.

Return Values

Deze functie retourneert geen waarde.

Notes
  • De robot kalibreert zichzelf automatisch aan het begin van elk project.

  • Houd de robot tijdens de kalibratie ongeveer 2 seconden stil.

Function Implementation

Hieronder volgt de automatisch gegenereerde implementatie van calibrateDrivetrain , gemaakt door VEXcode:

bool vexcode_initial_drivetrain_calibration_completed = false;
void calibrateDrivetrain() {
  wait(200, msec);
  Brain.Screen.print("Calibrating");
  Brain.Screen.newLine();
  Brain.Screen.print("Inertial");
  DrivetrainInertial.calibrate();
  while (DrivetrainInertial.isCalibrating()) {
    wait(25, msec);
  }
  vexcode_initial_drivetrain_calibration_completed = true;
  // Clears the screen and returns the cursor to row 1, column 1.
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
}

setHeading#

Een koers is de richting waarin de robot kijkt, gemeten in graden. setHeading verandert de huidige koers van de robot naar een nieuwe koerswaarde.

Als de robot bijvoorbeeld naar rechts is gedraaid, zorgt het instellen van de richting op 0 graden ervoor dat die naar rechts gerichte positie de nieuwe 0 graden wordt. Vervolgens kan de robot zich op basis van die nieuwe richting naar andere posities draaien.

Available Functions
void  setHeading(
  double value,
  rotationUnits units);

Parameters

Parameter

Type

Beschrijving

value

double

De richtingswaarde die voor de robot moet worden ingesteld. Deze kan variëren van -359 tot 359 bij gebruik deg of degrees.

units

rotationUnits

De eenheid van de koptekst: deg , rev of raw . Eén omwenteling is gelijk aan 360 graden.

Return Values

Deze functie retourneert geen waarde.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

setRotation#

Rotatie geeft aan hoeveel de robot is gedraaid, gemeten in graden of omwentelingen. Aan het begin van een project wordt de rotatiewaarde ingesteld op 0 graden. setRotation wordt de huidige rotatie van de robot gewijzigd naar een nieuwe waarde.

Als de robot bijvoorbeeld twee volledige draaien naar rechts heeft gemaakt, is de rotatiewaarde 720 graden. Door de rotatie op 0 graden te zetten, wordt die rotatiewaarde gereset van 720 naar 0 graden. De robot kan vervolgens draaien op basis van die nieuwe waarde.

Available Functions
void  setRotation(
  double value,
  rotationUnits units);

Parameters

Parameter

Type

Beschrijving

value

double

De rotatiewaarde die voor de robot moet worden ingesteld.

units

rotationUnits

De rotatie-eenheid is: deg , rev of raw . Eén omwenteling is gelijk aan 360 graden.

Return Values

Deze functie retourneert geen waarde.

Examples
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

heading#

Een koers is de richting waarin de robot kijkt, gemeten in graden. heading geeft de huidige koers van de robot weer, van 0 tot 359 graden.

De beginrichting van de robot is 0 graden.

Available Functions
double heading( rotationUnits units = rotationUnits::deg );

Parameters

Parameter

Type

Beschrijving

units

rotationUnits

Optioneel. De eenheid waarin de richting moet worden weergegeven: degrees, deg (standaard), revof rawEén omwenteling is gelijk aan 360 graden.

Return Values

Geeft de huidige richting van de robot weer als een double in de geselecteerde eenheid.

Examples
// Show heading before and after turning
Brain.Screen.print("Before: %f", myDrivetrain.heading(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.heading(degrees));
myDrivetrain.stop();

rotation#

Rotatie geeft aan hoeveel de robot is gedraaid, gemeten in graden of omwentelingen. Aan het begin van een project wordt de rotatiewaarde ingesteld op 0 graden. rotation geeft de huidige rotatie van de robot weer.

Naar rechts draaien vergroot de rotatie, en naar links draaien verkleint de rotatie. Twee volledige draaien naar rechts resulteren bijvoorbeeld in een rotatie van 720 graden.

Available Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

Parameter

Type

Beschrijving

units

rotationUnits

Optioneel. De eenheid waarin de richting moet worden weergegeven: degrees, deg (standaard), revof rawEén omwenteling is gelijk aan 360 graden.

Return Values

Geeft de huidige rotatie van de robot terug als een double in de geselecteerde eenheid.

Examples
// Show rotation before and after turning
Brain.Screen.print("Before: %f", myDrivetrain.rotation(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.rotation(degrees));
myDrivetrain.stop();