Inerciális#

Bevezetés#

A VEX AIM kódolórobot beépített inerciális érzékelővel rendelkezik. Ez az érzékelő méri a robot mozgását és fordulását.

Az inerciális érzékelő két alkatrészt használ ehhez. A giroszkóp méri a fordulást, például a robot irányát, forgását, elfordulását, dőlését, bólintását és fordulási sebességét. A gyorsulásmérő a mozgás változásait méri, például a gyorsulást, lassulást vagy a hirtelen megállást ütközés esetén.

Az inerciális módszerek használhatók fordulók követésére, gyorsulás mérésére, ütközések észlelésére, irány- vagy forgásértékek visszaállítására, valamint az érzékelő kalibrálására.

Az alábbiakban felsoroljuk az összes módszert:

Tájolás – A robot irányának lekérése, fordulása vagy dőlése.

  • get_rotation — Visszaadja, hogy a robot milyen messzire fordult.

  • get_heading — Visszaadja a robot irányát 0 és 359,99 fok között.

  • get_yaw — Visszaadja a robot elfordulási szögét.

  • get_roll — Visszaadja a robot dőlésszögét.

  • get_pitch — Visszaadja a robot dőlésszögét.

  • reset_rotation — Visszaállítja a robot aktuális elforgatását 0 fokra.

  • reset_heading — Visszaállítja a robot aktuális irányát 0 fokra.

  • set_heading — Beállítja a robot aktuális irányát egy új irányértékre.

Ütközés – Ütközésészlelés.

  • crashed — Regisztrál egy függvényt, amely összeomlás észlelésekor fut.

  • set_crash_sensitivity — Beállítja, hogy az ütközésészlelés mennyire legyen érzékeny az ütésekre.

Mozgás – Gyorsulás és fordulási sebesség mérése.

  • get_acceleration — Visszaadja, hogy a robot milyen gyorsan gyorsul vagy lassul a kiválasztott tengely mentén.

  • get_turn_rate — Visszaadja, hogy milyen gyorsan forog a robot a kiválasztott tengely körül.

Kalibrálás – Érzékelő kalibrálásának kezelése.

  • calibrate — Kalibrálja az inerciális érzékelőt.

  • is_calibrating — Visszaadja, hogy az inerciális érzékelő jelenleg kalibrálás alatt áll-e.

Tájolás#

get_rotation#

A forgás a robot fordulatát mutatja fokban mérve. Az irányváltással ellentétben a forgás 359,99 fok fölé nőhet, vagy 0 fok alá csökkenhet. Egy projekt elején a forgás értéke 0 fok. get_rotation függvény visszaadja a robot aktuális forgását lebegőpontos értékként.

Jobbra fordulás növeli, balra fordulás pedig csökkenti az elfordulást. Például két teljes jobbra fordulás 720 fokos elfordulást eredményez. Egy teljes balra fordulás 0 fokról -360 fokos elfordulást eredményez.

Usage:
robot.inertial.get_rotation()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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#

A heading is the direction the robot is facing, measured in degrees from 0 to 359.99. get_heading returns the robot’s current heading as a float.

A kezdő irány 0 fok. Ha a robot 359,99 fok fölé fordul, az irány visszaáll 0 fokra.

Usage:
robot.inertial.get_heading()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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#

A Yaw (elfordulás) leírja a robot balra vagy jobbra fordulását a függőleges tengelye körül. get_yaw visszaadja a robot elfordulási szögét -180,00 és 180,00 fok közötti tartományban, lebegőpontos értékként.

Az alábbi kép nyilak segítségével mutatja a pozitív elfordulás irányát az elfordulás esetén.

Egy VEX AIM kódoló robot, amelynek közepéből lefelé mutató kék nyíl található. A kék nyíl körül egy fekete, görbe nyíl mutat az óramutató járásával megegyezően, jelezve a pozitív elfordulási irányt.

Usage:
robot.inertial.get_yaw()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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#

A „roll” (gördülés) a robot oldalirányú dőlését írja le. get_roll függvény a robot gördülési szögét adja vissza -180,00 és 180,00 fok közötti tartományban, lebegőpontos értékként.

Az alábbi kép nyilak segítségével mutatja a pozitív forgás irányát a gördülés során.

Egy VEX AIM kódolórobot, amelynek elején, az AI Vision érzékelő közepén egy zöld nyíl nyúlik ki. A zöld nyíl körül egy fekete nyíl görbül az óramutató járásával ellentétes irányba, jelezve a gördülés pozitív irányát.

Usage:
robot.inertial.get_roll()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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#

A dőlésszög (pitch) a robot előre vagy hátra dőlését írja le. A get_pitch a robot dőlésszögét adja vissza -90,00 és 90,00 fok közötti tartományban, lebegőpontos értékként.

Az alábbi kép nyilak segítségével mutatja a pozitív forgás irányát a bólintásnál.

Egy VEX AIM kódolórobot, amelynek oldalán a VEX logó alatt egy piros nyíl nyúlik ki. A piros nyíl körül egy fekete nyíl görbül az óramutató járásával ellentétesen, jelezve a bólintás pozitív irányát.

Usage:
robot.inertial.get_pitch()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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 A robot aktuális elforgatását 0 fokra állítja vissza.

A módszer használata után a robot az új 0 fokos elfordulási értékből kiindulva követi nyomon a jövőbeli fordulatokat.

Usage:
robot.inertial.reset_rotation()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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 A robot aktuális irányát 0 fokra állítja vissza.

A módszer használata után a robot aktuális iránya lesz az új 0 fokos haladási irány.

Usage:
robot.inertial.reset_heading()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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#

A haladási irány az az irány, amerre a robot néz, 0 és 359,99 fok között mérve. set_heading paraméterrel a robot aktuális haladási iránya egy új haladási irányértékre módosítható.

Például, ha a robot jobbra fordult, és a haladási irány 0 fokra állítása a jobbra néző pozíciót teszi az új 0 fokossá. Ezután a robot az új irány alapján más haladási irányokat is követhet.

Usage:
robot.inertial.set_heading(heading)

Paraméterek

Leírás

heading

A robothoz beállítandó irányérték fokban. Ez 0 és 359,99 közötti érték lehet.

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

Összeomlás#

crashed#

crashed regisztrál egy függvényt, amely akkor hívódik meg, amikor a robot hirtelen becsapódást vagy ütközést érzékel.

Használat:

robot.inertial.crashed(callback, arg)

Paraméterek

Leírás

callback

Egy korábban definiált függvény, amely ütközés észlelésekor kerül végrehajtásra.

arg

Opcionális. Egy tuple, amely argumentumokat tartalmaz a visszahívó függvénynek átadandó. További információkért lásd a Függvények használata paraméterekkel részt.

# 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 beállítja, hogy mekkora hirtelen gyorsulásra van szükség a robotnak az ütközés észleléséhez.

Usage:
robot.inertial.set_crash_sensitivity(sensitivity)

Paraméterek

Leírás

sensitivity

Az ütközési érzékenység:

  • HIGH — Legérzékenyebb; 1G-n érzékeli a kisebb becsapódásokat és a kiváltó okokat.
  • NORMAL — Alapértelmezett érzékenység; 1,5G-n érzékeli a közepes becsapódásokat és a kiváltó okokat.
  • LOW — Legkevésbé érzékeny; 2G-n érzékeli az erősebb becsapódásokat és a kiváltó okokat.

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)

Mozgás#

get_acceleration#

A gyorsulás a robot gyorsulási vagy lassulási sebességét adja meg. get_acceleration függvény visszaadja a robot kiválasztott tengelyen mért gyorsulását -4,00 G-től 4,00 G-ig, lebegőpontos értékként.

A G a gyorsulás mérésére használt mértékegység. Az 1 G a gravitációból fakadó gyorsulást jelenti, amelyet egy helyben ülés közben érzünk.

Az érték lehet pozitív vagy negatív a kiválasztott tengely gyorsulási irányától függően. Az AIM esetében a tengelyopciók a robot irányainak megfelelően vannak elnevezve: FORWARD, RIGHTWARD, és DOWNWARD.

Egy VEX AIM kódoló robot, amelynek közepéből irányjelző nyilak állnak ki. Egy előre feliratú zöld nyíl a robot elejéből, egy lefelé feliratú kék nyíl a robot aljából, és egy jobbra feliratú piros nyíl a robot oldalából, a VEX logó alatt.

Használat:

robot.inertial.get_acceleration(type)

Paraméterek

Leírás

type

A gyorsulás mérésére szolgáló tengely:

  • DOWNWARD — A gyorsulást méri a robot függőleges irányában.
  • FORWARD — A gyorsulást méri a robot elölről hátrafelé irányuló irányában.
  • RIGHTWARD — A gyorsulást méri a robot oldalirányában.

# 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#

A fordulási sebesség a robot forgási sebességét adja meg. A get_turn_rate visszaadja a robot fordulási sebességét fokban másodpercenként \(dps\) lebegőpontos értékként, -1000,00 és 1000,00 dps között.

Az érték lehet pozitív vagy negatív attól függően, hogy a robot milyen irányba forog a kiválasztott tengelyen. Az alábbi kép nyilak segítségével mutatja a pozitív forgás irányát a henger, a bólintás és az elfordulás esetén.

Egy VEX AIM kódoló robot, amelynek középpontjából irányjelző nyilak állnak ki. Egy zöld nyíl, amin „roll” felirat látható, a robot elejéből nyúlik ki, körülötte egy fekete görbe nyíl mutat az óramutató járásával ellentétesen. Egy kék nyíl, amin „Yaw” felirat látható, a robot aljából nyúlik ki, körülötte egy fekete görbe nyíl mutat az óramutató járásával ellentétesen. És egy piros nyíl, amin „Pitch” felirat látható, a robot oldalából nyúlik ki a VEX logó alatt, körülötte egy fekete görbe nyíl mutat az óramutató járásával ellentétesen.

Usage:
robot.inertial.get_turn_rate(axis)

Paraméterek

Leírás

axis

Melyik irányt kell visszaadni:

  • 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)

Kalibráció#

A kalibrálás segít az inerciális érzékelőnek a fordulatok helyes mérésében azáltal, hogy 2 másodperces időszakon keresztül méri és kompenzálja az érzékelő zaját és eltolódását. Ez idő alatt a robotnak teljesen mozdulatlanul kell maradnia egy stabil felületen. A kalibrálás közbeni mozgás pontatlan eredményeket eredményezhet.

A VEX robotok indításkor automatikusan megpróbálják kalibrálni magukat, és addig várnak, amíg már nem érzékelnek mozgást. Ha azonban a robotot indítás közben szállítják vagy mozgatják, előfordulhat, hogy az érzékelő kalibrálása nem megfelelő, vagy helytelen kalibrációt eredményez.

Ha a projekted nagymértékben függ a pontos iránymeghatározástól, vagy ha következetes és megismételhető fordulatokra van szükséged, akkor a kód elején calibrate meghívása segíthet. Jó gyakorlat, ha a kalibrálás során megjelenítesz egy üzenetet, például a „Calibration…” üzenetet a robot képernyőjén, majd utána frissíted „Calibration complete”-re, hogy emlékeztesd magad (és mindenki mást, aki a robotot használja), hogy a robotnak mozdulatlanul kell maradnia ez idő alatt.

calibrate#

calibrate kalibrálja a giroszkópot. A kalibrálás segít az inerciális érzékelőnek a fordulatok helyes mérésében azáltal, hogy méri és kompenzálja az érzékelő zaját és eltolódását egy 2 másodperces időszakon belül. Ez idő alatt a robotnak teljesen mozdulatlanul kell maradnia egy stabil felületen. A kalibrálás közbeni mozgás pontatlan eredményeket eredményezhet.

A VEX robotok indításkor automatikusan megpróbálják kalibrálni magukat, és addig várnak, amíg már nem érzékelnek mozgást. Ha azonban a robotot indítás közben szállítják vagy mozgatják, előfordulhat, hogy az érzékelő kalibrálása nem megfelelő, vagy helytelen kalibrációt eredményez.

Usage:
robot.inertial.calibrate()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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 egy logikai értéket ad vissza, amely jelzi, hogy az inerciális érzékelő kalibrál-e.

  • True — Az inerciális érzékelő kalibrál.

  • False — Az inerciális érzékelő nem kalibrál.

Usage:
robot.inertial.is_calibrating()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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)