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_group objekt 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 motor objekt 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

&l / &r

motor_group / motor

Referenser till befintliga motor eller motor_group instanser. Båda parametrarna måste vara av samma typ: antingen två motor_group instanser eller två motor instanser. Parametern &l refererar till vänster motor eller motorgrupp, och &r refererar till höger motor eller motorgrupp.

&g

gyro&

En referens till en befintlig gyro eller inertial instans.

wheelTravel

double

Drivlinans hjulomkrets. Standardvärdet är 320.

trackWidth

double

Avståndet mellan vänster och höger hjul. Standardvärdet är 320.

wheelBase

double

Avståndet mellan fram- och bakhjulen. Standardvärdet är 130.

unit

distanceUnits

Enheten för wheelTravel, trackWidthoch wheelBase: mm (millimeter, standard) eller inches.

externalGearRatio

double

Utväxlingsförhållandet som används för att justera körsträckor om växlar används. Standardvärdet är 1.0.

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.

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 Functions

1 — 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 );

2 — Vrider drivlinan till den angivna riktningen med den angivna hastigheten.

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

Parameters

Parameter

Typ

Beskrivning

angle

double

Riktningen roboten ska vara vänd i, i grader. Detta kan vara från -359 till 359 när deg eller degrees.

units

rotationUnits

Rotationsenheten: deg (grader), rev (varv) eller raw (råa enheter). Ett varv är lika med 360 grader.

velocity

double

Hastigheten att rotera med från 0 % till 100 % när velocityUnits::pctfrån 0 till 600 rpm när rpmeller från 0 till 3600 grader per sekund när dpsOm ingen hastighet anges roterar roboten med den aktuella rotationshastigheten.

units_v

velocityUnits

Hastighetsenheten: velocityUnits::pct (procent), rpm (varv per minut) eller dps (grader per sekund).

waitForCompletion

bool

true (standard) gör att projektet väntar tills roboten är klar med att snurra innan nästa kodrad körs. false gör att nästa kodrad körs direkt.

Return Values

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 eftersom waitForCompletion var satt till false.

Notes
  • Om en annan drivlina-rörelsefunktion utförs (t.ex. turn eller drive) medan turnToHeading pågår, avbryts den aktuella rörelsen.

  • Eftersom turnToHeading är målbaserat (använder en angle ), fungerar funktioner som isDone och isMoving med turnToHeading.

Examples
// 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 Functions

1 — Vrider drivlinan till den angivna rotationen med den aktuellt konfigurerade vridhastigheten.

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

2 — Vrider drivlinan till den angivna rotationen med den angivna hastigheten.

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

Parameters

Parameter

Typ

Beskrivning

angle

double

Rotationsvärdet som roboten kommer att rotera till.

units

rotationUnits

Rotationsenheten: deg (grader), rev (varv) eller raw (råa enheter). Ett varv är lika med 360 grader.

velocity

double

Hastigheten att rotera med från 0 % till 100 % när velocityUnits::pctfrån 0 till 600 rpm när rpmeller från 0 till 3600 grader per sekund när dpsOm ingen hastighet anges roterar roboten med den aktuella rotationshastigheten.

units_v

velocityUnits

Hastighetsenheten: velocityUnits::pct (procent), rpm (varv per minut) eller dps (grader per sekund).

waitForCompletion

bool

true (standard) gör att projektet väntar tills roboten är klar med att snurra innan nästa kodrad körs. false gör att nästa kodrad körs direkt.

Return Values

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 eftersom waitForCompletion var satt till false.

Notes
  • Om en annan drivlinans rörelsefunktion (t.ex. turn eller drive) utförs medan turnToRotation pågår, avbryts den aktuella rörelsen.

  • Eftersom turnToRotation är målbaserad (använder en angle ), fungerar funktioner som isDone och isMoving med turnToRotation.

Examples
// 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.

Available Functions
void calibrateDrivetrain();

Parameters

Den här funktionen accepterar inga parametrar.

Return Values

Den här funktionen returnerar inget värde.

Notes
  • Roboten kalibrerar automatiskt i början av varje projekt.

  • Håll roboten stilla i cirka 2 sekunder under kalibreringen.

Function Implementation

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 Functions
void  setHeading(
  double value,
  rotationUnits units);

Parameters

Parameter

Typ

Beskrivning

value

double

Kursvärdet som ska ställas in för roboten. Detta kan vara från -359 till 359 när deg eller degrees används.

units

rotationUnits

Kursenheten: deg (grader), rev (varv) eller raw (råa enheter). Ett varv är lika med 360 grader.

Return Values

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 Functions
void  setRotation(
  double value,
  rotationUnits units);

Parameters

Parameter

Typ

Beskrivning

value

double

Rotationsvärdet som ska ställas in för roboten.

units

rotationUnits

Rotationsenheten: deg (grader), rev (varv) eller raw (råa enheter). Ett varv är lika med 360 grader.

Return Values

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 Functions
double heading( rotationUnits units = rotationUnits::deg );

Parameters

Parameter

Typ

Beskrivning

units

rotationUnits

Valfritt. Enheten som kursen ska returneras i: degrees, deg (standard), reveller rawEtt varv är lika med 360 grader.

Return Values

Returnerar robotens aktuella kurs som double i den valda enheten.

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#

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 Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

Parameter

Typ

Beskrivning

units

rotationUnits

Valfritt. Enheten som kursen ska returneras i: degrees, deg (standard), reveller rawEtt varv är lika med 360 grader.

Return Values

Returnerar robotens aktuella rotation som double i den valda enheten.

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();