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_groupobjektus 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
motorobjektus 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 |
|---|---|---|
|
|
Nuorodos į esamus |
|
|
Nuoroda į esamą |
|
|
Varančiosios ašies ratų apimtis. Numatytoji reikšmė yra |
|
|
Atstumas tarp kairiojo ir dešiniojo ratų. Numatytoji reikšmė yra |
|
|
Atstumas tarp priekinių ir galinių ratų. Numatytoji reikšmė yra |
|
|
|
|
|
Pavarų perdavimo skaičius, naudojamas važiavimo atstumams reguliuoti, jei naudojamos pavaros. Numatytoji reikšmė yra |
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.
turnToHeading– pasuka robotą tam tikra kryptimi nuo -359 iki 359 laipsnių. Robotas pasisuks trumpiausia kryptimi, kad pasiektų tikslinę kryptį.turnToRotation— Įjungia roboto sukimąsi konkrečia kryptimi.calibrateDrivetrain– Kalibruoja pavaros sukonfigūruotą Inercijos jutiklį arba Giroskopinį jutiklį.
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 Functions1 — Pavarų agregatą pasuka nurodyta kryptimi, naudodamas šiuo metu konfigūruotą posūkio greitį.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Pasuka pavarą nurodyta kryptimi nurodytu greičiu.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parametras |
Tipas |
Aprašymas |
|---|---|---|
|
|
Kryptis, kuria robotas turėtų pasisukti, laipsniais. Ji gali būti nuo -359 iki 359, kai naudojamas |
|
|
Sukimosi vienetas: |
|
|
Sukimosi greitis nuo 0% iki 100%, kai naudojama |
|
|
Greičio vienetas: |
|
|
|
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, neswaitForCompletionbuvo nustatytas įfalse.
Vykdant kitą transmisijos judėjimo funkciją (pvz.,
turnarbadrive), kol vykstaturnToHeadingdabartinis judėjimas bus nutrauktas.Kadangi
turnToHeadingyra pagrįstas taikiniu (naudojaangleparametrą), tokios funkcijos kaipisDoneirisMovingveikia suturnToHeading.
// 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 Functions1 — Suka pavaros mechanizmą iki nurodytos sukimosi padėties, naudodamas šiuo metu konfigūruotą apsisukimo greitį.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — 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 );
Parametras |
Tipas |
Aprašymas |
|---|---|---|
|
|
Sukimosi vertė, į kurią robotas pasisuks. |
|
|
Sukimosi vienetas: |
|
|
Sukimosi greitis nuo 0% iki 100%, kai naudojama |
|
|
Greičio vienetas: |
|
|
|
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, neswaitForCompletionbuvo nustatytas įfalse.
Vykdant kitą pavaros judėjimo funkciją (pvz.,
turnarbadrive), kol vykstaturnToRotationdabartinis judėjimas bus nutrauktas.Kadangi
turnToRotationyra pagrįstas taikiniu (naudojaangleparametrą), tokios funkcijos kaipisDoneirisMovingveikia suturnToRotation.
// 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.
void calibrateDrivetrain();
Ši funkcija nepriima jokių parametrų.
Return ValuesŠi funkcija negrąžina reikšmės.
NotesRobotas kalibruojasi automatiškai kiekvieno projekto pradžioje.
Kalibravimo metu robotą laikykite nejudėdami maždaug 2 sekundes.
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 Functionsvoid setHeading(
double value,
rotationUnits units);
Parametras |
Tipas |
Aprašymas |
|---|---|---|
|
|
Roboto krypties reikšmė. Ji gali būti nuo -359 iki 359, kai naudojamas |
|
|
Krypties vienetas: |
Š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 Functionsvoid setRotation(
double value,
rotationUnits units);
Parametras |
Tipas |
Aprašymas |
|---|---|---|
|
|
Roboto sukimosi vertė, kurią reikia nustatyti. |
|
|
Sukimosi vienetas: |
Š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 Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Parametras |
Tipas |
Aprašymas |
|---|---|---|
|
|
Pasirinktinai. Vienetas, kuriuo reikia grąžinti kryptį: |
Grąžina dabartinę roboto kryptį kaip double pasirinktuose vienetuose.
// 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 Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Parametras |
Tipas |
Aprašymas |
|---|---|---|
|
|
Pasirinktinai. Vienetas, kuriuo reikia grąžinti kryptį: |
Grąžina dabartinį roboto sukimąsi kaip double pasirinktame vienete.
// 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();