viedā piedziņa#
Ievads#
smartdrive klase kontrolē robota kustību un griešanos, izmantojot motorus, riteņus un sensoru. smartdrive klase var izmantot inerciālo sensoru, žiroskopisko sensoru vai GPS sensoru, lai izsekotu virzienu un rotāciju.
smartdrive izmanto sensoru, lai palīdzētu robotam precīzi kustēties un pagriezties. Katra projekta sākumā piedziņas sistēma automātiski kalibrē sensoru. Kalibrēšanas laikā robotam jāturas nekustīgi apmēram 2 sekundes, lai tas varētu pareizi kustēties un pagriezties.
Klase smartdrive ir balstīta uz drivetrain klasi. Tā var izmantot tās pašas piedziņas un pagriešanās funkcijas kā drivetrain, un tai ir pievienotas arī uz sensoriem balstītas funkcijas, piemēram, turnToHeading un turnToRotation.
Klases konstruktori#
1 — Izveido viedpiedziņu, izmantojot esošos
motor_groupobjektus kreisajai (&l) un labajai (&r) pusei, kā arī inerciālo sensoru, žiroskopisko sensoru vai GPS sensoru.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 — Izveido viedpiedziņu, izmantojot esošos
motorobjektus kreisajai (&l) un labajai (&r) pusei, kā arī inerciālo sensoru, žiroskopisko sensoru vai GPS sensoru.smartdrive( motor &l, motor &r, inertial &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#
Sensora parametrs var būt inerciāls inertial, gyrovai gps objekts.
Parametrs |
Tips |
Apraksts |
|---|---|---|
|
|
Atsauces uz esošajiem |
|
|
Atsauce uz esošu |
|
|
Piedziņas mehānisma riteņu apkārtmērs. Noklusējuma vērtība ir |
|
|
Attālums starp kreiso un labo riteni. Noklusējuma vērtība ir |
|
|
Attālums starp priekšējiem un aizmugurējiem riteņiem. Noklusējuma vērtība ir |
|
|
Mērvienība |
|
|
Pārnesumskaitlis, ko izmanto, lai pielāgotu piedziņas attālumus, ja tiek izmantoti pārnesumi. Noklusējuma vērtība ir |
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 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
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ē piedziņas konfigurēto inerciālo sensoru, žiroskopisko sensoru vai GPS sensoru.
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 instance, kā parādīts tālāk:
/* 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#
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 Functions1 — Pagriež piedziņas sistēmu norādītajā virzienā, izmantojot pašlaik konfigurēto pagrieziena ātrumu.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Pagriež piedziņas sistēmu norādītajā virzienā ar norādīto ātrumu.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parametrs |
Tips |
Apraksts |
|---|---|---|
|
|
Virziens, kurā robotam jābūt pagrieztam, grādos. Tas var būt no -359 līdz 359, ja tiek izmantoti |
|
|
Rotācijas vienība: |
|
|
Griešanās ātrums no 0% līdz 100%, izmantojot |
|
|
Ātruma mērvienība: |
|
|
|
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, jowaitForCompletionbija iestatīts uzfalse.
Izpildot citu piedziņas kustības funkciju (piemēram,
turnvaidrive), kamēr notiekturnToHeadingpašreizējā kustība tiks pārtraukta.Tā kā
turnToHeadingir uz mērķi balstīta (izmantoangleparametru), tādas funkcijas kāisDoneunisMovingdarbojas arturnToHeading.
// 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 Functions1 — Pagriež piedziņas sistēmu norādītajā rotācijā, izmantojot pašlaik konfigurēto pagrieziena ātrumu.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Pagriež piedziņas sistēmu līdz norādītajam griešanās ātrumam.
bool turnToRotation( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parametrs |
Tips |
Apraksts |
|---|---|---|
|
|
Rotācijas vērtība, pie kuras robots pagriezīsies. |
|
|
Rotācijas vienība: |
|
|
Griešanās ātrums no 0% līdz 100%, izmantojot |
|
|
Ātruma mērvienība: |
|
|
|
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, jowaitForCompletionbija iestatīts uzfalse.
Izpildot citu piedziņas kustības funkciju (piemēram,
turnvaidrive), kamēr notiekturnToRotationpašreizējā kustība tiks pārtraukta.Tā kā
turnToRotationir uz mērķi balstīta (izmantoangleparametru), tādas funkcijas kāisDoneunisMovingdarbojas arturnToRotation.
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain kalibrē inerciālo sensoru, žiroskopisko sensoru vai GPS sensoru, kas konfigurēts ar viedpiedziņu.
Kalibrēšana palīdz 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, 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, izmantojot VEXcode, kad piedziņas ķēde tiek konfigurēta ar inerciālo sensoru, GPS sensoru vai žiroskopisko sensoru. Tā tiek nodrošināta kā daļa no projekta avota un nav daļa no VEX V5 C++ API.
void calibrateDrivetrain();
Šī funkcija nepieņem nekādus parametrus.
Return ValuesŠī funkcija neatgriež vērtību.
NotesRobots kalibrējas automātiski katra projekta sākumā.
Kalibrēšanas laikā robotam jāturas nekustīgi apmēram 2 sekundes.
Tālāk ir parādīta VEXcode izveidotā calibrateDrivetrain automātiski ģenerētā ieviešana:
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#
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 Functionsvoid setHeading(
double value,
rotationUnits units);
Parametrs |
Tips |
Apraksts |
|---|---|---|
|
|
Robota virziena vērtība, kas jāiestata. Tā var būt no -359 līdz 359, ja tiek izmantots |
|
|
Virziena mērvienība: |
Šī 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 Functionsvoid setRotation(
double value,
rotationUnits units);
Parametrs |
Tips |
Apraksts |
|---|---|---|
|
|
Robotam iestatāmā rotācijas vērtība. |
|
|
Virziena mērvienība: |
Šī 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 Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Parametrs |
Tips |
Apraksts |
|---|---|---|
|
|
Neobligāti. Mērvienība, kurā jāatgriež virziens: |
Atgriež robota pašreizējo virzienu kā double atlasītajā vienībā.
// 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 Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Parametrs |
Tips |
Apraksts |
|---|---|---|
|
|
Neobligāti. Mērvienība, kas atgriež rotāciju: |
Atgriež robota pašreizējo rotāciju kā double atlasītajā vienībā.
// 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();