išmanusis diskas#

Įvadas#

smartdrive klasė valdo roboto judėjimą ir posūkius naudodama variklius, ratus ir jutiklį. „ smartdrive gali naudoti prijungtą giroskopinį jutiklį arba smegenyse integruotą inercinį jutiklį.

„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.

Šiame puslapyje kaip „smartdrive“ pavadinimo pavyzdys naudojamas myDrivetrain Jei reikia, pakeiskite jį savo sukonfigūruotu pavadinimu.

Klasės konstruktoriai#

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

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 — Sukuria išmanųjį pavaros įrenginį, naudodamas esamus motor objektus kairei ir dešinei pusėms kartu su giroskopiniu arba inerciniu jutikliu.

smartdrive(
    motor           &l,
    motor           &r,
    gyro            &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 gyro arba inertial objektas.

Parametras

Tipas

Aprašymas

&l / &r

motor_group / motor

Kairysis ir dešinysis varikliai arba variklių grupės. Abu parametrai turi būti to paties tipo: du motor_group objektai arba du motor “ objektai.

&g

gyro / inertial

Išmaniojo disko naudojamas Giroskopinis jutiklis arba Inercinis jutiklis.

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

Narių funkcijos#

smartdrive klasė apima šias narių funkcijas:

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

  • turnToHeading – pasuka robotą tam tikra kryptimi nuo -359 iki 359 laipsnių. Robotas pasuks trumpiausia kryptimi, kad pasiektų tikslinę kryptį.

  • turnToRotation — Įjungia roboto sukimąsi konkrečia kryptimi.

  • calibrateDrivetrain – Kalibruoja jutiklį, konfigūruotą su „smartdrive“.

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 nario funkcijas, reikia sukurti smartdrive objektą.

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

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 — Robotas pasukamas nurodyta kryptimi, naudojant dabartinį posūkio greitį.

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

2 — Robotas pasuka nurodytą kryptį 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.

units

rotationUnits

Krypties 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 120 aps./min., kai naudojama rpm, arba nuo 0 iki 720 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
  • Paleidus kitą pavaros judėjimo funkciją, kai vykdoma turnToHeading dabartinis judėjimas bus nutrauktas.

  • turnToHeading naudoja tikslinę antraštę, todėl su ja galima naudoti isDone ir isMoving.

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 — Robotas pasukamas nurodytu greičiu, naudojant dabartinį apsisukimo greitį.

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

2 — Suka robotą nurodytu greičiu iki nurodytos rotacijos.

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 120 aps./min., kai naudojama rpm, arba nuo 0 iki 720 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
  • Paleidus kitą transmisijos judėjimo funkciją, kai veikia turnToRotation dabartinis judėjimas bus nutrauktas.

  • turnToRotation naudoja tikslinį sukimąsi, todėl su juo galima naudoti isDone ir isMoving.

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

calibrateDrivetrain#

calibrateDrivetrain kalibruoja prijungtą giroskopinį jutiklį arba smegenyse integruotą inercinį 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ę.

Pastaba: calibrateDrivetrain automatiškai generuojamas VEXcode, kai pavarų sistema konfigūruojama su giroskopiniu jutikliu arba inerciniu jutikliu. Ji pateikiama kaip projekto šaltinio dalis ir nėra VEX IQ C++ API dalis.

Available Functions
void calibrateDrivetrain();

Parameters

Ši funkcija nepriima jokių parametrų.

Return Values

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

Notes
  • Robotas automatiškai kalibruojasi kiekvieno projekto pradžioje, kai „VEXcode“ sukonfigūruojamas išmanusis diskas.

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

Function Implementation

Toliau pateiktas VEXcode sukurto automatiškai sugeneruoto calibrateDrivetrain įgyvendinimo pavyzdys:

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 judėjimo kryptis, matuojama laipsniais. heading grąžina dabartinę roboto judėjimo 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 grąžinama sukimosi reikšmė: 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();