älykäs ajo#

Johdanto#

smartdrive -luokka ohjaa robotin ajamista ja kääntymistä moottoreiden, pyörien ja anturin avulla. smartdrive voi käyttää kytkettyä gyroskooppianturia tai aivojen sisäänrakennettua inertia-anturia.

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.

Tällä sivulla käytetään esimerkkinä smartdrive-nimeä myDrivetrain Korvaa se tarvittaessa omalla määrittämälläsi nimellä.

Luokanrakentajat#

1 — Luo älykkään ajomoottorin käyttämällä olemassa olevia motor_group -objekteja vasemmalle ja oikealle puolelle sekä gyroskooppia tai inertia-anturia.

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 — Luo älykkään käyttölaitteen käyttämällä olemassa olevia motor -objekteja vasemmalle ja oikealle puolelle sekä gyroskooppia tai inertia-anturia.

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

Parametri

Tyyppi

Kuvaus

&l / &r

motor_group / motor

Vasen ja oikea moottori tai moottoriryhmä. Molempien parametrien on käytettävä samaa tyyppiä: joko kaksi motor_group -objektia tai kaksi motor -objektia.

&g

gyro / inertial

Älykkään ajovoimalähteen käyttämä Gyroanturi tai inertia-anturi.

wheelTravel

double

Voimansiirron pyörien ympärysmitta. Oletusarvo on 320.

trackWidth

double

Vasemman ja oikean pyörän välinen etäisyys. Oletusarvo on 320.

wheelBase

double

Etu- ja takapyörien välinen etäisyys. Oletusarvo on 130.

unit

distanceUnits

Yksikkö wheelTravel, trackWidthja wheelBase: mm (oletus) tai inches.

externalGearRatio

double

Välityssuhde, jota käytetään ajomatkojen säätämiseen, jos vaihteita käytetään. Oletusarvo on 1.0.

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

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 SmartDriven kanssa konfiguroidun anturin.

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

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

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 Functions

1 — Kääntää robotin määritettyyn suuntaan käyttäen nykyistä kääntymisnopeutta.

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

2 — Kääntää robotin määritettyyn suuntaan määritetyllä nopeudella.

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

Parameters

Parametri

Tyyppi

Kuvaus

angle

double

Robotin suunta asteina. Tämä voi olla -359 - 359, kun käytetään deg tai degrees.

units

rotationUnits

Suuntayksikkö: deg (astetta), rev (kierrosta) tai raw (raakayksikköä). Yksi kierros vastaa 360 astetta.

velocity

double

Kääntymisnopeus välillä 0–100 %, kun käytössä on velocityUnits::pct, välillä 0–120 rpm, kun käytössä on rpm, tai välillä 0–720 astetta sekunnissa, kun käytössä on dpsJos nopeutta ei anneta, robotti kääntyy nykyisellä kääntymisnopeudella.

units_v

velocityUnits

Nopeuden yksikkö: velocityUnits::pct (prosentti), rpm (kierrosta minuutissa) tai dps (astetta sekunnissa).

waitForCompletion

bool

true (oletus) saa projektin odottamaan, kunnes robotti on kääntynyt, ennen seuraavan koodirivin suorittamista. false saa seuraavan koodirivin suoritettavaksi heti.

Return Values

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ä, koska waitForCompletion oli asetettu arvoon false.

Notes
  • Toisen voimansiirron liikefunktion suorittaminen funktion turnToHeading ollessa käynnissä keskeyttää nykyisen liikkeen.

  • turnToHeading käyttää kohdeotsikkoa, joten isDone ja isMoving voidaan käyttää sen kanssa.

Examples
// 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 Functions

1 — Kääntää robotin määritettyyn pyörimissuuntaan käyttäen nykyistä kääntönopeutta.

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

2 — Kääntää robotin määritettyyn pyörimissuuntaan määritetyllä nopeudella.

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

Parameters

Parametri

Tyyppi

Kuvaus

angle

double

Robotin pyörimissuunta.

units

rotationUnits

Kiertoyksikkö: deg (astetta), rev (kierrosta) tai raw (raakayksikköä). Yksi kierros vastaa 360 astetta.

velocity

double

Kääntymisnopeus välillä 0–100 %, kun käytössä on velocityUnits::pct, välillä 0–120 rpm, kun käytössä on rpm, tai välillä 0–720 astetta sekunnissa, kun käytössä on dpsJos nopeutta ei anneta, robotti kääntyy nykyisellä kääntymisnopeudella.

units_v

velocityUnits

Nopeuden yksikkö: velocityUnits::pct (prosentti), rpm (kierrosta minuutissa) tai dps (astetta sekunnissa).

waitForCompletion

bool

true (oletus) saa projektin odottamaan, kunnes robotti on kääntynyt, ennen seuraavan koodirivin suorittamista. false saa seuraavan koodirivin suoritettavaksi heti.

Return Values

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ä, koska waitForCompletion oli asetettu arvoon false.

Notes
  • Toisen voimansiirron liikefunktion suorittaminen funktion turnToRotation ollessa käynnissä keskeyttää nykyisen liikkeen.

  • turnToRotation käyttää kohdekiertoa, joten isDone ja isMoving voidaan käyttää sen kanssa.

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

calibrateDrivetrain#

calibrateDrivetrain kalibroi liitetyn gyroskooppianturin tai aivojen sisäänrakennetun inertia-anturin, joka on konfiguroitu älyajolaitteella.

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.

Huomautus: VEXcode luo automaattisesti calibrateDrivetrain -arvon, kun voimansiirto konfiguroidaan gyroskoopilla tai inertia-anturilla. Se toimitetaan osana projektin lähdekoodia eikä se ole osa VEX IQ C++ API:a.

Available Functions
void calibrateDrivetrain();

Parameters

Tämä funktio ei hyväksy parametreja.

Return Values

Tämä funktio ei palauta arvoa.

Notes
  • Robotti kalibroituu automaattisesti jokaisen projektin alussa, kun älyajuri on konfiguroitu VEXcodessa.

  • Pidä robotti paikallaan noin 2 sekuntia kalibroinnin aikana.

Function Implementation

Seuraava on esimerkki VEXcoden luomasta automaattisesti luodusta calibrateDrivetrain -toteutuksesta:

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 Functions
void setHeading(
  double value,
  rotationUnits units);

Parameters

Parametri

Tyyppi

Kuvaus

value

double

Robotille asetettava suunta-arvo. Tämä voi olla -359 - 359, kun käytetään deg tai degrees.

units

rotationUnits

Suuntayksikkö: deg (astetta), rev (kierrosta) tai raw (raakayksikköä). Yksi kierros vastaa 360 astetta.

Return Values

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 Functions
void setRotation(
  double value,
  rotationUnits units);

Parameters

Parametri

Tyyppi

Kuvaus

value

double

Robotille asetettava pyörimisarvo.

units

rotationUnits

Kiertoyksikkö: deg (astetta), rev (kierrosta) tai raw (raakayksikköä). Yksi kierros vastaa 360 astetta.

Return Values

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 Functions
double heading( rotationUnits units = rotationUnits::deg );

Parameters

Parametri

Tyyppi

Kuvaus

units

rotationUnits

Valinnainen. Palautettava yksikkö: degrees, deg (oletus), revtai rawYksi kierros vastaa 360 astetta.

Return Values

Palauttaa robotin nykyisen suunnan muodossa double valitussa yksikössä.

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#

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 Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

Parametri

Tyyppi

Kuvaus

units

rotationUnits

Valinnainen. Yksikkö, joka palauttaa pyörimisen: degrees, deg (oletus), revtai rawYksi kierros vastaa 360 astetta.

Return Values

Palauttaa robotin nykyisen pyörityksen muodossa double valitussa yksikössä.

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