chytrý pohon#

Zavedení#

Třída smartdrive řídí, jak se robot pohání a otáčí pomocí motorů, kol a senzoru. Třída smartdrive může používat připojený Gyro senzor nebo vestavěný Inerciální senzor v Brainu.

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.

Tato stránka používá jako příklad názvu inteligentního pohonu myDrivetrain V případě potřeby jej nahraďte vlastním nakonfigurovaným názvem.

Konstruktory tříd#

1 — Vytvoří inteligentní pohon s použitím existujících objektů motor_group pro levou a pravou stranu spolu s gyroskopickým senzorem nebo inerciálním senzorem.

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 — Vytvoří inteligentní pohon s využitím existujících objektů motor pro levou a pravou stranu spolu s gyroskopickým senzorem nebo inerciálním senzorem.

smartdrive(
    motor           &l,
    motor           &r,
    gyro            &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 gyroskop gyro nebo inerciální objekt inertial.

Parametr

Typ

Popis

&l / &r

motor_group / motor

Levý a pravý motor nebo skupiny motorů. Oba parametry musí používat stejný typ: buď dva objekty motor_group , nebo dva objekty motor.

&g

gyro / inertial

Gyroskopický senzor nebo inerciální senzor používaný inteligentním pohonem.

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 (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 objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the Inertial Sensor object.
inertial myInertial = inertial(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myInertial, // Inertial Sensor
    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 senzor nakonfigurovaný s inteligentním pohonem.

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řen objekt smartdrive.

/* 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 Inertial Sensor object.
inertial myInertial = inertial(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myInertial, // Inertial Sensor
    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čí robota do zadaného směru s využitím aktuální rychlosti otáčení.

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

2 — Otočí robota 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 směru: 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 120 ot/min při použití rpmnebo od 0 do 720 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
  • Spuštění jiné funkce pohybu hnacího ústrojí během běhu funkce turnToHeading přeruší aktuální pohyb.

  • turnToHeading používá cílový kurz, takže s ní lze použít funkce isDone a isMoving.

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 — Otočí robota na zadanou rotaci s využitím aktuální rychlosti otáčení.

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

2 — Otočí robota na zadanou rotaci 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 120 ot/min při použití rpmnebo od 0 do 720 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
  • Spuštění jiné funkce pohybu hnacího ústrojí během běhu funkce turnToRotation přeruší aktuální pohyb.

  • turnToRotation používá cílovou rotaci, takže s ní lze použít funkce isDone a isMoving.

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

calibrateDrivetrain#

calibrateDrivetrain kalibruje připojený gyroskopický senzor nebo vestavěný inerciální senzor Brainu nakonfigurovaný s pohonem SmartDrive.

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.

Poznámka: Hodnota calibrateDrivetrain je automaticky generována programem VEXcode, když je hnací ústrojí nakonfigurováno s gyroskopickým senzorem nebo inerciálním senzorem. Je poskytována jako součást zdrojového kódu projektu a není součástí rozhraní VEX IQ 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, pokud je v programu VEXcode nakonfigurován inteligentní pohon.

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

Function Implementation

Následuje příklad 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 rotace: 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();