Inercinis#

Įvadas#

VEX AIM kodavimo robotas turi įmontuotą inercinį jutiklį. Šis jutiklis matuoja, kaip robotas juda ir sukasi.

Inercinis jutiklis tam naudoja dvi dalis. Giroskopas matuoja posūkius, tokius kaip roboto kryptis, sukimasis, posūkis, riedėjimas, svyravimas ir posūkio greitis. Akselerometras matuoja judėjimo pokyčius, tokius kaip pagreitėjimas, sulėtėjimas ar staigus sustojimas susidūrimo metu.

Inerciniai metodai gali būti naudojami posūkiams sekti, pagreičiui matuoti, susidūrimams aptikti, krypties ar sukimosi reikšmėms iš naujo nustatyti ir jutikliui kalibruoti.

Žemiau pateikiamas visų metodų sąrašas:

Orientacija – gaukite ir iš naujo nustatykite roboto pasisukimo, sukosi ar pakrypimo kryptį.

  • get_rotation — Grąžina, kiek robotas pasisuko.

  • get_heading — Grąžina roboto pasukimo kryptį nuo 0 iki 359,99 laipsnių.

  • get_yaw — Grąžina roboto posūkio kampą.

  • get_roll — Grąžina roboto posūkio kampą.

  • get_pitch — Grąžina roboto polinkio kampą.

  • reset_rotation — Atkuria dabartinį roboto sukimosi kampą į 0 laipsnių.

  • reset_heading — Atkuria dabartinę roboto kryptį į 0 laipsnių.

  • set_heading — Nustato dabartinę roboto kryptį į naują krypties reikšmę.

Susidūrimas – aptikti susidūrimus.

  • crashed — Registruoja funkciją, kuri bus vykdoma aptikus gedimą.

  • set_crash_sensitivity — Nustato, koks jautrus yra susidūrimo aptikimas smūgiams.

Judėjimas – matuokite pagreitį ir posūkio greitį.

  • get_acceleration — Grąžina, kaip greitai robotas greitėja arba lėtėja pasirinktoje ašyje.

  • get_turn_rate — Grąžina, kaip greitai robotas sukasi pasirinkta ašimi.

Kalibravimas – tvarkykite jutiklio kalibravimą.

  • calibrate – Kalibruoja inercinį jutiklį.

  • is_calibrating — Grąžina, ar inercinis jutiklis šiuo metu kalibruojamas.

Orientacija#

get_rotation#

Sukimas rodo, kiek robotas pasisuko, matuojamas laipsniais. Skirtingai nuo krypties, sukimasis gali padidėti virš 359,99 laipsnio arba sumažėti žemiau 0 laipsnių. Projekto pradžioje sukimosi reikšmė nustatoma į 0 laipsnių. get_rotation grąžina dabartinį roboto sukimąsi kaip slankiojančią reikšmę.

Sukant į dešinę, sukimasis padidėja, o sukant į kairę – sumažėja. Pavyzdžiui, padarius du pilnus apsisukimus į dešinę, pasisukimas bus 720 laipsnių. Pasukus vieną pilną apsisukimą į kairę nuo 0 laipsnių, pasisukimas bus -360 laipsnių.

Usage:
robot.inertial.get_rotation()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

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

Kryptis – tai roboto pasukimo kryptis, matuojama laipsniais nuo 0 iki 359,99. get_heading grąžina dabartinę roboto kryptį kaip slankiąją kablelį.

Pradinė kryptis yra 0 laipsnių. Jei robotas pasisuka daugiau nei 359,99 laipsnio, kryptis grįžta į 0 laipsnių.

Usage:
robot.inertial.get_heading()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

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

„Yaw“ apibūdina roboto posūkį į kairę arba į dešinę aplink savo vertikalią ašį. get_yaw grąžina roboto posūkio kampą intervale nuo -180,00 iki 180,00 laipsnių kaip slankiąją reikšmę.

Žemiau esančiame paveikslėlyje rodyklėmis rodoma teigiamo sukimosi kryptis posūkio metu.

VEX AIM kodavimo robotas su mėlyna rodykle, nukreipta žemyn nuo roboto centro. Aplink mėlyną rodyklę juoda lenkta rodyklė rodo pagal laikrodžio rodyklę, nurodydama teigiamą posūkio kryptį.

Usage:
robot.inertial.get_yaw()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

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

„Roll“ apibūdina roboto pasvirimą į šonus. get_roll grąžina roboto pasvirimo kampą intervale nuo -180,00 iki 180,00 laipsnių kaip slankiąją reikšmę.

Žemiau esančiame paveikslėlyje rodyklėmis rodoma teigiamo sukimosi kryptis riedėjimo metu.

VEX AIM kodavimo robotas su žalia rodykle, išsikišusia roboto priekyje, DI vaizdo jutiklio centre. Aplink žalią rodyklę juoda rodyklė lenkiasi prieš laikrodžio rodyklę, nurodydama teigiamą riedėjimo kryptį.

Usage:
robot.inertial.get_roll()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

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

„Pitch“ apibūdina roboto pasvirimą į priekį arba atgal. get_pitch grąžina roboto pasvirimo kampą intervale nuo -90,00 iki 90,00 laipsnių kaip slankiąją reikšmę.

Žemiau esančiame paveikslėlyje rodyklėmis rodoma teigiamo sukimosi kryptis žingsniui.

VEX AIM kodavimo robotas su raudona rodykle, besitęsiančia roboto šone po VEX logotipu. Aplink raudoną rodyklę juoda rodyklė išlinksta prieš laikrodžio rodyklę, nurodydama teigiamą žingsnio kryptį.

Usage:
robot.inertial.get_pitch()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

# 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 atstato dabartinį roboto sukimąsi į 0 laipsnių.

Panaudojus šį metodą, robotas seka būsimus posūkius nuo naujos 0 laipsnių sukimosi vertės.

Usage:
robot.inertial.reset_rotation()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

# 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 atstato dabartinę roboto kryptį į 0 laipsnių.

Panaudojus šį metodą, dabartinė roboto kryptis tampa nauja 0 laipsnių pozicija.

Usage:
robot.inertial.reset_heading()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

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

Kryptis – tai roboto pasukimo kryptis, matuojama laipsniais nuo 0 iki 359,99. set_heading pakeičia dabartinę roboto kryptį į naują krypties reikšmę.

Pavyzdžiui, jei robotas pasisuko veidu į dešinę, nustačius 0 laipsnių kryptį, ta nukreipta į dešinę pozicija tampa nauja 0 laipsnių. Tada robotas gali sekti kitas kryptis pagal tą naują kryptį.

Usage:
robot.inertial.set_heading(heading)

Parametrai

Aprašymas

heading

Roboto krypties vertė laipsniais. Tai gali būti vertė nuo 0 iki 359,99.

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

Avarija#

crashed#

crashed užregistruoja funkciją, kuri bus iškviesta, kai robotas aptiks staigų smūgį arba susidūrimą.

Naudojimas:

robot.inertial.crashed(callback, arg)

Parametrai

Aprašymas

callback

Funkcija funkcija, kuri anksčiau buvo apibrėžta vykdyti aptikus susidūrimą.

arg

Pasirinktinai. Rinkinys su argumentais, kurie turi būti perduoti atgalinio iškvietimo funkcijai. Daugiau informacijos žr. Funkcijų su parametrais naudojimas.

# 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 reguliuoja, kiek staigaus pagreičio reikia, kad robotas aptiktų susidūrimą.

Usage:
robot.inertial.set_crash_sensitivity(sensitivity)

Parametrai

Aprašymas

sensitivity

Sudužimo jautrumas:

  • HIGH — Didžiausias jautrumas; aptinka mažesnius smūgius ir suveikimus esant 1G.
  • NORMAL — Numatytasis jautrumas; aptinka vidutinio stiprumo smūgius ir suveikimus esant 1,5G.
  • LOW — Mažiausias jautrumas; aptinka stipresnius smūgius ir suveikimus esant 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)

Judesys#

get_acceleration#

Pagreitis nurodo, kaip greitai robotas greitėja arba lėtėja. get_acceleration grąžina roboto pagreitį pasirinktoje ašyje nuo -4,00 G iki 4,00 G kaip slankiojo dydžio vertę.

G yra vienetas, naudojamas pagreičiui matuoti. 1 G yra maždaug tas pagreitis, kurį jaučiate dėl gravitacijos sėdėdami vietoje.

Reikšmė gali būti teigiama arba neigiama, priklausomai nuo pasirinktos ašies pagreičio krypties. AIM sistemoje ašių parinktys yra pavadintos pagal roboto kryptis: FORWARD, RIGHTWARDir DOWNWARD.

VEX AIM kodavimo robotas su krypties rodyklėmis, kylančiomis iš roboto centro. Žalia rodyklė, pažymėta „į priekį“, tęsiasi iš roboto priekio, mėlyna rodyklė, pažymėta „žemyn“, tęsiasi iš roboto apačios, o raudona rodyklė, pažymėta „į dešinę“, tęsiasi iš roboto šono po VEX logotipu.

Naudojimas:

robot.inertial.get_acceleration(type)

Parametrai

Aprašymas

type

Ašis, kuria matuojamas pagreitis:

  • DOWNWARD — Matuoja pagreitį roboto vertikalia kryptimi.
  • FORWARD — Matuoja pagreitį roboto judėjimo priekiu ir atgal kryptimi.
  • RIGHTWARD — Matuoja pagreitį roboto judėjimo šonu kryptimi.

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

Sukimosi greitis nurodo roboto sukimosi greitį. get_turn_rate grąžina roboto sukimosi greitį laipsniais per sekundę \(dps\) kaip slankiojo skaičiaus reikšmę nuo -1000,00 iki 1000,00 dps.

Reikšmė gali būti teigiama arba neigiama, priklausomai nuo roboto sukimosi krypties pasirinkta ašimi. Žemiau esančiame paveikslėlyje rodyklėmis rodoma teigiamo sukimosi kryptis riedėjimo, polinkio ir posūkio metu.

VEX AIM kodavimo robotas su krypties rodyklėmis, kylančiomis iš roboto centro. Iš roboto priekio kyla žalia rodyklė, pažymėta „roll“, o aplink ją – juoda lenkta rodyklė, nukreipta prieš laikrodžio rodyklę. Iš roboto apačios kyla mėlyna rodyklė, pažymėta „Yaw“, o aplink ją – juoda lenkta rodyklė, nukreipta pagal laikrodžio rodyklę. O iš roboto šono, po VEX logotipu, kyla raudona rodyklė, pažymėta „Pitch“, o aplink ją – juoda lenkta rodyklė, nukreipta prieš laikrodžio rodyklę.

Usage:
robot.inertial.get_turn_rate(axis)

Parametrai

Aprašymas

axis

Kuria kryptimi grįžti:

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

Kalibravimas#

Kalibravimas padeda inerciniam jutikliui teisingai išmatuoti posūkius, matuojant ir kompensuojant jutiklio triukšmą ir poslinkį per 2 sekundes. Šiuo laikotarpiu robotas turi išlikti visiškai nejudantis ant stabilaus paviršiaus. Judėjimas kalibravimo metu gali duoti netikslius rezultatus.

VEX robotai bando automatiškai kalibruotis paleidimo metu, laukdami, kol nebeaptiks judesio. Tačiau jei robotas paleidimo metu yra nešamas ar judinamas, jutiklis gali netinkamai kalibruotis arba gauti neteisingą kalibravimą.

Jei jūsų projektas labai priklauso nuo tikslios krypties arba jei jums reikia nuoseklių ir kartojamų posūkių, gali padėti kodo pradžioje iškviesti calibrate Kalibravimo metu roboto ekrane rekomenduojama rodyti pranešimą, pvz., „Calibrating…“, o vėliau jį atnaujinti į „Calibration complete“, kad primintumėte jums (ir visiems kitiems roboto naudotojams), jog robotas šiuo laikotarpiu turi nejudėti.

calibrate#

calibrate kalibruoja giroskopą. Kalibravimas padeda inerciniam jutikliui teisingai išmatuoti posūkius, matuojant ir kompensuojant jutiklio triukšmą ir poslinkį per 2 sekundes. Šiuo laikotarpiu robotas turi išlikti visiškai nejudantis ant stabilaus paviršiaus. Judėjimas kalibravimo metu gali duoti netikslius rezultatus.

VEX robotai bando automatiškai kalibruotis paleidimo metu, laukdami, kol nebeaptiks judesio. Tačiau jei robotas paleidimo metu yra nešamas ar judinamas, jutiklis gali netinkamai kalibruotis arba gauti neteisingą kalibravimą.

Usage:
robot.inertial.calibrate()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

# 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 grąžina loginę reikšmę, nurodančią, ar inercinis jutiklis kalibruojamas.

  • True — Inercinis jutiklis kalibruojamas.

  • False — Inercinis jutiklis nekalibruojamas.

Usage:
robot.inertial.is_calibrating()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

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