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_groupobjektus 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
motorobjektus 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 |
|---|---|---|
|
|
Kairysis ir dešinysis varikliai arba variklių grupės. Abu parametrai turi būti to paties tipo: du |
|
|
Išmaniojo disko naudojamas Giroskopinis jutiklis arba Inercinis jutiklis. |
|
|
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 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 Functions1 — Robotas pasukamas nurodyta kryptimi, naudojant dabartinį posūkio greitį.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Robotas pasuka nurodytą kryptį 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 |
|
|
Krypties 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.
Paleidus kitą pavaros judėjimo funkciją, kai vykdoma
turnToHeadingdabartinis judėjimas bus nutrauktas.turnToHeadingnaudoja tikslinę antraštę, todėl su ja galima naudotiisDoneirisMoving.
// 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 — Robotas pasukamas nurodytu greičiu, naudojant dabartinį apsisukimo greitį.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Suka robotą nurodytu greičiu iki nurodytos rotacijos.
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.
Paleidus kitą transmisijos judėjimo funkciją, kai veikia
turnToRotationdabartinis judėjimas bus nutrauktas.turnToRotationnaudoja tikslinį sukimąsi, todėl su juo galima naudotiisDoneirisMoving.
// 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.
void calibrateDrivetrain();
Ši funkcija nepriima jokių parametrų.
Return ValuesŠi funkcija negrąžina reikšmės.
NotesRobotas automatiškai kalibruojasi kiekvieno projekto pradžioje, kai „VEXcode“ sukonfigūruojamas išmanusis diskas.
Kalibravimo metu robotą laikykite nejudėdami maždaug 2 sekundes.
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 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 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 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 grąžinama sukimosi reikšmė: |
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();