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_groupobjektus 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
motorobjektus 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 |
|---|---|---|
|
|
Kreisais un labais motors vai motoru grupas. Abiem parametriem jāizmanto viens un tas pats tips: vai nu divi |
|
|
Viedā piedziņas izmantotais žiroskopiskais sensors. |
|
|
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 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 Functions1 — Pagriež robotu norādītajā virzienā, izmantojot pašreizējo pagrieziena ātrumu.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — 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 );
Parametrs |
Tips |
Apraksts |
|---|---|---|
|
|
Virziens, kurā robotam jābūt pagrieztam, grādos. Tas var būt no -359 līdz 359, ja tiek izmantoti |
|
|
Virziena mērvienī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.
Palaižot citu piedziņas kustības funkciju, kamēr darbojas
turnToHeadingpašreizējā kustība tiks pārtraukta.turnToHeadingizmanto mērķa virsrakstu, tāpēc kopā ar to var izmantotisDoneunisMoving.
// 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ž robotu norādītajā rotācijā, izmantojot pašreizējo pagrieziena ātrumu.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — 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 );
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.
Palaižot citu piedziņas kustības funkciju, kamēr darbojas
turnToRotationtiks pārtraukta pašreizējā kustība.turnToRotationizmanto mērķa rotāciju, tāpēc kopā ar to var izmantotisDoneunisMoving.
// 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.
void calibrateDrivetrain();
Šī funkcija nepieņem nekādus parametrus.
Return ValuesŠī funkcija neatgriež vērtību.
NotesRobots 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.
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 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. |
|
|
Rotācijas vienī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();