smartdrive#

Invoering#

De smartdrive klasse bestuurt hoe een robot rijdt en draait met behulp van motoren, wielen en een gyroscoopsensor. Een smartdrive gebruikt een aangesloten gyroscoopsensor om de richting en rotatie te volgen.

smartdrive gebruikt de gyroscoopsensor om de robot nauwkeurig te laten bewegen en draaien. Aan het begin van elk project kalibreert de aandrijving de gyroscoopsensor 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. Een smartdrive kan dezelfde aandrijf- en draaifuncties gebruiken als drivetrain, en voegt ook sensor-gebaseerde functies toe zoals turnToHeading en turnToRotation.

Op deze pagina wordt myDrivetrain als voorbeeldnaam voor de smartdrive gebruikt. Vervang dit door uw eigen geconfigureerde naam.

Klasseconstructors#

1 — Creëert een smartdrive met behulp van bestaande motor_group objecten voor de linker- en rechterkant, samen met een gyroscoopsensor.

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

2 — Creëert een smartdrive met behulp van bestaande motor objecten voor de linker- en rechterkant, samen met een gyroscoopsensor.

smartdrive(
    motor           &l,
    motor           &r,
    gyro            &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#

Parameter

Type

Beschrijving

&l / &r

motor_group / motor

De linker- en rechtermotor of motorgroepen. Beide parameters moeten van hetzelfde type zijn: ofwel twee motor_group objecten of twee motor -objecten.

&g

gyro

De Gyrosensor die door de smartdrive wordt gebruikt.

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 (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 objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the Gyro Sensor object.
gyro myGyro = gyro(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myGyro,     // Gyro Sensor
    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.

  • turnToHeading — Draait de robot in een specifieke richting tussen -359 en 359 graden. De robot draait in de kortste richting om de doelrichting te bereiken.

  • turnToRotation — Draait de robot naar een specifieke rotatie.

  • calibrateDrivetrain — Kalibreert de gyroscoopsensor die is geconfigureerd met de smartdrive.

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 lidfuncties smartdrive kunnen worden aangeroepen, moet er een smartdrive object worden aangemaakt.

/* 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 objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the Gyro Sensor object.
gyro myGyro = gyro(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myGyro,     // Gyro Sensor
    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 robot in de opgegeven richting met behulp van de huidige draaisnelheid.

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

2 — Draait de robot in 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 eenheid van de koptekst: 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 120 rpm bij gebruik van rpm, of van 0 tot 720 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 terwijl turnToHeading actief is, onderbreekt de huidige beweging.

  • turnToHeading gebruikt een doelrichting, dus isDone en isMoving kunnen ermee gebruikt worden.

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 robot naar de opgegeven rotatie met behulp van de huidige draaisnelheid.

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

2 — Draait de robot naar de opgegeven rotatie met de opgegeven 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 120 rpm bij gebruik van rpm, of van 0 tot 720 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 terwijl turnToRotation actief is, onderbreekt de huidige beweging.

  • turnToRotation gebruikt een doelrotatie, dus isDone en isMoving kunnen ermee gebruikt worden.

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

calibrateDrivetrain#

calibrateDrivetrain kalibreert de gyroscoopsensor die is geconfigureerd met de smartdrive.

Kalibratie zorgt ervoor dat de gyroscoopsensor beweging correct meet. Houd de robot tijdens de kalibratie ongeveer 2 seconden stil. Als de robot beweegt tijdens de kalibratie, meet de gyroscoopsensor 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 wordt geconfigureerd met een gyroscoopsensor. Het wordt meegeleverd als onderdeel van de projectbroncode en maakt geen deel uit van de VEX IQ C++ API.

Available Functions
void calibrateDrivetrain();

Parameters

Deze functie accepteert geen parameters.

Return Values

Deze functie retourneert geen waarde.

Notes
  • De robot kalibreert automatisch aan het begin van elk project wanneer een smartdrive in VEXcode is geconfigureerd.

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

Function Implementation

Hieronder volgt een voorbeeld van 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("Gyro");
  DrivetrainGyro.calibrate();
  while (DrivetrainGyro.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 rotatie 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();