smartdrive#

Introduktion#

Klassen smartdrive styr hur en robot kör och vrider sig med hjälp av motorer, hjul och en gyrosensor. En smartdrive använder en ansluten gyrosensor för att spåra kurs och rotation.

En smartdrive använder gyrosensorn för att hjälpa roboten att röra sig och vrida sig exakt. I början av varje projekt kalibrerar drivlinan gyrosensorn 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. En smartdrive 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_group objekt för vänster och höger sida, tillsammans med en gyrosensor.

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 motor objekt för vänster och höger sida, tillsammans med en gyrosensor.

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#

Parameter

Typ

Beskrivning

&l / &r

motor_group / motor

Vänster och höger motor eller motorgrupp. Båda parametrarna måste använda samma typ: antingen två motor_group objekt eller två motor -objekt.

&g

gyro

Gyrosensorn som används av smartdrive.

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

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 gyrosensorn 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 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#

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 roboten till den angivna kursen med hjälp av den aktuella svänghastigheten.

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

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

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

Kursenheten: 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 120 rpm när rpmeller från 0 till 720 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
  • Att köra en annan drivlinerörelsefunktion medan turnToHeading är igång kommer att avbryta den aktuella rörelsen.

  • turnToHeading använder en målrubrik, så isDone och isMoving kan användas med den.

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 roboten till den angivna rotationen med hjälp av den aktuella rotationshastigheten.

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

2 — Vrider roboten 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 120 rpm när rpmeller från 0 till 720 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
  • Att köra en annan drivlinerörelsefunktion medan turnToRotation är igång kommer att avbryta den aktuella rörelsen.

  • turnToRotation använder en målrotation, så isDone och isMoving kan användas med den.

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

calibrateDrivetrain#

calibrateDrivetrain kalibrerar gyrosensorn som konfigurerats med smartdrive.

Kalibrering hjälper gyrosensorn att mäta rörelse korrekt. Håll roboten stilla i cirka 2 sekunder under kalibreringen. Om roboten rör sig under kalibreringen kanske gyrosensorn 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 gyrosensor. Den tillhandahålls som en del av projektkällan och är inte en del av VEX IQ 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 när en smartdrive konfigureras i VEXcode.

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

Function Implementation

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("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#

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