Inerciální#

Zavedení#

Kódovací robot VEX AIM má vestavěný inerciální senzor. Tento senzor měří, jak se robot pohybuje a otáčí.

Inerciální senzor k tomu používá dvě části. Gyroskop měří otáčení, jako je směr robota, rotace, stáčení, klopení, stoupání a rychlost otáčení. Akcelerometr měří změny pohybu, jako je zrychlení, zpomalení nebo náhlé zastavení při nárazu.

Inerciální metody lze použít ke sledování zatáček, měření zrychlení, detekci nehod, resetování hodnot směru nebo rotace a kalibraci senzoru.

Níže je uveden seznam všech metod:

Orientace – Získejte a resetujte orientaci, otáčení nebo naklánění robota.

  • get_rotation — Vrátí, o kolik se robot otočil.

  • get_heading — Vrátí směr, kterým je robot otočen, od 0 do 359,99 stupňů.

  • get_yaw — Vrátí úhel natočení robota.

  • get_roll — Vrátí úhel natočení robota.

  • get_pitch — Vrátí úhel náklonu robota.

  • reset_rotation — Obnoví aktuální rotaci robota na 0 stupňů.

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

  • set_heading — Nastaví aktuální směr robota na novou hodnotu.

Nehoda – Detekce kolizí.

  • crashed — Zaregistruje funkci, která se spustí při detekci havárie.

  • set_crash_sensitivity — Nastavuje citlivost detekce nárazu na nárazy.

Pohyb – Měření zrychlení a rychlosti otáčení.

  • get_acceleration — Vrátí, jak rychle robot zrychluje nebo zpomaluje na vybrané ose.

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

Kalibrace – Správa kalibrace senzoru.

  • calibrate — Kalibruje inerciální senzor.

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

Orientace#

get_rotation#

Rotace udává, o kolik se robot 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ňů. get_rotation vrací aktuální rotaci robota jako číslo s desetinnou čárkou.

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ňů. Otočení o jednu celou otáčku doleva z 0 stupňů vrátí rotaci o -360 stupňů.

Usage:
robot.inertial.get_rotation()

Parametry

Popis

Tato metoda nemá žádné parametry.

# Display the robot's rotation as it rotates
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")
    wait(50, MSEC)

get_heading#

Směr pohybu robota je směr, měřený ve stupních od 0 do 359,99. get_heading vrací aktuální směr pohybu robota jako číslo s desetinnou čárkou.

Výchozí kurz je 0 stupňů. Pokud se robot otočí za více než 359,99 stupňů, kurz se vrátí zpět na 0 stupňů.

Usage:
robot.inertial.get_heading()

Parametry

Popis

Tato metoda nemá žádné parametry.

# Turn right until the heading reaches 90 degrees
robot.turn(RIGHT)
while robot.inertial.get_heading() < 90:
    wait(50, MSEC)
robot.stop_all_movement()

# Display the robot's heading as it is rotated by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(f"Heading: {robot.inertial.get_heading()} degrees")
    wait(50, MSEC)

get_yaw#

Stáčení popisuje otáčení robota doleva nebo doprava kolem jeho svislé osy. get_yaw vrací úhel stáčení robota v rozsahu -180,00 až 180,00 stupňů jako číslo s desetinnou čárkou.

Obrázek níže používá šipky k znázornění směru kladné rotace pro stáčení.

Kódovací robot VEX AIM s modrou šipkou směřující dolů ze středu robota. Kolem modré šipky je černá zakřivená šipka směřující ve směru hodinových ručiček, která označuje kladný směr stáčení.

Usage:
robot.inertial.get_yaw()

Parametry

Popis

Tato metoda nemá žádné parametry.

# Display the robot's yaw angle as it is rotated by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_yaw())
    wait(50, MSEC)

get_roll#

Rolování popisuje naklánění robota ze strany na stranu. get_roll vrací úhel natočení robota v rozsahu -180,00 až 180,00 stupňů jako číslo s desetinnou čárkou.

Obrázek níže používá šipky k znázornění směru kladné rotace pro klopení.

Kódovací robot VEX AIM se zelenou šipkou vyčnívající z přední části robota uprostřed senzoru AI Vision. Kolem zelené šipky se nachází černá šipka zakřivená proti směru hodinových ručiček, která označuje kladný směr otáčení.

Usage:
robot.inertial.get_roll()

Parametry

Popis

Tato metoda nemá žádné parametry.

# Display the robot's roll angle as it is tilted by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_roll())
    wait(50, MSEC)

get_pitch#

Úhel náklonu popisuje naklánění robota dopředu nebo dozadu. get_pitch vrací úhel náklonu robota v rozsahu -90,00 až 90,00 stupňů jako číslo s desetinnou čárkou.

Obrázek níže používá šipky k znázornění směru kladné rotace pro stoupání.

Kódovací robot VEX AIM s červenou šipkou trčící z boku robota pod logem VEX. Kolem červené šipky se nachází černá šipka zakřivená proti směru hodinových ručiček, která označuje kladný směr tónu.

Usage:
robot.inertial.get_pitch()

Parametry

Popis

Tato metoda nemá žádné parametry.

# Display the robot's pitch angle as it is tilted by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_pitch())
    wait(50, MSEC)

reset_rotation#

reset_rotation resetuje aktuální rotaci robota na 0 stupňů.

Po použití této metody robot sleduje budoucí otáčení od nové hodnoty rotace 0 stupňů.

Usage:
robot.inertial.reset_rotation()

Parametry

Popis

Tato metoda nemá žádné parametry.

# Reset the robot's rotation if it exceeds 180 degrees
while True:
    if robot.inertial.get_rotation() >= 180:
        robot.inertial.reset_rotation()

    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(f"Rotation: {robot.inertial.get_rotation():.2f}")

    wait(50, MSEC)

reset_heading#

reset_heading resetuje aktuální směr robota na 0 stupňů.

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

Usage:
robot.inertial.reset_heading()

Parametry

Popis

Tato metoda nemá žádné parametry.

# Turn the robot around using a new 90 degree heading
robot.turn_to(90)
wait(1, SECONDS)
robot.inertial.reset_heading()
robot.turn_to(90)

set_heading#

Směr je směr, kterým je robot otočen, měřený ve stupních od 0 do 359,99. set_heading změní aktuální směr robota na novou hodnotu směru.

Například pokud se robot otočil doprava, nastavením směru na 0 stupňů se tato poloha doprava stane novými 0 stupni. Robot pak může sledovat další směry na základě tohoto nového směru.

Usage:
robot.inertial.set_heading(heading)

Parametry

Popis

heading

Hodnota směru ve stupních, kterou chcete nastavit pro robota. Může se jednat o hodnotu od 0 do 359,99.

# Turn the robot to 90 degrees using its new heading
robot.inertial.set_heading(45)
robot.turn_to(90)

Pád#

crashed#

crashed registruje funkci, která má být volána, když robot detekuje náhlý náraz nebo kolizi.

Používání:

robot.inertial.crashed(callback, arg)

Parametry

Popis

callback

Funkce funkce, která je předem definována k provedení při detekci kolize.

arg

Volitelné. N-tice obsahující argumenty, které se mají předat funkci zpětného volání. Další informace naleznete v části Použití funkcí s parametry.

# Define what happens when a crash occurs
def crash_detected():
    # Stop all movement and indicate a crash occurred
    robot.screen.print("Crash detected")
    robot.stop_all_movement()

robot.inertial.crashed(crash_detected)

# Drive forward until crash
robot.move_at(0, 100)

set_crash_sensitivity#

set_crash_sensitivity upravuje, jak velké náhlé zrychlení je potřeba, aby robot detekoval náraz.

Usage:
robot.inertial.set_crash_sensitivity(sensitivity)

Parametry

Popis

sensitivity

Citlivost na náraz:

  • HIGH — Nejcitlivější; detekuje menší nárazy a spouští se při 1G.
  • NORMAL — Výchozí citlivost; detekuje střední nárazy a spouští se při 1,5G.
  • LOW — Nejméně citlivá; detekuje silnější nárazy a spouští se při 2G.

def crashed_callback():
    robot.stop_all_movement()
    robot.sound.play(CRASH)

# system event handlers
robot.inertial.crashed(crashed_callback)
# add 15ms delay to make sure events are registered correctly.
wait(15, MSEC)

# Detect a crash at a slow velocity.
robot.set_move_velocity(35, PERCENT)
robot.inertial.set_crash_sensitivity(HIGH)
robot.move_at(0)

Pohyb#

get_acceleration#

Zrychlení udává, jak rychle robot zrychluje nebo zpomaluje. get_acceleration vrací zrychlení robota na vybrané ose od -4,00 G do 4,00 G jako číslo s desetinnou čárkou.

G je jednotka používaná k měření zrychlení. 1 G udává zrychlení, které cítíte vlivem gravitace, když sedíte v klidu.

Hodnota může být kladná nebo záporná v závislosti na směru zrychlení na vybrané ose. V režimu AIM jsou možnosti os pojmenovány podle směrů robota: FORWARD, RIGHTWARDa DOWNWARD.

Programovací robot VEX AIM se směrovými šipkami vyčnívajícími ze středu robota. Zelená šipka označená vpřed vyčnívá ze přední části robota, modrá šipka označená dolů vyčnívá ze spodní části robota a červená šipka označená doprava vyčnívá ze strany robota pod logem VEX.

Používání:

robot.inertial.get_acceleration(type)

Parametry

Popis

type

Osa pro měření zrychlení:

  • DOWNWARD — Měří zrychlení ve svislém směru robota.
  • FORWARD — Měří zrychlení ve směru zepředu dozadu robota.
  • RIGHTWARD — Měří zrychlení ve směru ze strany na stranu robota.

# Display the acceleration as the robot begins to move
robot.screen.set_cursor(4,1)
sitting_accel = robot.inertial.get_acceleration(RIGHTWARD)
robot.screen.print(f"Resting: {sitting_accel:.2f}")
wait(0.5, SECONDS)
robot.screen.next_row()

robot.move_at(90, 100)
wait(0.1, SECONDS)

robot.screen.print(f"Startup: {robot.inertial.get_acceleration(RIGHTWARD):.2f}")

get_turn_rate#

Rychlost otáčení udává, jak rychle se robot otáčí. get_turn_rate vrací rychlost otáčení robota ve stupních za sekundu \(dps\) jako číslo s desetinnou čárkou, od -1000,00 do 1000,00 dps.

Hodnota může být kladná nebo záporná v závislosti na směru, kterým se robot otáčí na vybrané ose. Obrázek níže používá šipky k znázornění směru kladné rotace pro klopení, stoupání a stáčení.

Programovací robot VEX AIM se směrovými šipkami vyčnívajícími ze středu robota. Z přední části robota vyčnívá zelená šipka s označením „roll“ (naklánění) s černou zakřivenou šipkou směřující proti směru hodinových ručiček. Ze spodní části robota vyčnívá modrá šipka s označením „Yaw“ (stáčení) s černou zakřivenou šipkou směřující ve směru hodinových ručiček. A z boku robota pod logem VEX vyčnívá červená šipka s označením „Pitch“ (náklon) s černou zakřivenou šipkou směřující proti směru hodinových ručiček.

Usage:
robot.inertial.get_turn_rate(axis)

Parametry

Popis

axis

Kterou orientaci vrátit:

  • YAW
  • ROLL
  • PITCH
# Display the gyro rate as the robot is rotated by hand
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.inertial.get_turn_rate(YAW))
    wait(50, MSEC)

Kalibrace#

Kalibrace pomáhá inerciálnímu senzoru správně měřit otáčení měřením a kompenzací šumu a driftu senzoru po dobu 2 sekund. Během této doby musí robot zůstat zcela v klidu na stabilním povrchu. Pohyb během kalibrace může vést k nepřesným výsledkům.

Roboti VEX se po spuštění pokoušejí o automatickou kalibraci a čekají, dokud nezaznamenají žádný pohyb. Pokud je však robot během spouštění přenášen nebo přemisťován, senzor se nemusí správně kalibrovat nebo může dojít k nesprávné kalibraci.

Pokud váš projekt silně závisí na přesném směru nebo pokud potřebujete konzistentní a opakovatelné zatáčky, může vám pomoci volání calibrate na začátku kódu. Je vhodné během kalibrace zobrazit na obrazovce robota zprávu jako „Kalibrace…“ a poté ji aktualizovat na „Kalibrace dokončena“, abyste si (a všichni ostatní, kteří robota používají) připomněli, že robot musí během této doby zůstat nehybný.

calibrate#

calibrate kalibruje gyroskop. Kalibrace pomáhá inerciálnímu senzoru správně měřit otáčení měřením a kompenzací šumu a driftu senzoru po dobu 2 sekund. Během této doby musí robot zůstat zcela v klidu na stabilním povrchu. Pohyb během kalibrace může vést k nepřesným výsledkům.

Roboti VEX se po spuštění pokoušejí o automatickou kalibraci a čekají, dokud nezaznamenají žádný pohyb. Pokud je však robot během spouštění přenášen nebo přemisťován, senzor se nemusí správně kalibrovat nebo může dojít k nesprávné kalibraci.

Usage:
robot.inertial.calibrate()

Parametry

Popis

Tato metoda nemá žádné parametry.

# Calibrate the gyro before moving
robot.inertial.calibrate()
robot.screen.show_emoji(THINKING)
wait(2, SECONDS)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)

is_calibrating#

is_calibrating vrací booleovskou hodnotu označující, zda se inerciální senzor kalibruje.

  • True — Inerciální senzor se kalibruje.

  • False — Inerciální senzor se nekalibruje.

Usage:
robot.inertial.is_calibrating()

Parametry

Popis

Tato metoda nemá žádné parametry.

# Move after the calibration is completed
robot.inertial.calibrate()
while robot.inertial.is_calibrating():
    robot.screen.show_emoji(THINKING)
    wait(50, MSEC)
robot.screen.show_emoji(PROUD)
robot.move_for(50, 90)