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, Gyro Sensor of GPS 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_groupobjecten voor de linker (&l) en rechter (&r) zijde, samen met een traagheidssensor, gyroscoopsensor of GPS-sensor.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
motorobjecten voor de linker (&l) en rechter (&r) zijde, samen met een traagheidssensor, gyroscoopsensor of GPS-sensor.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, gyroof gps object zijn.
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
Verwijzingen naar bestaande |
|
|
Een verwijzing naar een bestaande |
|
|
De omtrek van de aandrijfwielen. De standaardwaarde is |
|
|
De afstand tussen het linker- en rechterwiel. De standaardwaarde is |
|
|
De afstand tussen de voor- en achterwielen. De standaardwaarde is |
|
|
De eenheid voor |
|
|
De overbrengingsverhouding die wordt gebruikt om de aandrijfafstand aan te passen als er versnellingen worden gebruikt. De standaardwaarde is |
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.
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 geconfigureerde Inertial Sensor, Gyro Sensor of GPS Sensor van de aandrijflijn.
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 Functions1 — Draait de aandrijving naar de opgegeven richting met behulp van de momenteel geconfigureerde draaisnelheid.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — 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 );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De richting waarin de robot moet kijken, in graden. Dit kan van -359 tot 359 graden zijn bij gebruik van |
|
|
De rotatie-eenheid is: |
|
|
De draaisnelheid varieert van 0% tot 100% bij gebruik van |
|
|
De snelheidseenheid: |
|
|
|
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 omdatwaitForCompletionwas ingesteld opfalse.
Het uitvoeren van een andere aandrijfbewegingsfunctie (zoals
turnofdrive) terwijlturnToHeadingbezig is, onderbreekt de huidige beweging.Omdat
turnToHeadingdoelgebaseerd is (eenangleparameter gebruikt), werken functies zoalsisDoneenisMovingmetturnToHeading.
// 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 Functions1 — Draait de aandrijflijn naar de gespecificeerde rotatie met behulp van de momenteel geconfigureerde draaisnelheid.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — 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 );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De rotatiewaarde waarnaar de robot zal draaien. |
|
|
De rotatie-eenheid is: |
|
|
De draaisnelheid varieert van 0% tot 100% bij gebruik van |
|
|
De snelheidseenheid: |
|
|
|
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 omdatwaitForCompletionwas ingesteld opfalse.
Het uitvoeren van een andere aandrijfbewegingsfunctie (zoals
turnofdrive) terwijlturnToRotationbezig is, onderbreekt de huidige beweging.Omdat
turnToRotationdoelgebaseerd is (eenangleparameter gebruikt), werken functies zoalsisDoneenisMovingmetturnToRotation.
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain kalibreert de traagheidssensor, gyroscoopsensor of GPS-sensor 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 wordt geconfigureerd met een traagheidssensor, GPS-sensor of gyroscoopsensor. Het wordt meegeleverd als onderdeel van de projectbroncode en maakt geen deel uit van de VEX V5 C++ API.
void calibrateDrivetrain();
Deze functie accepteert geen parameters.
Return ValuesDeze functie retourneert geen waarde.
NotesDe robot kalibreert zichzelf automatisch aan het begin van elk project.
Houd de robot tijdens de kalibratie ongeveer 2 seconden stil.
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 Functionsvoid setHeading(
double value,
rotationUnits units);
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De richtingswaarde die voor de robot moet worden ingesteld. Deze kan variëren van -359 tot 359 bij gebruik |
|
|
De eenheid van de koptekst: |
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 Functionsvoid setRotation(
double value,
rotationUnits units);
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
De rotatiewaarde die voor de robot moet worden ingesteld. |
|
|
De eenheid van de koptekst: |
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 Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
Optioneel. De eenheid waarin de richting moet worden weergegeven: |
Geeft de huidige richting van de robot weer als een double in de geselecteerde eenheid.
// 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 Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Parameter |
Type |
Beschrijving |
|---|---|---|
|
|
Optioneel. De eenheid waarin de rotatie moet worden weergegeven: |
Geeft de huidige rotatie van de robot terug als een double in de geselecteerde eenheid.
// 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();