Inerciální senzor#

Zavedení#

Třída inertial se používá k ovládání a přístupu k datům z inerciálního senzoru EXP. EXP může používat vestavěný inerciální senzor Brain nebo externí inerciální senzor připojený k portu Smart Port.

Inerciální senzor měří, jak se robot pohybuje a otáčí. Gyroskop měří otáčení, jako je směr, rotace, rychlost gyroskopu a orientace. Akcelerometr měří změny v pohybu, jako je zrychlení nebo zpomalení podél os x, y a z.

Konstruktory tříd#

inertial(
    int32_t  index,
    turnType dir = turnType::right );

Destruktor tříd#

Zničí inerciální objekt inertial a uvolní související zdroje.

~inertial();

Parametry#

Parametr

Typ

Popis

index

int32_t

Volitelné. Inteligentní port, ke kterému je připojen externí inerciální senzor, zapsaný jako PORTx, kde x je číslo portu (například PORT1). Tento parametr nezahrnujte, pokud používáte vestavěný inerciální senzor Brainu.

dir

turnType

Volitelné. Směr, který vrací kladné hodnoty:

  • right (výchozí) – Otočení doprava vrací kladné hodnoty.
  • left – Otočení doleva vrací kladné hodnoty.

Příklady#

// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();

// Use an external Inertial Sensor connected to Port 1.
inertial Inertial1 = inertial(PORT1);

Členské funkce#

Třída inertial obsahuje následující členské funkce:

  • heading — Vrátí směr, kterým je senzor natočen.

  • rotation — Vrátí, o kolik se senzor otočil.

  • setHeading — Nastaví aktuální směr senzoru na novou hodnotu směru.

  • setRotation — Nastaví aktuální rotaci senzoru na novou hodnotu rotace.

  • calibrate — Kalibruje inerciální senzor.

  • resetHeading — Obnoví aktuální směr senzoru na 0 stupňů.

  • resetRotation — Obnoví aktuální natočení senzoru na 0 stupňů.

  • isCalibrating — Vrátí, zda se inerciální senzor aktuálně kalibruje.

  • changed — Registruje funkci, která se má volat při změně záhlaví.

  • installed — Vrátí, zda je inerciální senzor nainstalován.

  • acceleration — Vrátí, jak rychle se senzor zrychluje nebo zpomaluje na vybrané ose.

  • gyroRate — Vrátí, jak rychle se senzor otáčí na vybrané ose.

  • orientation — Vrátí úhel klopení, stoupání nebo stáčení inerciálního senzoru.

  • collision — Registruje funkci, která se spustí při detekci kolize.

  • setTurnType — Nastaví, který směr otáčení vrací kladné hodnoty.

  • getTurnType — Vrátí, který směr otáčení vytváří kladné hodnoty.

Před voláním jakékoli členské funkce inertial musí být vytvořena instance inertial , jak je znázorněno níže:

/* This constructor is required when using VS Code.
Inertial Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */

// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();

heading#

Vrátí aktuální směr inerciálního senzoru.

Směr je směr, kterým je senzor otočen, měřený ve stupních od 0 do 359,99. Pokud se senzor otočí za více než 359,99 stupňů, směr se vrátí zpět na 0 stupňů.

Available Functions
double heading( rotationUnits units = degrees );

Parameters

Parametr

Typ

Popis

units

rotationUnits

Jednotka směru:

  • deg / degrees (výchozí) — stupně
  • turns / rev — otáčky

Return Values

Vrací hodnotu double představující aktuální směr senzoru v zadaných jednotkách.

Notes
  • Hodnota směru je zalomená v rozsahu od 0 do 359,99 stupňů. Pro přístup k hodnotě nepřetržité rotace použijte rotation.

Examples
// Turn, then show the current heading
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.heading(degrees));

rotation#

Vrátí aktuální rotaci inerciálního senzoru.

Rotace udává, o kolik se senzor otočil. Na rozdíl od směru se rotace může zvýšit nad 359,99 stupňů nebo snížit pod 0 stupňů. Například provedení dvou celých otoček doprava vrátí rotaci o 720 stupňů. Otočení o jednu celou otáčku doleva z 0 stupňů vrátí rotaci o -360 stupňů.

Available Functions
double rotation( rotationUnits units = degrees );

Parameters

Parametr

Typ

Popis

units

rotationUnits

Jednotka rotace:

  • deg / degrees (výchozí) — stupně
  • turns / rev — otáčky

Return Values

Vrací hodnotu double představující aktuální rotaci v zadaných jednotkách.

Notes
  • Hodnota rotace je spojitá a nezalamuje se mezi 0 a 359,99 stupni. Pro přístup k hodnotě zalamovaného nadpisu použijte heading.

Examples
// Turn, then show the current rotation
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.rotation(degrees));

setHeading#

Směr je směr, kterým je senzor natočen, měřený ve stupních od 0 do 359,99. Tato funkce mění aktuální směr inerciálního senzoru na novou hodnotu směru.

Například pokud se senzor otočil doprava, nastavení směru na 0 stupňů změní tuto polohu doprava na nových 0 stupňů. Senzor pak může sledovat další směry na základě tohoto nového směru.

Available Functions
void setHeading( double value, rotationUnits units );

Parameters

Parametr

Typ

Popis

value

double

Hodnota směru ve stupních, která se má nastavit pro senzor. Může se jednat o hodnotu od 0 do 359,99.

units

rotationUnits

Jednotka záměru:

  • deg / degrees — stupně
  • turns / rev — otáček

Return Values

Tato funkce nevrací hodnotu.

Examples
// Turn the robot around
myInertial.setHeading(180, degrees);
Drivetrain.turnToHeading(0, degrees);

setRotation#

Rotace udává, o kolik se senzor otočil, měřeno ve stupních. Na rozdíl od směru se rotace může zvýšit nad 359,99 stupňů nebo snížit pod 0 stupňů. Na začátku projektu je hodnota rotace nastavena na 0 stupňů. Tato funkce změní aktuální rotaci inerciálního senzoru na novou hodnotu.

Například pokud se senzor otočil o dvě celé otáčky doprava, jeho hodnota rotace bude 720 stupňů. Nastavením rotace na 0 stupňů se tato hodnota resetuje ze 720 na 0 stupňů. Senzor pak může sledovat rotace na základě této nové hodnoty.

Available Functions
void setRotation( double value, rotationUnits units );

Parameters

Parametr

Typ

Popis

value

double

Hodnota natočení ve stupních, která se má nastavit pro senzor. Může se jednat o celé číslo nebo desetinné číslo.

units

rotationUnits

Jednotka rotace:

  • deg / degrees — stupně
  • turns / rev — otáček

Return Values

Tato funkce nevrací hodnotu.

Examples
// Turn the robot around
myInertial.setRotation(-180, degrees);
Drivetrain.turnToRotation(0, degrees);

calibrate#

Kalibruje inerciální senzor.

Kalibrace pomáhá senzoru správně měřit zatáčky. Během kalibrace držte senzor v klidu. Pokud se senzor během kalibrace pohybuje, hodnoty směru, rotace, rychlosti gyra a orientace se nemusí měřit správně.

Available Functions
void calibrate( );

Parameters

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

Return Values

Tato funkce nevrací hodnotu.

Notes
  • Během kalibrace by měl senzor zůstat v klidu.

  • Pomocí isCalibrating určete, kdy byla kalibrace dokončena.

resetHeading#

Resetuje aktuální směr inerciálního senzoru na 0 stupňů.

Po použití této funkce se aktuální směr senzoru stane novým kurzem 0 stupňů.

Available Functions
void resetHeading();

Parameters

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

Return Values

Tato funkce nevrací hodnotu.

resetRotation#

Obnoví aktuální rotaci inerciálního senzoru na 0 stupňů.

Po použití této funkce senzor sleduje budoucí otočení od nové hodnoty otočení 0 stupňů.

Available Functions
void resetRotation();

Parameters

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

Return Values

Tato funkce nevrací hodnotu.

isCalibrating#

Vrací, zda se inerciální senzor aktuálně kalibruje.

Available Functions
bool isCalibrating();

Parameters

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

Return Values

Vrací booleovskou hodnotu označující, zda se inerciální senzor kalibruje:

  • true — The sensor is currently calibrating.
  • false — The sensor is not currently calibrating.

changed#

Registruje funkci zpětného volání, která se spustí při změně hodnoty směru inerciálního senzoru.

Available Functions
void changed( void (* callback)(void) );

Parameters

Parametr

Typ

Popis

callback

void (*)(void)

Ukazatel na funkci, která bude volána při změně hodnoty záhlaví. Funkce nesmí přijímat žádné parametry a vracet void.

Return Values

Tato funkce nevrací hodnotu.

Examples

Definujte callback funkci (mimo int main())

// Called when the inertial sensor's heading value changes
void onHeadingChanged() {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Heading: %.2f", myInertial.heading());
}

Zaregistrujte zpětné volání uvnitř int main()

/* vexcodeInit() is only required when using VEXcode.
Remove vexcodeInit() if compiling in VS Code. */
int main() {

  // Turn the robot by hand briefly
  // to change the robot's heading
  myInertial.changed(onHeadingChanged);
}

installed#

Vrátí, zda je inerciální senzor nainstalován a připojen.

Available Functions
bool installed();

Parameters

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

Return Values

Vrací booleovskou hodnotu označující, zda je inerciální senzor nainstalován a připojen:

  • true — The sensor is connected and responding.
  • false — The sensor is not connected or not detected.

acceleration#

Zrychlení udává, jak rychle se senzor zrychluje nebo zpomaluje. Tato funkce vrací zrychlení inerciálního senzoru na vybrané ose, od -4,0 G do 4,0 G.

G je jednotka používaná k měření zrychlení. 1 G udává zrychlení, které cítíte z gravitace, když sedíte v klidu. Hodnota může být kladná nebo záporná v závislosti na směru zrychlení na zvolené ose.

Available Functions
double acceleration( axisType axis );

Parameters

Parametr

Typ

Popis

axis

axisType

Osa, na které se má měřit zrychlení:

  • xaxis
  • yaxis
  • zaxis

Return Values

Vrací hodnotu double , která představuje zrychlení podél zadané osy v G (gravitační jednotky).

Notes
  • Hodnoty zrychlení jsou uváděny v jednotkách G.

gyroRate#

Rychlost gyroskopu udává, jak rychle se inerciální senzor otáčí. Tato funkce vrací aktuální rychlost otáčení inerciálního senzoru na vybrané ose.

Hodnota může být kladná nebo záporná v závislosti na směru otáčení senzoru na dané ose.

Available Functions
double gyroRate( axisType axis, velocityUnits units );

Parameters

Parametr

Typ

Popis

axis

axisType

Osa, ze které se má vrátit rychlost gyra:

  • xaxis
  • yaxis
  • zaxis

units

velocityUnits

Jednotka rychlosti gyroskopu:

  • dps — stupně za sekundu
  • rpm — otáčky za minutu

Return Values

Vrátí hodnotu double , která představuje aktuální rychlost otáčení podél zadané osy ve vybraných jednotkách.

Examples
// Display the rate of change of rotation while turning in dps
Drivetrain.turn(right);
wait(1, seconds);

Brain.Screen.print(myInertial.gyroRate(zaxis, dps));

Drivetrain.stop();

orientation#

Orientace je aktuální úhel inerciálního senzoru na vybrané ose. Tato funkce vrací orientaci inerciálního senzoru v rozsahu od -180,00 do 180,00 stupňů.

Vybraná osa x, y nebo z odpovídá jedné z orientačních os senzoru.

Available Functions
double orientation(
  axisType      axis,
  rotationUnits units );

Parameters

Parametr

Typ

Popis

axis

axisType

Osa, pro kterou je vrácena orientace:

  • xaxis
  • yaxis
  • zaxis

units

rotationUnits

Jednotka rotace:

  • deg / degrees — stupně
  • turns / rev — otáček

Return Values

Vrátí hodnotu double , která představuje vybraný úhel orientace v zadaných jednotkách.

Examples
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1,1);
  // Show the Inertial Sensor's orientation value
  // for roll in degrees
  double orient = myInertial.orientation(xaxis, deg);
  Brain.Screen.print("%f", orient);
  wait(0.1, seconds);
}

collision#

Registruje funkci zpětného volání, která se spustí, když inerciální senzor detekuje náhlý náraz nebo kolizi.

Available Functions
void collision( void (* callback)(axisType, double, double, double) );

Parameters

Parametr

Typ

Popis

callback

void (*)(axisType, double, double, double)

Ukazatel na funkci, která bude volána při detekci kolize. Funkce zpětného volání musí přijímat následující parametry:

  • axisType — Osa, na které byla kolize detekována.
  • Hodnoty zrychlení v okamžiku nárazu, v pořadí:
    • double — Zrychlení podél osy x (v G).
    • double — Zrychlení podél osy y (v G).
    • double — Zrychlení podél osy z (v G).
Funkce musí vracet void.

Return Values

Tato funkce nevrací hodnotu.

Examples

Definujte callback funkci (mimo int main())

// Called when the Inertial Sensor detects a collision
void onCollision(axisType axis, double x, double y, double z) {
  Brain.Screen.print("Collision detected!");
}

Zaregistrujte zpětné volání uvnitř int main()

/* vexcodeInit() is only required when using VEXcode.
Remove vexcodeInit() if compiling in VS Code. */
int main() {

  // Firmly move the robot by hand briefly to simulate
  // a collision and call the onCollision function
  myInertial.collision(onCollision);
}

setTurnType#

Nastaví, který směr otáčení vrací kladné hodnoty.

Available Functions
void setTurnType( turnType dir );

Parameters

Parametr

Typ

Popis

dir

turnType

Směr, který vrací kladné hodnoty:

  • right
  • left

Return Values

Tato funkce nevrací hodnotu.

Notes

getTurnType#

Vrátí, jehož směr otáčení vytváří kladné hodnoty.

Available Functions
turnType getTurnType();

Parameters

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

Return Values

Vrací hodnotu typu turnType která označuje, který směr produkuje kladné hodnoty:

  • right — Clockwise rotation returns positive values.
  • left — Counterclockwise rotation returns positive values.
Notes