Inerciální senzor#
Zavedení#
Třída inertial se používá k ovládání a přístupu k datům z vestavěného inerciálního senzoru zařízení IQ Brain (2. generace). Tento senzor měří, jak se mozek pohybuje a otáčí.
Inerciální senzor k tomu používá dvě části. Gyroskop měří otáčení, jako je směr, rotace, rychlost gyroskopu a orientace. Akcelerometr měří změny pohybu, jako je zrychlení nebo zpomalení podél os x, y a z.
Konstruktory tříd#
inertial(
turnType dir = turnType::right );
Destruktor tříd#
Zničí inerciální objekt inertial a uvolní související zdroje.
~inertial();
Parametry#
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Volitelné. Směr, který vrací kladné hodnoty:
|
Příklady#
// Create the inertial instance
inertial myInertial = inertial(
right); // dir
Č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— Zaregistruje funkci zpětného volání, která se spustí 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— Zaregistruje funkci zpětného volání, která se spustí při detekci kolize.setTurnType— Nastaví, který směr odbočení vrací kladné hodnoty kurzu.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 with the IQ (2nd gen) Brain. Replace the values
as needed. */
// Create the inertial instance
inertial myInertial = inertial();
heading#
Směr je směr, kterým je senzor natočen, měřený ve stupních od 0 do 359,99. Tato funkce vrací aktuální směr senzoru.
Počáteční kurz je 0 stupňů. Pokud se senzor otočí za více než 359,99 stupňů, kurz se vrátí zpět na 0 stupňů.
Available Functionsdouble heading( rotationUnits units = degrees );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Jednotka směru:
|
Vrací hodnotu double představující aktuální směr senzoru v zadaných jednotkách.
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.
// 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 Functionsdouble rotation( rotationUnits units = degrees );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Jednotka rotace:
|
Vrací hodnotu double představující aktuální rotaci v zadaných jednotkách.
Hodnota rotace je spojitá a nezalamuje se mezi 0 a 359,99 stupni. Pro přístup k hodnotě zalamovaného nadpisu použijte
heading.
// 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 Functionsvoid setHeading( double value,
rotationUnits units );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Hodnota směru ve stupních, která se má nastavit pro senzor. Může se jednat o hodnotu od 0 do 359,99. |
|
|
Jednotka záměru:
|
Tato funkce nevrací hodnotu.
Examples// Turn the robot around
myInertial.setHeading(180, degrees);
Drivetrain.turnToHeading(0, degrees);
setRotation#
Nastaví aktuální rotaci inerciálního senzoru na zadanou hodnotu.
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ňů.
Available Functionsvoid setRotation( double value,
rotationUnits units );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Hodnota natočení ve stupních, která se má nastavit pro senzor. Může se jednat o celé číslo nebo desetinné číslo. |
|
|
Jednotka rotace:
|
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 Functionsvoid calibrate( );
Tato funkce nepřijímá žádné parametry.
Return ValuesTato funkce nevrací hodnotu.
NotesBěhem kalibrace by měl senzor zůstat v klidu.
Pomocí
isCalibratingurč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 Functionsvoid resetHeading();
Tato funkce nepřijímá žádné parametry.
Return ValuesTato 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 Functionsvoid resetRotation();
Tato funkce nepřijímá žádné parametry.
Return ValuesTato funkce nevrací hodnotu.
isCalibrating#
Vrací, zda se inerciální senzor aktuálně kalibruje.
Available Functionsbool isCalibrating();
Tato funkce nepřijímá žádné parametry.
Return ValuesVrací 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 Functionsvoid changed( void (* callback)(void) );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Ukazatel na funkci, která bude volána při změně hodnoty záhlaví. Funkce nesmí přijímat žádné parametry a vracet |
Tato funkce nevrací hodnotu.
ExamplesDefinujte callback funkci (mimo
int main())// Display the heading 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()int main() { // Run onHeadingChanged when the Inertial Sensor's heading value changes. myInertial.changed(onHeadingChanged); }
installed#
Vrátí, zda je inerciální senzor nainstalován a připojen.
Available Functionsbool installed();
Tato funkce nepřijímá žádné parametry.
Return ValuesVrací 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.
double acceleration( axisType axis );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Osa, na které se má měřit zrychlení:
|
Vrací hodnotu double , která představuje zrychlení podél zadané osy v G (gravitační jednotky).
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 Functionsdouble gyroRate( axisType axis,
velocityUnits units );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Osa, ze které se má vrátit rychlost gyra:
|
|
|
Jednotka rychlosti gyroskopu:
|
Vrátí hodnotu double , která představuje aktuální rychlost otáčení podél zadané osy ve vybraných jednotkách.
// 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 otáčení. Tato funkce vrací aktuální orientaci inerciálního senzoru pro zadanou osu.
Naklánění, stoupání a stáčení popisují různé způsoby, jakými se senzor může naklánět nebo otáčet.
Available Functionsdouble orientation(
orientationType type,
rotationUnits units );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Úhel orientace pro návrat:
|
|
|
Orientační jednotka:
|
Vrátí hodnotu double , která představuje vybraný úhel orientace v zadaných jednotkách.
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(roll, 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 Functionsvoid collision( void (* callback)(axisType, double, double, double) );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
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:
void. |
Tato funkce nevrací hodnotu.
ExamplesDefinujte callback funkci (mimo
int main())// Display a message 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()int main() { // Run onCollision when the Inertial Sensor detects a collision. myInertial.collision(onCollision); }
setTurnType#
Nastaví, který směr otáčení vrací kladné hodnoty.
Available Functionsvoid setTurnType( turnType dir );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Směr, který vrací kladné hodnoty:
|
Tato funkce nevrací hodnotu.
NotesToto nastavení ovlivňuje, jak parametry
headingarotationhlásí kladné a záporné hodnoty.Volání této funkce přepíše hodnotu
dirzadanou při konstrukci inerciálního objektuinertial.
getTurnType#
Vrátí, jehož směr otáčení vytváří kladné hodnoty.
Available FunctionsturnType getTurnType();
Tato funkce nepřijímá žádné parametry.
Return ValuesVrací hodnotu typu turnType která označuje, který směr produkuje kladné hodnoty:
-
right— Clockwise rotation returns positive values. -
left— Counterclockwise rotation returns positive values.
Tato hodnota se nastaví během konstrukce inerciálního objektu
inertialnebo volánímsetTurnType.