išmanusis diskas#

Įvadas#

The smartdrive class controls how a robot drives and turns using motors, wheels, and a sensor. A smartdrive can use an Inertial Sensor or Gyro Sensor to track heading and rotation.

„A smartdrive naudoja jutiklį, kad padėtų robotui tiksliai judėti ir pasisukti. Kiekvieno projekto pradžioje pavaros sistema automatiškai kalibruoja jutiklį. Kalibravimo metu robotą laikykite nejudantį maždaug 2 sekundes, kad jis galėtų tinkamai judėti ir pasisukti.

smartdrive klasė yra pagrįsta drivetrain klase. Ji gali naudoti tas pačias važiavimo ir posūkio funkcijas kaip ir drivetrain, be to, ji prideda jutikliais pagrįstas funkcijas, tokias kaip turnToHeading ir turnToRotation.

Klasės konstruktoriai#

1 — Sukuria išmanųjį diską naudodamas esamus motor_group objektus kairei (&l) ir dešinei (&r) pusėms kartu su inerciniu jutikliu arba giroskopiniu jutikliu.

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 — Sukuria išmanųjį pavaros įrenginį, naudodamas esamus motor objektus kairėje (&l) ir dešinėje (&r) pusėse kartu su inerciniu jutikliu arba giroskopiniu jutikliu.

smartdrive(
    motor           &l,
    motor           &r,
    inertial        &g,
    double          wheelTravel = 320,
    double          trackWidth  = 320,
    double          wheelBase   = 130,
    distanceUnits   unit = mm,
    double          externalGearRatio = 1.0 );

Klasės destruktorius#

Sunaikina smartdrive objektą ir išlaisvina susijusius išteklius.

~smartdrive();

Parametrai#

Jutiklio parametras gali būti inertial arba gyro objektas.

Parametras

Tipas

Aprašymas

&l / &r

motor_group / motor

Nuorodos į esamus motor arba motor_group egzempliorius. Abu parametrai turi būti to paties tipo: du motor_group egzemplioriai arba du motor egzemplioriai. Parametras &l nurodo kairįjį variklį arba variklių grupę, o &r nurodo dešinįjį variklį arba variklių grupę.

&g

gyro&

Nuoroda į esamą gyro arba inertial egzempliorių.

wheelTravel

double

Varančiosios ašies ratų apimtis. Numatytoji reikšmė yra 320.

trackWidth

double

Atstumas tarp kairiojo ir dešiniojo ratų. Numatytoji reikšmė yra 320.

wheelBase

double

Atstumas tarp priekinių ir galinių ratų. Numatytoji reikšmė yra 130.

unit

distanceUnits

wheelTravel, trackWidthir wheelBasematavimo vienetas: mm (milimetrai, numatytoji reikšmė) arba inches.

externalGearRatio

double

Pavarų perdavimo skaičius, naudojamas važiavimo atstumams reguliuoti, jei naudojamos pavaros. Numatytoji reikšmė yra 1.0.

Pavyzdys#

/* 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

Narių funkcijos#

smartdrive klasė apima šias narių funkcijas:

Veiksmai – pasukite robotą naudodami kryptį arba sukimąsi.

Nustatymai – koreguokite krypties ir sukimosi vertes.

  • setHeading — Pakeičia dabartinę roboto kryptį į naują.

  • setRotation — Pakeičia dabartinį roboto sukimąsi į naują.

Vertės – patikrinkite kryptį ir sukimąsi.

  • heading — Grąžina dabartinę roboto kryptį nuo 0 iki 359 laipsnių.

  • rotation — Grąžina dabartinį roboto sukimąsi.

smartdrive taip pat gali naudoti paveldėtas narių funkcijas iš drivetrain, pvz. drive, driveFor, turn, turnFor, stop, isDoneir isMoving.

Prieš iškviečiant bet kokias smartdrive narių funkcijas, reikia sukurti smartdrive egzempliorių, kaip parodyta žemiau:

/* 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#

Kryptis – tai roboto pasukimo kryptis, matuojama laipsniais. turnToHeading Jei norite pakeisti „turnToHeading“, robotas pasukamas tam tikra kryptimi nuo -359 iki 359 laipsnių. Robotas pasuks trumpiausia kryptimi, kad pasiektų tikslinę kryptį.

Roboto pradinė kryptis yra 0 laipsnių.

Projektas lauks, kol robotas baigs suktis, prieš paleidžiant kitą kodo eilutę.

Available Functions

1 — Pavarų agregatą pasuka nurodyta kryptimi, naudodamas šiuo metu konfigūruotą posūkio greitį.

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

2 — Pasuka pavarą nurodyta kryptimi nurodytu greičiu.

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

Parameters

Parametras

Tipas

Aprašymas

angle

double

Kryptis, kuria robotas turėtų pasisukti, laipsniais. Ji gali būti nuo -359 iki 359, kai naudojamas deg arba degrees kampas.

units

rotationUnits

Sukimosi vienetas: deg (laipsniai), rev (apsisukimai) arba raw (neapdoroti vienetai). Vienas apsisukimas lygus 360 laipsnių.

velocity

double

Sukimosi greitis nuo 0% iki 100%, kai naudojama velocityUnits::pct, nuo 0 iki 600 aps./min., kai naudojama rpm, arba nuo 0 iki 3600 laipsnių per sekundę, kai naudojama dpsJei greitis nenurodytas, robotas sukasi dabartiniu posūkio greičiu.

units_v

velocityUnits

Greičio vienetas: velocityUnits::pct (procentai), rpm (apsisukimai per minutę) arba dps (laipsniai per sekundę).

waitForCompletion

bool

true (numatytasis) priverčia projektą palaukti, kol robotas baigs suktis, prieš paleidžiant kitą kodo eilutę. false priverčia kitą kodo eilutę paleisti iš karto.

Return Values

Grąžina, ar robotas pasiekė tikslinę kryptį, kaip loginę reikšmę.

  • true — Robotas pasiekė tikslinę kryptį.

  • false — Robotas nebaigė posūkio arba funkcija grąžino rezultatą prieš jam pasibaigiant, nes waitForCompletion buvo nustatytas į false.

Notes
  • Vykdant kitą transmisijos judėjimo funkciją (pvz., turn arba drive), kol vyksta turnToHeading dabartinis judėjimas bus nutrauktas.

  • Kadangi turnToHeading yra pagrįstas taikiniu (naudoja angle parametrą), tokios funkcijos kaip isDone ir isMoving veikia su turnToHeading.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

turnToRotation#

turnToRotation pasuka robotą į tam tikrą sukimosi kryptį.

Sukimas – tai roboto pasisuko kampas, matuojamas laipsniais arba apsisukimais. Projekto pradžioje sukimosi vertė nustatoma į 0 laipsnių. Sukimą taip pat galima nustatyti naudojant funkciją setRotation.

Sukimosi vertės yra absoliučios. Tai reiškia, kad posūkio kryptis priklauso nuo roboto dabartinio sukimosi. Sukant į dešinę, sukimasis padidėja, o sukant į kairę – sumažėja.

Pavyzdžiui, jei robotas pradeda judėti nuo 0 laipsnių ir jūs pasisukate 720 laipsnių kampu, jis du kartus pasisuks į dešinę. Jei tada pasisuksite 360 ​​laipsnių kampu, jis vieną kartą pasisuks į kairę, nes 360 laipsnių yra mažiau nei 720.

Projektas lauks, kol robotas baigs suktis, prieš paleidžiant kitą kodo eilutę.

Available Functions

1 — Suka pavaros mechanizmą iki nurodytos sukimosi padėties, naudodamas šiuo metu konfigūruotą apsisukimo greitį.

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

2 — Suka pavaros pavarą nurodytu greičiu iki nurodytos apsisukimo padėties.

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

Parameters

Parametras

Tipas

Aprašymas

angle

double

Sukimosi vertė, į kurią robotas pasisuks.

units

rotationUnits

Sukimosi vienetas: deg (laipsniai), rev (apsisukimai) arba raw (neapdoroti vienetai). Vienas apsisukimas lygus 360 laipsnių.

velocity

double

Sukimosi greitis nuo 0% iki 100%, kai naudojama velocityUnits::pct, nuo 0 iki 600 aps./min., kai naudojama rpm, arba nuo 0 iki 3600 laipsnių per sekundę, kai naudojama dpsJei greitis nenurodytas, robotas sukasi dabartiniu posūkio greičiu.

units_v

velocityUnits

Greičio vienetas: velocityUnits::pct (procentai), rpm (apsisukimai per minutę) arba dps (laipsniai per sekundę).

waitForCompletion

bool

true (numatytasis) priverčia projektą palaukti, kol robotas baigs suktis, prieš paleidžiant kitą kodo eilutę. false priverčia kitą kodo eilutę paleisti iš karto.

Return Values

Grąžina, ar robotas pasiekė tikslinį sukimąsi, kaip loginę reikšmę.

  • true — Robotas pasiekė tikslinį sukimąsi.

  • false — Robotas nebaigė posūkio arba funkcija grąžino rezultatą prieš jam pasibaigiant, nes waitForCompletion buvo nustatytas į false.

Notes
  • Vykdant kitą pavaros judėjimo funkciją (pvz., turn arba drive), kol vyksta turnToRotation dabartinis judėjimas bus nutrauktas.

  • Kadangi turnToRotation yra pagrįstas taikiniu (naudoja angle parametrą), tokios funkcijos kaip isDone ir isMoving veikia su turnToRotation.

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

calibrateDrivetrain#

calibrateDrivetrain kalibruoja inercinį jutiklį arba giroskopinį jutiklį, konfigūruotą su „smartdrive“.

Kalibravimas padeda jutikliui teisingai išmatuoti judėjimą. Kalibravimo metu robotą laikykite nejudėdami maždaug 2 sekundes. Jei robotas juda kalibravimo metu, jutiklis gali neteisingai išmatuoti judėjimą.

Projektas lauks, kol bus atliktas kalibravimas, prieš paleidžiant kitą kodo eilutę.

calibrateDrivetrain automatiškai generuojamas „VEXcode“, kai pavarų dėžė konfigūruojama su inerciniu jutikliu arba giroskopiniu jutikliu. Ji pateikiama kaip projekto šaltinio dalis ir nėra „VEX EXP C++ API“ dalis.

Available Functions
void calibrateDrivetrain();

Parameters

Ši funkcija nepriima jokių parametrų.

Return Values

Ši funkcija negrąžina reikšmės.

Notes
  • Robotas kalibruojasi automatiškai kiekvieno projekto pradžioje.

  • Kalibravimo metu robotą laikykite nejudėdami maždaug 2 sekundes.

Function Implementation

Toliau pateikiamas automatiškai sugeneruotas calibrateDrivetrain įgyvendinimas, sukurtas 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#

Kryptis yra roboto pasukimo kryptis, matuojama laipsniais. setHeading pakeičia dabartinę roboto kryptį į naują krypties reikšmę.

Pavyzdžiui, jei robotas pasisuko veidu į dešinę, nustačius 0 laipsnių kryptį, ta nukreipta į dešinę pozicija tampa nauja 0 laipsnių. Tada robotas gali pasisukti į kitas pozicijas, remdamasis ta nauja kryptimi.

Available Functions
void  setHeading(
  double value,
  rotationUnits units);

Parameters

Parametras

Tipas

Aprašymas

value

double

Roboto krypties reikšmė. Ji gali būti nuo -359 iki 359, kai naudojamas deg arba degrees.

units

rotationUnits

Krypties vienetas: deg (laipsniai), rev (apsisukimai) arba raw (neapdoroti vienetai). Vienas apsisukimas lygus 360 laipsnių.

Return Values

Ši funkcija negrąžina reikšmės.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

setRotation#

Rotacija – tai roboto pasisuko kampas, matuojamas laipsniais arba apsisukimais. Projekto pradžioje rotacijos vertė nustatoma į 0 laipsnių. setRotation pakeičia dabartinę roboto rotacijos vertę į naują.

Pavyzdžiui, jei robotas atliko du pilnus posūkius į dešinę, jo sukimosi vertė bus 720 laipsnių. Nustačius sukimąsi į 0 laipsnių, sukimasis bus atstatytas iš 720 į 0 laipsnių. Tada robotas galės atlikti sukimus pagal tą naują vertę.

Available Functions
void  setRotation(
  double value,
  rotationUnits units);

Parameters

Parametras

Tipas

Aprašymas

value

double

Roboto sukimosi vertė, kurią reikia nustatyti.

units

rotationUnits

Sukimosi vienetas: deg (laipsniai), rev (apsisukimai) arba raw (neapdoroti vienetai). Vienas apsisukimas lygus 360 laipsnių.

Return Values

Ši funkcija negrąžina reikšmės.

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

heading#

Kryptis – tai roboto pasukimo kryptis, matuojama laipsniais. heading grąžina dabartinę roboto kryptį nuo 0 iki 359 laipsnių.

Roboto pradinė kryptis yra 0 laipsnių.

Available Functions
double heading( rotationUnits units = rotationUnits::deg );

Parameters

Parametras

Tipas

Aprašymas

units

rotationUnits

Pasirinktinai. Vienetas, kuriuo reikia grąžinti kryptį: degrees, deg (numatytasis), revarba raw. Vienas apsisukimas lygus 360 laipsnių.

Return Values

Grąžina dabartinę roboto kryptį kaip double pasirinktuose vienetuose.

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#

Sukimas rodo, kiek robotas pasisuko, matuojamas laipsniais arba apsisukimais. Projekto pradžioje sukimosi vertė nustatoma į 0 laipsnių. rotation grąžina dabartinį roboto sukimąsi.

Sukant į dešinę, sukimasis padidėja, o sukant į kairę – sumažėja. Pavyzdžiui, padarius du pilnus posūkius į dešinę, sukimasis bus 720 laipsnių.

Available Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

Parametras

Tipas

Aprašymas

units

rotationUnits

Pasirinktinai. Vienetas, kuriuo reikia grąžinti kryptį: degrees, deg (numatytasis), revarba raw. Vienas apsisukimas lygus 360 laipsnių.

Return Values

Grąžina dabartinį roboto sukimąsi kaip double pasirinktame vienete.

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