älykäs ajo#
Johdanto#
smartdrive -luokka ohjaa robotin ajamista ja kääntymistä moottoreiden, pyörien ja anturin avulla. smartdrive voi käyttää inertia-anturia tai gyroskooppianturia seuratakseen suuntaa ja pyörimistä.
A smartdrive käyttää anturia auttaakseen robottia liikkumaan ja kääntymään tarkasti. Jokaisen projektin alussa voimansiirto kalibroi anturin automaattisesti. Pidä robottia paikallaan noin 2 sekuntia kalibroinnin aikana, jotta robotti voi liikkua ja kääntyä oikein.
smartdrive -luokka perustuu drivetrain-luokkaan. Se voi käyttää samoja ajo- ja kääntymisfunktioita kuin drivetrain, ja se lisää myös anturipohjaisia funktioita, kuten turnToHeading ja turnToRotation.
Luokanrakentajat#
1 — Luo älykkään ajomoottorin käyttämällä olemassa olevia
motor_group-objektia vasemmalle (&l) ja oikealle (&r) puolelle sekä inertia-anturia tai gyroskooppia.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 — Luo älykkään käyttölaitteen käyttämällä olemassa olevia
motorobjekteja vasemmalle (&l) ja oikealle (&r) puolelle sekä inertia-anturia tai gyroskooppia.smartdrive( motor &l, motor &r, inertial &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
Luokan tuhoaja#
Tuhoaa smartdrive -objektin ja vapauttaa siihen liittyvät resurssit.
~smartdrive();
Parametrit#
Anturiparametri voi olla inertiaalinen inertial tai gyro.
Parametri |
Tyyppi |
Kuvaus |
|---|---|---|
|
|
Viittaukset olemassa oleviin |
|
|
Viittaus olemassa olevaan |
|
|
Voimansiirron pyörien ympärysmitta. Oletusarvo on |
|
|
Vasemman ja oikean pyörän välinen etäisyys. Oletusarvo on |
|
|
Etu- ja takapyörien välinen etäisyys. Oletusarvo on |
|
|
Yksikkö arvoille |
|
|
Välityssuhde, jota käytetään ajomatkojen säätämiseen, jos vaihteita käytetään. Oletusarvo on |
Esimerkki#
/* 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
Jäsenten toiminnot#
smartdrive -luokka sisältää seuraavat jäsenfunktiot:
Toiminnot — Käännä robottia suuntaamalla tai pyörittämällä.
turnToHeading— Kääntää robotin tiettyyn suuntaan -359 - 359 astetta. Robotti kääntyy lyhyimpään suuntaan saavuttaakseen kohdesuunnan.turnToRotation— Kääntää robotin tiettyyn kiertosuuntaan.calibrateDrivetrain— Kalibroi voimansiirron konfiguroidun inertia-anturin tai gyroskooppianturin.
Asetukset — Säädä suunta- ja kiertoarvoja.
setHeading— Muuttaa robotin nykyisen suunnan uudeksi suunnaksi.setRotation— Muuttaa robotin nykyisen pyörityksen uudeksi pyöritykseksi.
Arvot — Tarkista suunta ja kierto.
heading— Palauttaa robotin nykyisen suunnan 0–359 astetta.rotation— Palauttaa robotin nykyisen rotaatioasteen.
smartdrive voi käyttää myös drivetrain-metodista perittyjä jäsenfunktioita, kuten drive, driveFor, turn, turnFor, stop, isDoneja isMoving.
Ennen minkään smartdrive -jäsenfunktion kutsumista on luotava smartdrive -instanssi alla olevan mukaisesti:
/* 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#
Suunta on robotin suunta asteina mitattuna. turnToHeading kääntää robotin tiettyyn suuntaan -359 ja 359 asteen välillä. Robotti kääntyy lyhyimpään suuntaan saavuttaakseen kohdesuunnan.
Robotin lähtösuunta on 0 astetta.
Projekti odottaa, kunnes robotti on kääntynyt, ennen kuin seuraava koodirivi suoritetaan.
Available Functions1 — Kääntää voimansiirron määritettyyn suuntaan käyttämällä nykyistä konfiguroitua kääntymisnopeutta.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Kääntää voimansiirron määritettyyn suuntaan määritetyllä nopeudella.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parametri |
Tyyppi |
Kuvaus |
|---|---|---|
|
|
Robotin suunta asteina. Tämä voi olla -359 - 359, kun käytetään |
|
|
Kiertoyksikkö: |
|
|
Kääntymisnopeus välillä 0–100 %, kun käytössä on |
|
|
Nopeuden yksikkö: |
|
|
|
Palauttaa totuusarvona, saavuttiko robotti kohdesuunnan.
true— Robotti saavutti kohdesuunnan.false— Robotti ei saanut käännöstä valmiiksi, tai funktio palautti ennen käännöksen päättymistä, koskawaitForCompletionoli asetettu arvoonfalse.
Toisen voimansiirron liiketoiminnon (kuten
turntaidrive) suorittaminen toiminnonturnToHeadingollessa käynnissä keskeyttää nykyisen liikkeen.Koska
turnToHeadingon kohteeseen perustuva (käyttääangle-parametria), funktiot, kutenisDonejaisMoving, toimivatturnToHeadingn kanssa.
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation kääntää robotin tiettyyn rotaatioon.
Rotaatio ilmaisee, kuinka paljon robotti on kääntynyt, mitattuna asteina tai kierroksina. Projektin alussa rotaatioarvoksi asetetaan 0 astetta. Rotaatio voidaan asettaa myös käyttämällä setRotation-funktiota.
Rotaatioarvot ovat absoluuttisia. Tämä tarkoittaa, että käännöksen suunta riippuu robotin nykyisestä pyörimisestä. Oikealle kääntäminen lisää pyörimistä ja vasemmalle kääntäminen vähentää niitä.
Jos esimerkiksi robotti aloittaa 0 asteen kulmasta ja käännyt 720 asteen kierrokseen, se kääntyy kahdesti oikealle. Jos sitten käännyt 360 astetta, se kääntyy kerran vasemmalle, koska 360 on pienempi kuin 720.
Projekti odottaa, kunnes robotti on kääntynyt, ennen kuin seuraava koodirivi suoritetaan.
Available Functions1 — Kääntää voimansiirron määritettyyn pyörimissuuntaan käyttämällä parhaillaan konfiguroitua kääntymisnopeutta.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Kääntää voimansiirron määritettyyn pyörimissuuntaan määritetyllä nopeudella.
bool turnToRotation( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parametri |
Tyyppi |
Kuvaus |
|---|---|---|
|
|
Robotin pyörimissuunta. |
|
|
Kiertoyksikkö: |
|
|
Kääntymisnopeus välillä 0–100 %, kun käytössä on |
|
|
Nopeuden yksikkö: |
|
|
|
Palauttaa totuusarvona tiedon siitä, saavuttiko robotti kohdekierron.
true— Robotti saavutti kohdekierron.false— Robotti ei saanut käännöstä valmiiksi, tai funktio palautti ennen käännöksen päättymistä, koskawaitForCompletionoli asetettu arvoonfalse.
Toisen voimansiirron liikefunktion (kuten
turntaidrive) suorittaminen funktionturnToRotationollessa käynnissä keskeyttää nykyisen liikkeen.Koska
turnToRotationon kohteeseen perustuva (käyttääangle-parametria), funktiot, kutenisDonejaisMoving, toimivatturnToRotationn kanssa.
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain kalibroi SmartDriven kanssa konfiguroidun inertia-anturin tai gyroskooppianturin.
Kalibrointi auttaa anturia mittaamaan liikettä oikein. Pidä robotti paikallaan noin 2 sekuntia kalibroinnin aikana. Jos robotti liikkuu kalibroinnin aikana, anturi ei välttämättä mittaa liikettä oikein.
Projekti odottaa kalibroinnin valmistumista ennen seuraavan koodirivin suorittamista.
calibrateDrivetrain luodaan VEXcoden toimesta automaattisesti, kun voimansiirto konfiguroidaan inertia-anturilla tai gyroskooppianturilla. Se toimitetaan osana projektin lähdekoodia eikä se ole osa VEX EXP C++ API:a.
void calibrateDrivetrain();
Tämä funktio ei hyväksy parametreja.
Return ValuesTämä funktio ei palauta arvoa.
NotesRobotti kalibroituu automaattisesti jokaisen projektin alussa.
Pidä robotti paikallaan noin 2 sekuntia kalibroinnin aikana.
Seuraava on VEXcoden luoma automaattisesti luotu toteutus calibrateDrivetrain lle:
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#
Suunta on robotin suunta asteina mitattuna. setHeading muuttaa robotin nykyisen suunnan uuteen suunta-arvoon.
Jos esimerkiksi robotti on kääntynyt oikealle ja suunnan asettaminen 0 asteeseen tekee oikealle osoittavasta asennosta uuden 0 asteen. Tämän jälkeen robotti voi kääntyä muihin asentoihin tämän uuden suunnan perusteella.
Available Functionsvoid setHeading(
double value,
rotationUnits units);
Parametri |
Tyyppi |
Kuvaus |
|---|---|---|
|
|
Robotille asetettava suunta-arvo. Tämä voi olla -359 - 359, kun käytetään |
|
|
Suuntayksikkö: |
Tämä funktio ei palauta arvoa.
Examples// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
Rotaatio ilmaisee, kuinka paljon robotti on kääntynyt, mitattuna asteina tai kierroksina. Projektin alussa rotaatioarvoksi asetetaan 0 astetta. setRotation muuttaa robotin nykyisen rotaation uuteen arvoon.
Jos robotti on esimerkiksi tehnyt kaksi täyttä käännöstä oikealle, sen kiertoarvo on 720 astetta. Kierron asettaminen 0 asteeseen palauttaa kiertoarvon 720 asteesta 0 asteeseen. Tämän jälkeen robotti voi tehdä kiertoja tämän uuden arvon perusteella.
Available Functionsvoid setRotation(
double value,
rotationUnits units);
Parametri |
Tyyppi |
Kuvaus |
|---|---|---|
|
|
Robotille asetettava pyörimisarvo. |
|
|
Kiertoyksikkö: |
Tämä funktio ei palauta arvoa.
Examples// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
heading#
Suunta on robotin suunta asteina mitattuna. heading palauttaa robotin nykyisen suunnan 0–359 astetta.
Robotin lähtösuunta on 0 astetta.
Available Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Parametri |
Tyyppi |
Kuvaus |
|---|---|---|
|
|
Valinnainen. Palautettava yksikkö: |
Palauttaa robotin nykyisen suunnan muodossa double valitussa yksikössä.
// 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#
Rotaatio ilmaisee, kuinka paljon robotti on kääntynyt, mitattuna asteina tai kierroksina. Projektin alussa rotaatioarvoksi asetetaan 0 astetta. rotation palauttaa robotin nykyisen rotaation.
Kääntyminen oikealle lisää kiertoliikettä ja kääntäminen vasemmalle vähentää sitä. Esimerkiksi kahden täyden käännöksen tekeminen oikealle palauttaa 720 asteen kiertoliikkeen.
Available Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Parametri |
Tyyppi |
Kuvaus |
|---|---|---|
|
|
Valinnainen. Palautettava yksikkö: |
Palauttaa robotin nykyisen pyörityksen muodossa double valitussa yksikössä.
// 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();