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.
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.
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.
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 |
|---|---|
|
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 |
|---|---|
|
Egy korábban definiált függvény, amely ütközés észlelésekor kerül végrehajtásra. |
|
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 |
|---|---|
|
Az ütközési érzékenység:
|
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.

Használat:
robot.inertial.get_acceleration(type)
Paraméterek |
Leírás |
|---|---|
|
A gyorsulás mérésére szolgáló tengely:
|
# 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.

Usage:
robot.inertial.get_turn_rate(axis)
Paraméterek |
Leírás |
|---|---|
|
Melyik irányt kell visszaadni:
|
# 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)