viedā piedziņa#

Ievads#

smartdrive klase kontrolē robota kustību un griešanos, izmantojot motorus, riteņus un žiroskopisko sensoru. smartdrive klase izmanto pievienotu žiroskopisko sensoru, lai izsekotu virzienu un rotāciju.

smartdrive izmanto žiroskopisko sensoru, lai palīdzētu robotam precīzi kustēties un pagriezties. Katra projekta sākumā piedziņas sistēma automātiski kalibrē žiroskopisko sensoru. Kalibrēšanas laikā robotam apmēram 2 sekundes jāturas nekustīgi, lai tas varētu pareizi kustēties un pagriezties.

smartdrive klase ir balstīta uz drivetrain klasi. smartdrive var izmantot tās pašas piedziņas un pagriešanās funkcijas kā drivetrain, un tā pievieno arī uz sensoriem balstītas funkcijas, piemēram, turnToHeading un turnToRotation.

Šajā lapā kā viedā drive nosaukuma piemērs tiek izmantots myDrivetrain Ja nepieciešams, nomainiet to ar savu konfigurēto nosaukumu.

Klases konstruktori#

1 — Izveido viedpiedziņu, izmantojot esošos motor_group objektus kreisajai un labajai pusei, kā arī žiroskopisko sensoru.

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 — Izveido viedpiedziņu, izmantojot esošos motor objektus kreisajai un labajai pusei, kā arī žiroskopisko sensoru.

smartdrive(
    motor           &l,
    motor           &r,
    gyro            &g,
    double          wheelTravel = 320,
    double          trackWidth  = 320,
    double          wheelBase   = 130,
    distanceUnits   unit = mm,
    double          externalGearRatio = 1.0 );

Klases iznīcinātājs#

Iznīcina objektu smartdrive un atbrīvo saistītos resursus.

~smartdrive();

Parametri#

Parametrs

Tips

Apraksts

&l / &r

motor_group / motor

Kreisais un labais motors vai motoru grupas. Abiem parametriem jāizmanto viens un tas pats tips: vai nu divi motor_group objekti, vai divi motor objekti.

&g

gyro

Viedā piedziņas izmantotais žiroskopiskais sensors.

wheelTravel

double

Piedziņas mehānisma riteņu apkārtmērs. Noklusējuma vērtība ir 320.

trackWidth

double

Attālums starp kreiso un labo riteni. Noklusējuma vērtība ir 320.

wheelBase

double

Attālums starp priekšējiem un aizmugurējiem riteņiem. Noklusējuma vērtība ir 130.

unit

distanceUnits

Mērvienība wheelTravel, trackWidthun wheelBase: mm (pēc noklusējuma) vai inches.

externalGearRatio

double

Pārnesumskaitlis, ko izmanto, lai pielāgotu piedziņas attālumus, ja tiek izmantoti pārnesumi. Noklusējuma vērtība ir 1.0.

Piemērs#

/* 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 Gyro Sensor object.
gyro myGyro = gyro(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myGyro,     // Gyro Sensor
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

Dalībnieku funkcijas#

Klasē smartdrive ir iekļautas šādas dalībfunkcijas:

Darbības — Pagrieziet robotu, izmantojot virzienu vai rotāciju.

  • turnToHeading — Pagriež robotu noteiktā virzienā no -359 līdz 359 grādiem. Robots pagriezīsies īsākajā virzienā, lai sasniegtu mērķa virzienu.

  • turnToRotation — Pagriež robotu noteiktā rotācijā.

  • calibrateDrivetrain — Kalibrē žiroskopisko sensoru, kas konfigurēts ar viedpiedziņu.

Iestatījumi — pielāgojiet virziena un rotācijas vērtības.

  • setHeading — Maina robota pašreizējo virzienu uz jaunu virzienu.

  • setRotation — Maina robota pašreizējo rotāciju uz jaunu rotāciju.

Vērtības — pārbaudiet virzienu un rotāciju.

  • heading — Atgriež robota pašreizējo virzienu no 0 līdz 359 grādiem.

  • rotation — Atgriež robota pašreizējo rotāciju.

smartdrive var izmantot arī no drivetrain mantotās dalībfunkcijas, piemēram, drive, driveFor, turn, turnFor, stop, isDoneun isMoving.

Pirms jebkuru smartdrive dalībfunkciju izsaukšanas ir jāizveido smartdrive objekts.

/* 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 Gyro Sensor object.
gyro myGyro = gyro(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myGyro,     // Gyro Sensor
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

turnToHeading#

Virziens ir virziens, kurā robots ir pagriezies, mērot grādos. turnToHeading pagriež robotu noteiktā virzienā no -359 līdz 359 grādiem. Robots pagriezīsies īsākajā virzienā, lai sasniegtu mērķa virzienu.

Robota sākuma virziens ir 0 grādi.

Projekts gaidīs, līdz robots būs pabeidzis griešanos, pirms tiks palaista nākamā koda rinda.

Available Functions

1 — Pagriež robotu norādītajā virzienā, izmantojot pašreizējo pagrieziena ātrumu.

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

2 — Pagriež robotu norādītajā virzienā ar norādīto ātrumu.

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

Parameters

Parametrs

Tips

Apraksts

angle

double

Virziens, kurā robotam jābūt pagrieztam, grādos. Tas var būt no -359 līdz 359, ja tiek izmantoti deg vai degrees.

units

rotationUnits

Virziena mērvienība: deg (grādi), rev (apgriezieni) vai raw (neapstrādātas mērvienības). Viens apgrieziens ir vienāds ar 360 grādiem.

velocity

double

Griešanās ātrums no 0% līdz 100%, izmantojot velocityUnits::pct, no 0 līdz 120 apgr./min, izmantojot rpm, vai no 0 līdz 720 grādiem sekundē, izmantojot dpsJa ātrums nav norādīts, robots griežas ar pašreizējo pagrieziena ātrumu.

units_v

velocityUnits

Ātruma mērvienība: velocityUnits::pct (procenti), rpm (apgriezieni minūtē) vai dps (grādi sekundē).

waitForCompletion

bool

true (noklusējums) liek projektam gaidīt, līdz robots ir pabeidzis pagriešanos, pirms tiek palaista nākamā koda rinda. false liek nekavējoties palaist nākamo koda rindu.

Return Values

Atgriež, vai robots sasniedza mērķa virzienu, kā Būla vērtību.

  • true — Robots ir sasniedzis mērķa virzienu.

  • false — Robots nepabeidza pagriezienu vai funkcija atgrieza vērtību pirms pagrieziena pabeigšanas, jo waitForCompletion bija iestatīts uz false.

Notes
  • Palaižot citu piedziņas kustības funkciju, kamēr darbojas turnToHeading pašreizējā kustība tiks pārtraukta.

  • turnToHeading izmanto mērķa virsrakstu, tāpēc kopā ar to var izmantot isDone un isMoving.

Examples
// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

turnToRotation#

turnToRotation pagriež robotu noteiktā rotācijā.

Rotācija ir robota pagrieziena lielums, ko mēra grādos vai apgriezienos. Projekta sākumā rotācijas vērtība tiek iestatīta uz 0 grādiem. Rotāciju var iestatīt arī, izmantojot funkciju setRotation.

Rotācijas vērtības ir absolūtas. Tas nozīmē, ka pagrieziena virziens ir atkarīgs no robota pašreizējās rotācijas. Pagriežoties pa labi, rotācija palielinās, bet pagriežoties pa kreisi, tā samazinās.

Piemēram, ja robots sāk darboties no 0 grādiem un jūs pagriežaties par 720 grādiem, tas divreiz pagriezīsies pa labi. Ja pēc tam pagriezīsities par 360 grādiem, tas vienreiz pagriezīsies pa kreisi, jo 360 grādi ir mazāki par 720.

Projekts gaidīs, līdz robots būs pabeidzis griešanos, pirms tiks palaista nākamā koda rinda.

Available Functions

1 — Pagriež robotu norādītajā rotācijā, izmantojot pašreizējo pagrieziena ātrumu.

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

2 — Pagriež robotu norādītajā rotācijā ar norādīto ātrumu.

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

Parameters

Parametrs

Tips

Apraksts

angle

double

Rotācijas vērtība, pie kuras robots pagriezīsies.

units

rotationUnits

Rotācijas vienība: deg (grādi), rev (apgriezieni) vai raw (neapstrādātas vienības). Viens apgrieziens ir vienāds ar 360 grādiem.

velocity

double

Griešanās ātrums no 0% līdz 100%, izmantojot velocityUnits::pct, no 0 līdz 120 apgr./min, izmantojot rpm, vai no 0 līdz 720 grādiem sekundē, izmantojot dpsJa ātrums nav norādīts, robots griežas ar pašreizējo pagrieziena ātrumu.

units_v

velocityUnits

Ātruma mērvienība: velocityUnits::pct (procenti), rpm (apgriezieni minūtē) vai dps (grādi sekundē).

waitForCompletion

bool

true (noklusējums) liek projektam gaidīt, līdz robots ir pabeidzis pagriešanos, pirms tiek palaista nākamā koda rinda. false liek nekavējoties palaist nākamo koda rindu.

Return Values

Atgriež, vai robots ir sasniedzis mērķa rotāciju, kā Būla vērtību.

  • true — Robots ir sasniedzis mērķa rotāciju.

  • false — Robots nepabeidza pagriezienu vai funkcija atgrieza vērtību pirms pagrieziena pabeigšanas, jo waitForCompletion bija iestatīts uz false.

Notes
  • Palaižot citu piedziņas kustības funkciju, kamēr darbojas turnToRotation tiks pārtraukta pašreizējā kustība.

  • turnToRotation izmanto mērķa rotāciju, tāpēc kopā ar to var izmantot isDone un isMoving.

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

calibrateDrivetrain#

calibrateDrivetrain kalibrē žiroskopisko sensoru, kas konfigurēts ar viedpiedziņu.

Kalibrēšana palīdz žiroskopiskajam sensoram pareizi izmērīt kustību. Kalibrēšanas laikā robotam jāturas nekustīgi apmēram 2 sekundes. Ja robots kalibrēšanas laikā kustas, žiroskopiskais sensors var nepareizi izmērīt kustību.

Projekts gaidīs, līdz tiks pabeigta kalibrēšana, pirms tiks palaista nākamā koda rinda.

calibrateDrivetrain tiek ģenerēts automātiski ar VEXcode, kad piedziņas ķēde tiek konfigurēta ar žiroskopisko sensoru. Tā tiek nodrošināta kā daļa no projekta avota un nav daļa no VEX IQ C++ API.

Available Functions
void calibrateDrivetrain();

Parameters

Šī funkcija nepieņem nekādus parametrus.

Return Values

Šī funkcija neatgriež vērtību.

Notes
  • Robots kalibrējas automātiski katra projekta sākumā, ja VEXcode ir konfigurēts vieddisks.

  • Kalibrēšanas laikā robotam jāturas nekustīgi apmēram 2 sekundes.

Function Implementation

Tālāk ir sniegts VEXcode izveidotas automātiski ģenerētas calibrateDrivetrain ieviešanas piemērs:

bool vexcode_initial_drivetrain_calibration_completed = false;
void calibrateDrivetrain() {
  wait(200, msec);
  Brain.Screen.print("Calibrating");
  Brain.Screen.newLine();
  Brain.Screen.print("Gyro");
  DrivetrainGyro.calibrate();
  while (DrivetrainGyro.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#

Virziens ir virziens, kurā robots ir pagriezies, mērot grādos. setHeading maina robota pašreizējo virzienu uz jaunu virziena vērtību.

Piemēram, ja robots ir pagriezies pa labi, iestatot virzienu uz 0 grādiem, šī pozīcija, kas vērsta pa labi, kļūst par jauno 0 grādu pozīciju. Pēc tam robots var pagriezties uz citām pozīcijām, pamatojoties uz šo jauno virzienu.

Available Functions
void setHeading(
  double value,
  rotationUnits units);

Parameters

Parametrs

Tips

Apraksts

value

double

Robota virziena vērtība, kas jāiestata. Tā var būt no -359 līdz 359, ja tiek izmantots deg vai degrees leņķis.

units

rotationUnits

Virziena mērvienība: deg (grādi), rev (apgriezieni) vai raw (neapstrādātas mērvienības). Viens apgrieziens ir vienāds ar 360 grādiem.

Return Values

Šī funkcija neatgriež vērtību.

Examples
// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

setRotation#

Rotācija ir robota pagrieziena lielums, mērot grādos vai apgriezienos. Projekta sākumā rotācijas vērtība ir iestatīta uz 0 grādiem. setRotation maina robota pašreizējo rotāciju uz jaunu vērtību.

Piemēram, ja robots ir veicis divus pilnus pagriezienus pa labi, tā rotācijas vērtība būs 720 grādi. Iestatot rotāciju uz 0 grādiem, šī rotācija tiks atiestatīta no 720 uz 0 grādiem. Pēc tam robots var veikt rotācijas, pamatojoties uz šo jauno vērtību.

Available Functions
void setRotation(
  double value,
  rotationUnits units);

Parameters

Parametrs

Tips

Apraksts

value

double

Robotam iestatāmā rotācijas vērtība.

units

rotationUnits

Rotācijas vienība: deg (grādi), rev (apgriezieni) vai raw (neapstrādātas vienības). Viens apgrieziens ir vienāds ar 360 grādiem.

Return Values

Šī funkcija neatgriež vērtību.

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

heading#

Virziens ir virziens, kurā robots ir pagriezies, mērot grādos. heading atgriež robota pašreizējo virzienu no 0 līdz 359 grādiem.

Robota sākuma virziens ir 0 grādi.

Available Functions
double heading( rotationUnits units = rotationUnits::deg );

Parameters

Parametrs

Tips

Apraksts

units

rotationUnits

Neobligāti. Mērvienība, kurā jāatgriež virziens: degrees, deg (pēc noklusējuma), revvai raw. Viens apgrieziens ir vienāds ar 360 grādiem.

Return Values

Atgriež robota pašreizējo virzienu kā double atlasītajā vienībā.

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#

Rotācija ir robota pagrieziena lielums, mērot grādos vai apgriezienos. Projekta sākumā rotācijas vērtība ir iestatīta uz 0 grādiem. rotation atgriež robota pašreizējo rotāciju.

Pagriežoties pa labi, rotācija palielinās, bet pagriežoties pa kreisi, tā samazinās. Piemēram, veicot divus pilnus pagriezienus pa labi, rotācija būs 720 grādi.

Available Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

Parametrs

Tips

Apraksts

units

rotationUnits

Neobligāti. Mērvienība, kas atgriež rotāciju: degrees, deg (pēc noklusējuma), revvai raw. Viens apgrieziens ir vienāds ar 360 grādiem.

Return Values

Atgriež robota pašreizējo rotāciju kā double atlasītajā vienībā.

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