chytrý pohon#
Zavedení#
Třída smartdrive řídí, jak se robot pohání a otáčí, pomocí motorů, kol a senzoru. Třída smartdrive může ke sledování směru a rotace použít inerciální senzor, gyroskopický senzor nebo GPS senzor.
Systém smartdrive využívá senzor k přesnému pohybu a otáčení robota. Na začátku každého projektu pohon automaticky kalibruje senzor. Během kalibrace držte robota přibližně 2 sekundy v klidu, aby se mohl správně pohybovat a otáčet.
Třída smartdrive je založena na třídě drivetrain. Může používat stejné funkce řízení a otáčení jako třída drivetrain a také přidává funkce založené na senzorech, jako například turnToHeading a turnToRotation.
Konstruktory tříd#
1 — Vytvoří inteligentní pohon s použitím existujících objektů
motor_grouppro levou (&l) a pravou (&r) stranu, spolu s inerciálním senzorem, gyroskopickým senzorem nebo GPS senzorem.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 — Vytvoří inteligentní pohon s využitím existujících objektů
motorpro levou (&l) a pravou (&r) stranu, spolu s inerciálním senzorem, gyroskopickým senzorem nebo GPS senzorem.smartdrive( motor &l, motor &r, inertial &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
Destruktor tříd#
Zničí objekt smartdrive a uvolní přidružené prostředky.
~smartdrive();
Parametry#
Parametrem senzoru může být inertial, gyronebo gps objekt.
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Odkazy na existující instance |
|
|
Odkaz na existující instanci |
|
|
Obvod kol hnacího ústrojí. Výchozí hodnota je |
|
|
Vzdálenost mezi levým a pravým kolem. Výchozí hodnota je |
|
|
Vzdálenost mezi předními a zadními koly. Výchozí hodnota je |
|
|
Jednotka pro |
|
|
Převodový poměr použitý k úpravě ujeté vzdálenosti, pokud jsou použity převody. Výchozí hodnota je |
Příklad#
/* 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
Členské funkce#
Třída smartdrive obsahuje následující členské funkce:
Akce – Otáčení robota pomocí směru nebo rotace.
turnToHeading— Otočí robota do určitého směru od -359 do 359 stupňů. Robot se otočí nejkratším směrem k dosažení cílového směru.turnToRotation— Otočí robota do určité rotace.calibrateDrivetrain— Kalibruje nakonfigurovaný Inerciální senzor, Gyro senzor nebo GPS senzor hnacího ústrojí.
Nastavení – Upravte hodnoty směru a rotace.
setHeading— Změní aktuální směr robota na nový směr.setRotation— Změní aktuální rotaci robota na novou rotaci.
Hodnoty – Zkontrolujte směr a rotaci.
A smartdrive can also use the inherited member functions from drivetrain, such as drive, driveFor, turn, turnFor, stop, isDone, and isMoving.
Před voláním jakékoli členské funkce smartdrive musí být vytvořena instance smartdrive , jak je znázorněno níže:
/* 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#
Směr je směr, kterým je robot otočen, měřený ve stupních. turnToHeading otočí robota do určitého směru od -359 do 359 stupňů. Robot se otočí nejkratším směrem, aby dosáhl cílového směru.
Výchozí směr robota je 0 stupňů.
Projekt počká, dokud se robot nedotočí, než se spustí další řádek kódu.
Available Functions1 — Otočí hnací ústrojí do zadaného směru s využitím aktuálně nakonfigurované rychlosti otáčení.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Otáčí hnací ústrojí do zadaného směru zadanou rychlostí.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Směr, kterým by měl robot směřovat, ve stupních. Může se pohybovat od -359 do 359 při použití |
|
|
Jednotka rotace: |
|
|
Rychlost otáčení od 0 % do 100 % při použití |
|
|
Jednotka rychlosti: |
|
|
|
Vrací, zda robot dosáhl cílového směru, jako booleovskou hodnotu.
true— Robot dosáhl cílového směru.false— Robot nedokončil kolo nebo funkce vrátila hodnotu před dokončením kola, protožewaitForCompletionbyla nastavena nafalse.
Provedení jiné funkce pohybu hnacího ústrojí (například
turnnebodrive) během probíhajícíhoturnToHeadingpřeruší aktuální pohyb.Protože
turnToHeadingje založeno na cíli (používá parametrangle), funkce jakoisDoneaisMovingfungují sturnToHeading.
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation otočí robota do určité rotace.
Rotace udává, o kolik se robot otočil, měřeno ve stupních nebo otáčkách. Na začátku projektu je hodnota rotace nastavena na 0 stupňů. Rotaci lze také nastavit pomocí funkce setRotation.
Hodnoty rotace jsou absolutní. To znamená, že směr otáčení závisí na aktuální rotaci robota. Otočení doprava rotaci zvyšuje a otáčení doleva snižuje.
Například pokud robot začne na 0 stupních a otočíte se o 720 stupňů, otočí se dvakrát doprava. Pokud se poté otočíte o 360 stupňů, otočí se jednou doleva, protože 360 je menší než 720.
Projekt počká, dokud se robot nedotočí, než se spustí další řádek kódu.
Available Functions1 — Otáčí hnací ústrojí na zadanou rotaci s využitím aktuálně nakonfigurované rychlosti otáčení.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Otáčí hnacím ústrojím na zadanou otáčku zadanou rychlostí.
bool turnToRotation( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Hodnota rotace, na kterou se robot otočí. |
|
|
Jednotka rotace: |
|
|
Rychlost otáčení od 0 % do 100 % při použití |
|
|
Jednotka rychlosti: |
|
|
|
Vrací, zda robot dosáhl cílové rotace, jako booleovskou hodnotu.
true— Robot dosáhl cílové rotace.false— Robot nedokončil kolo nebo funkce vrátila hodnotu před dokončením kola, protožewaitForCompletionbyla nastavena nafalse.
Provedení jiné funkce pohybu hnacího ústrojí (například
turnnebodrive) během probíhající funkceturnToRotationpřeruší aktuální pohyb.Protože
turnToRotationje založeno na cíli (používá parametrangle), funkce jakoisDoneaisMovingfungují sturnToRotation.
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain kalibruje inerciální senzor, gyroskopický senzor nebo GPS senzor nakonfigurovaný s inteligentním pohonem.
Kalibrace pomáhá senzoru správně měřit pohyb. Během kalibrace držte robota v klidu asi 2 sekundy. Pokud se robot během kalibrace pohybuje, senzor nemusí správně měřit pohyb.
Projekt počká na dokončení kalibrace, než se spustí další řádek kódu.
Hodnota calibrateDrivetrain je automaticky generována programem VEXcode, když je hnací ústrojí nakonfigurováno s inerciálním senzorem, GPS senzorem nebo gyroskopickým senzorem. Je poskytována jako součást zdrojového kódu projektu a není součástí rozhraní VEX V5 C++ API.
void calibrateDrivetrain();
Tato funkce nepřijímá žádné parametry.
Return ValuesTato funkce nevrací hodnotu.
NotesRobot se automaticky kalibruje na začátku každého projektu.
Během kalibrace držte robota v klidu asi 2 sekundy.
Následuje automaticky generovaná implementace calibrateDrivetrain vytvořená programem VEXcode:
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#
Směr je směr, kterým je robot otočen, měřený ve stupních. setHeading změní aktuální směr robota na novou hodnotu směru.
Například pokud se robot otočil čelem doprava, nastavením směru na 0 stupňů se tato poloha směřující doprava stane novými 0 stupni. Robot se pak může na základě tohoto nového směru otáčet do jiných pozic.
Available Functionsvoid setHeading(
double value,
rotationUnits units);
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Hodnota směru, kterou se má nastavit pro robota. Může být od -359 do 359 při použití |
|
|
Jednotka směru: |
Tato funkce nevrací hodnotu.
Examples// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
Rotace udává, o kolik se robot otočil, měřeno ve stupních nebo otáčkách. Na začátku projektu je hodnota rotace nastavena na 0 stupňů. setRotation změní aktuální rotaci robota na novou hodnotu.
Například pokud robot provedl dvě plné otáčky doprava, jeho hodnota rotace bude 720 stupňů. Nastavením rotace na 0 stupňů se tato hodnota resetuje ze 720 na 0 stupňů. Robot se pak může otáčet na základě této nové hodnoty.
Available Functionsvoid setRotation(
double value,
rotationUnits units);
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Hodnota rotace, kterou chcete nastavit pro robota. |
|
|
Jednotka směru: |
Tato funkce nevrací hodnotu.
Examples// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
heading#
Směr je směr, kterým je robot otočen, měřený ve stupních. heading vrací aktuální směr robota od 0 do 359 stupňů.
Výchozí směr robota je 0 stupňů.
Available Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Volitelné. Jednotka, ve které se má vrátit směr: |
Vrátí aktuální směr robota jako double ve vybrané jednotce.
// 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#
Rotace udává, o kolik se robot otočil, měřeno ve stupních nebo otáčkách. Na začátku projektu je hodnota rotace nastavena na 0 stupňů. rotation vrací aktuální rotaci robota.
Otočení doprava zvětšuje rotaci a otočení doleva ji snižuje. Například provedení dvou celých otoček doprava vrátí rotaci o 720 stupňů.
Available Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Volitelné. Jednotka, ve které se má vrátit rotace: |
Vrátí aktuální rotaci robota jako double ve vybrané jednotce.
// 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();