chytrý pohon#

Zavedení#

Třída smartdrive řídí, jak se robot pohání a otáčí, pomocí motorů, kol a senzoru. Třída smartdrive může pro sledování směru a rotace použít inerciální senzor nebo gyroskopický 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_group pro levou (&l) a pravou (&r) stranu, spolu s inerciálním senzorem nebo gyroskopickým 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ů motor pro levou (&l) a pravou (&r) stranu, spolu s inerciálním senzorem nebo gyroskopickým 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 inerciální objekt inertial nebo gyro.

Parametr

Typ

Popis

&l / &r

motor_group / motor

Odkazy na existující instance motor nebo motor_group Oba parametry musí být stejného typu: buď dvě instance motor_group , nebo dvě instance motor Parametr &l odkazuje na levý motor nebo skupinu motorů a parametr &r odkazuje na pravý motor nebo skupinu motorů.

&g

gyro&

Odkaz na existující instanci inerciálního gyroskopu gyro nebo inertial.

wheelTravel

double

Obvod kol hnacího ústrojí. Výchozí hodnota je 320.

trackWidth

double

Vzdálenost mezi levým a pravým kolem. Výchozí hodnota je 320.

wheelBase

double

Vzdálenost mezi předními a zadními koly. Výchozí hodnota je 130.

unit

distanceUnits

Jednotka pro wheelTravel, trackWidtha wheelBase: mm (milimetry, výchozí) nebo inches.

externalGearRatio

double

Převodový poměr použitý k úpravě ujeté vzdálenosti, pokud jsou použity převody. Výchozí hodnota je 1.0.

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.

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.

  • heading — Vrátí aktuální směr robota od 0 do 359 stupňů.

  • rotation — Vrátí aktuální rotaci robota.

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 Functions

1 — 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 );

2 — Otáčí hnací ústrojí do zadaného směru zadanou rychlostí.

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

Parameters

Parametr

Typ

Popis

angle

double

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í deg nebo degrees.

units

rotationUnits

Jednotka rotace: deg (stupně), rev (otáčky) nebo raw (jednotky). Jedna otáčka se rovná 360 stupňům.

velocity

double

Rychlost otáčení od 0 % do 100 % při použití velocityUnits::pct, od 0 do 600 ot/min při použití rpm, nebo od 0 do 3600 stupňů za sekundu při použití dps. Pokud není zadána žádná rychlost, robot se otáčí aktuální rychlostí otáčení.

units_v

velocityUnits

Jednotka rychlosti: velocityUnits::pct (procenta), rpm (otáčky za minutu) nebo dps (stupně za sekundu).

waitForCompletion

bool

true (výchozí) způsobí, že projekt počká, dokud se robot nedotočí, než se spustí další řádek kódu. false způsobí, že se další řádek kódu spustí okamžitě.

Return Values

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že waitForCompletion byla nastavena na false.

Notes
  • Provedení jiné funkce pohybu hnacího ústrojí (například turn nebo drive) během probíhajícího turnToHeading přeruší aktuální pohyb.

  • Protože turnToHeading je založeno na cíli (používá parametr angle ), funkce jako isDone a isMoving fungují s turnToHeading.

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

1 — 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 );

2 — 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 );

Parameters

Parametr

Typ

Popis

angle

double

Hodnota rotace, na kterou se robot otočí.

units

rotationUnits

Jednotka rotace: deg (stupně), rev (otáčky) nebo raw (jednotky). Jedna otáčka se rovná 360 stupňům.

velocity

double

Rychlost otáčení od 0 % do 100 % při použití velocityUnits::pct, od 0 do 600 ot/min při použití rpm, nebo od 0 do 3600 stupňů za sekundu při použití dps. Pokud není zadána žádná rychlost, robot se otáčí aktuální rychlostí otáčení.

units_v

velocityUnits

Jednotka rychlosti: velocityUnits::pct (procenta), rpm (otáčky za minutu) nebo dps (stupně za sekundu).

waitForCompletion

bool

true (výchozí) způsobí, že projekt počká, dokud se robot nedotočí, než se spustí další řádek kódu. false způsobí, že se další řádek kódu spustí okamžitě.

Return Values

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že waitForCompletion byla nastavena na false.

Notes
  • Provedení jiné funkce pohybu hnacího ústrojí (například turn nebo drive) během probíhající funkce turnToRotation přeruší aktuální pohyb.

  • Protože turnToRotation je založeno na cíli (používá parametr angle ), funkce jako isDone a isMoving fungují s turnToRotation.

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

calibrateDrivetrain#

calibrateDrivetrain kalibruje inerciální senzor nebo gyroskopický 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 nebo gyroskopickým senzorem. Je poskytována jako součást zdrojového kódu projektu a není součástí rozhraní VEX EXP C++ API.

Available Functions
void calibrateDrivetrain();

Parameters

Tato funkce nepřijímá žádné parametry.

Return Values

Tato funkce nevrací hodnotu.

Notes
  • Robot se automaticky kalibruje na začátku každého projektu.

  • Během kalibrace držte robota v klidu asi 2 sekundy.

Function Implementation

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

Parameters

Parametr

Typ

Popis

value

double

Hodnota směru, kterou se má nastavit pro robota. Může být od -359 do 359 při použití deg nebo degrees.

units

rotationUnits

Jednotka směru: deg (stupně), rev (otáčky) nebo raw (jednotky). Jedna otáčka se rovná 360 stupňům.

Return Values

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

Parameters

Parametr

Typ

Popis

value

double

Hodnota rotace, kterou chcete nastavit pro robota.

units

rotationUnits

Jednotka rotace: deg (stupně), rev (otáčky) nebo raw (jednotky). Jedna otáčka se rovná 360 stupňům.

Return Values

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

Parameters

Parametr

Typ

Popis

units

rotationUnits

Volitelné. Jednotka, ve které se má vrátit směr: degrees, deg (výchozí), revnebo raw. Jedna otáčka se rovná 360 stupňům.

Return Values

Vrátí aktuální směr robota jako double ve vybrané jednotce.

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#

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

Parameters

Parametr

Typ

Popis

units

rotationUnits

Volitelné. Jednotka, ve které se má vrátit směr: degrees, deg (výchozí), revnebo raw. Jedna otáčka se rovná 360 stupňům.

Return Values

Vrátí aktuální rotaci robota jako double ve vybrané jednotce.

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