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 |
|---|---|---|
|
|
Volitelné. Inteligentní port, ke kterému je připojen externí inerciální senzor, zapsaný jako |
|
|
Volitelné. Směr, který 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 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#
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 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())// 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 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. 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 Functionsdouble orientation(
axisType axis,
rotationUnits units );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Osa, pro kterou je vrácena orientace:
|
|
|
Jednotka rotace:
|
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(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 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())// 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 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.