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 ansluten gyrosensor eller hjärnans inbyggda tröghetssensor.
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.
Den här sidan använder myDrivetrain som exempelnamn för smartdrive. Ersätt det med ditt eget konfigurerade namn efter behov.
Klasskonstruktörer#
1 — Skapar en smartdrive med hjälp av befintliga
motor_groupobjekt för vänster och höger sida, tillsammans med en gyrosensor eller tröghetssensor.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 — Skapar en smartdrive med hjälp av befintliga
motorobjekt för vänster och höger sida, tillsammans med en gyrosensor eller tröghetssensor.smartdrive( motor &l, motor &r, gyro &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 gyro eller inertial objekt.
Parameter |
Typ |
Beskrivning |
|---|---|---|
|
|
Vänster och höger motor eller motorgrupp. Båda parametrarna måste använda samma typ: antingen två |
|
|
Gyrosensorn eller Tröghetssensorn som används av smartdrive. |
|
|
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 objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the Inertial Sensor object.
inertial myInertial = inertial(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myInertial, // Inertial Sensor
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
Medlemsfunktioner#
Klassen smartdrive innehåller 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 sensorn som konfigurerats med smartdrive.
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 ett smartdrive objekt skapas.
/* 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 Inertial Sensor object.
inertial myInertial = inertial(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myInertial, // Inertial Sensor
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 roboten till den angivna kursen med hjälp av den aktuella svänghastigheten.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Svänger roboten mot 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 |
|
|
Kursenheten: |
|
|
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.
Att köra en annan drivlinerörelsefunktion medan
turnToHeadingär igång kommer att avbryta den aktuella rörelsen.turnToHeadinganvänder en målrubrik, såisDoneochisMovingkan användas med den.
// 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 roboten till den angivna rotationen med hjälp av den aktuella rotationshastigheten.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Vrider roboten 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.
Att köra en annan drivlinerörelsefunktion medan
turnToRotationär igång kommer att avbryta den aktuella rörelsen.turnToRotationanvänder en målrotation, såisDoneochisMovingkan användas med den.
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain kalibrerar den anslutna gyrosensorn eller hjärnans inbyggda tröghetssensor 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.
Obs: calibrateDrivetrain genereras automatiskt av VEXcode när en drivlina konfigureras med en gyrosensor eller tröghetssensor. Den tillhandahålls som en del av projektkällan och är inte en del av VEX IQ 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 när en smartdrive konfigureras i VEXcode.
Håll roboten stilla i cirka 2 sekunder under kalibreringen.
Följande är ett exempel på 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 rotationen 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();