smartdrive#
Introduktion#
Klassen smartdrive styr hur en robot kör och vrider sig med hjälp av motorer, hjul och en sensor. En smartdrive kan använda en tröghetssensor eller gyrosensor för att spåra kurs och rotation.
En smartdrive använder sensorn för att hjälpa roboten att röra sig och vrida sig exakt. I början av varje projekt kalibrerar drivlinan sensorn automatiskt. Håll roboten stilla i cirka 2 sekunder under kalibreringen, så att roboten kan röra sig och vrida sig korrekt.
Klassen smartdrive är baserad på klassen drivetrain. Den kan använda samma kör- och svängfunktioner som drivetrain, och den lägger också till sensorbaserade funktioner som turnToHeading och turnToRotation.
Klasskonstruktörer#
1 — Skapar en smartdrive med hjälp av befintliga
motor_groupobjekt för vänster (&l) och höger (&r) sida, tillsammans med en tröghetssensor eller gyrosensor.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 — Skapar en smartdrive med hjälp av befintliga
motorobjekt för vänster (&l) och höger (&r) sida, tillsammans med en tröghetssensor eller gyrosensor.smartdrive( motor &l, motor &r, inertial &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
Klassförstörare#
Förstör smartdrive objektet och frigör tillhörande resurser.
~smartdrive();
Parametrar#
Sensorparametern kan vara ett inertial eller gyro).
Parameter |
Typ |
Beskrivning |
|---|---|---|
|
|
Referenser till befintliga |
|
|
En referens till en befintlig |
|
|
Drivlinans hjulomkrets. Standardvärdet är |
|
|
Avståndet mellan vänster och höger hjul. Standardvärdet är |
|
|
Avståndet mellan fram- och bakhjulen. Standardvärdet är |
|
|
Enheten för |
|
|
Utväxlingsförhållandet som används för att justera körsträckor om växlar används. Standardvärdet är |
Exempel#
/* 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
Medlemsfunktioner#
Klassen smartdrive inkluderar följande medlemsfunktioner:
Åtgärder — Vrid roboten med hjälp av kursriktning eller rotation.
turnToHeading— Vrider roboten så att den möter en specifik kurs från -359 till 359 grader. Roboten svänger den kortaste riktningen för att nå målkursen.turnToRotation— Vrider roboten till en specifik rotation.calibrateDrivetrain— Kalibrerar drivlinans konfigurerade Tröghetssensor eller Gyrosensor.
Inställningar — Justera kurs- och rotationsvärden.
setHeading— Ändrar robotens aktuella kurs till en ny kurs.setRotation— Ändrar robotens aktuella rotation till en ny rotation.
Värden — Kontrollera kurs och rotation.
heading— Returnerar robotens aktuella kurs från 0 till 359 grader.rotation— Returnerar robotens aktuella rotation.
En smartdrive kan också använda de ärvda medlemsfunktionerna från drivetrain, såsom drive, driveFor, turn, turnFor, stop, isDoneoch isMoving.
Innan några smartdrive medlemsfunktioner anropas måste en smartdrive instans skapas, enligt nedan:
/* 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#
En kurs är den riktning roboten är vänd mot, mätt i grader. turnToHeading vrider roboten så att den är vänd mot en specifik kurs från -359 till 359 grader. Roboten kommer att svänga den kortaste riktningen för att nå målkursen.
Robotens startriktning är 0 grader.
Projektet väntar tills roboten är klar med att snurra innan nästa kodrad körs.
Available Functions1 — Svänger drivlinan till den angivna kursen med hjälp av den för närvarande konfigurerade svänghastigheten.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Vrider drivlinan till den angivna riktningen med den angivna hastigheten.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameter |
Typ |
Beskrivning |
|---|---|---|
|
|
Riktningen roboten ska vara vänd i, i grader. Detta kan vara från -359 till 359 när |
|
|
Rotationsenheten: |
|
|
Hastigheten att rotera med från 0 % till 100 % när |
|
|
Hastighetsenheten: |
|
|
|
Returnerar om roboten nådde målriktningen, som ett booleskt värde.
true— Roboten nådde målriktningen.false— Roboten avslutade inte rundan, eller så returnerades funktionen innan rundan var slutförd eftersomwaitForCompletionvar satt tillfalse.
Om en annan drivlina-rörelsefunktion utförs (t.ex.
turnellerdrive) medanturnToHeadingpågår, avbryts den aktuella rörelsen.Eftersom
turnToHeadingär målbaserat (använder enangle), fungerar funktioner somisDoneochisMovingmedturnToHeading.
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation vrider roboten till en specifik rotation.
Rotation är hur mycket roboten har roterat, mätt i grader eller varv. I början av ett projekt sätts rotationsvärdet till 0 grader. Rotation kan också ställas in med funktionen setRotation.
Rotationsvärdena är absoluta. Det betyder att rotationsriktningen beror på robotens aktuella rotation. Att vrida åt höger ökar rotationen och att vrida åt vänster minskar rotationen.
Om roboten till exempel startar vid 0 grader och du roterar 720 grader, kommer den att svänga höger två gånger. Om du sedan roterar 360 grader, kommer den att svänga vänster en gång, eftersom 360 är mindre än 720.
Projektet väntar tills roboten är klar med att snurra innan nästa kodrad körs.
Available Functions1 — Vrider drivlinan till den angivna rotationen med den aktuellt konfigurerade vridhastigheten.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Vrider drivlinan till den angivna rotationen med den angivna hastigheten.
bool turnToRotation( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameter |
Typ |
Beskrivning |
|---|---|---|
|
|
Rotationsvärdet som roboten kommer att rotera till. |
|
|
Rotationsenheten: |
|
|
Hastigheten att rotera med från 0 % till 100 % när |
|
|
Hastighetsenheten: |
|
|
|
Returnerar om roboten nådde målrotationen, som ett booleskt värde.
true— Roboten nådde målrotationen.false— Roboten avslutade inte rundan, eller så returnerades funktionen innan rundan var slutförd eftersomwaitForCompletionvar satt tillfalse.
Om en annan drivlinans rörelsefunktion (t.ex.
turnellerdrive) utförs medanturnToRotationpågår, avbryts den aktuella rörelsen.Eftersom
turnToRotationär målbaserad (använder enangle), fungerar funktioner somisDoneochisMovingmedturnToRotation.
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain kalibrerar tröghetssensorn eller gyrosensorn som konfigurerats med smartdrive.
Kalibrering hjälper sensorn att mäta rörelse korrekt. Håll roboten stilla i cirka 2 sekunder under kalibreringen. Om roboten rör sig under kalibreringen kanske sensorn inte mäter rörelse korrekt.
Projektet väntar tills kalibreringen är klar innan nästa kodrad körs.
calibrateDrivetrain genereras automatiskt av VEXcode när en drivlina konfigureras med en tröghetssensor eller gyrosensor. Den tillhandahålls som en del av projektkällan och är inte en del av VEX EXP C++ API.
void calibrateDrivetrain();
Den här funktionen accepterar inga parametrar.
Return ValuesDen här funktionen returnerar inget värde.
NotesRoboten kalibrerar automatiskt i början av varje projekt.
Håll roboten stilla i cirka 2 sekunder under kalibreringen.
Följande är den automatiskt genererade implementeringen av calibrateDrivetrain skapad av 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#
En kurs är den riktning roboten är vänd i, mätt i grader. setHeading ändrar robotens nuvarande kurs till ett nytt kursvärde.
Om roboten till exempel har vänt sig åt höger och kursen ställs in på 0 grader, blir den högervända positionen den nya 0 grader. Roboten kan då vända sig till andra positioner baserat på den nya kursen.
Available Functionsvoid setHeading(
double value,
rotationUnits units);
Parameter |
Typ |
Beskrivning |
|---|---|---|
|
|
Kursvärdet som ska ställas in för roboten. Detta kan vara från -359 till 359 när |
|
|
Kursenheten: |
Den här funktionen returnerar inget värde.
Examples// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
Rotation är hur mycket roboten har roterat, mätt i grader eller varv. I början av ett projekt är rotationsvärdet inställt på 0 grader. setRotation ändrar robotens aktuella rotation till ett nytt värde.
Om roboten till exempel har gjort två hela varv åt höger blir dess rotationsvärde 720 grader. Om rotationen ställs in på 0 grader återställs den rotationen från 720 till 0 grader. Sedan kan roboten vända sig till rotationer baserat på det nya värdet.
Available Functionsvoid setRotation(
double value,
rotationUnits units);
Parameter |
Typ |
Beskrivning |
|---|---|---|
|
|
Rotationsvärdet som ska ställas in för roboten. |
|
|
Rotationsenheten: |
Den här funktionen returnerar inget värde.
Examples// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
heading#
En kurs är den riktning roboten är vänd i, mätt i grader. heading returnerar robotens aktuella kurs från 0 till 359 grader.
Robotens startriktning är 0 grader.
Available Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Parameter |
Typ |
Beskrivning |
|---|---|---|
|
|
Valfritt. Enheten som kursen ska returneras i: |
Returnerar robotens aktuella kurs som double i den valda enheten.
// 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#
Rotation är hur mycket roboten har roterat, mätt i grader eller varv. I början av ett projekt sätts rotationsvärdet till 0 grader. rotation returnerar robotens aktuella rotation.
Att vrida åt höger ökar rotationen, och att vrida åt vänster minskar rotationen. Om du till exempel gör två hela varv åt höger får du en rotation på 720 grader.
Available Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Parameter |
Typ |
Beskrivning |
|---|---|---|
|
|
Valfritt. Enheten som kursen ska returneras i: |
Returnerar robotens aktuella rotation som double i den valda enheten.
// 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();