Inertiaalinen#

Johdanto#

VEX AIM -koodausrobotissa on sisäänrakennettu inertia-anturi. Tämä anturi mittaa robotin liikettä ja kääntymistä.

Inertia-anturi käyttää tätä varten kahta osaa. Gyroskooppi mittaa kääntymistä, kuten robotin suuntaa, pyörimistä, kallistusta, rullausta, kallistusta ja kääntymisnopeutta. Kiihtyvyysanturi mittaa liikkeen muutoksia, kuten kiihtymistä, hidastumista tai äkillistä pysähtymistä törmäyksen aikana.

Inertiamenetelmiä voidaan käyttää käännösten seuraamiseen, kiihtyvyyden mittaamiseen, törmäysten havaitsemiseen, suunta- tai pyörimisarvojen nollaamiseen ja anturin kalibrointiin.

Alla on luettelo kaikista menetelmistä:

Suunta — Hae ja nollaa robotin suunta, kääntymis- tai kallistuskulma.

  • get_rotation — Palauttaa robotin kääntymismatkan.

  • get_heading — Palauttaa robotin suunnan väliltä 0 - 359,99 astetta.

  • get_yaw — Palauttaa robotin kääntökulman.

  • get_roll — Palauttaa robotin kallistuskulman.

  • get_pitch — Palauttaa robotin kallistuskulman.

  • reset_rotation — Palauttaa robotin nykyisen pyörimiskulman 0 asteeseen.

  • reset_heading — Palauttaa robotin nykyisen suunnan 0 asteeseen.

  • set_heading — Asettaa robotin nykyisen suunnan uuteen suunta-arvoon.

Kolari — Havaitse törmäykset.

  • crashed — Rekisteröi funktion suoritettavaksi, kun kaatuminen havaitaan.

  • set_crash_sensitivity — Määrittää, kuinka herkkä törmäyksen tunnistus on iskuille.

Liike — Mittaa kiihtyvyyttä ja kääntymisnopeutta.

  • get_acceleration — Palauttaa robotin nopeuden valitulla akselilla.

  • get_turn_rate — Palauttaa robotin pyörimisnopeuden valitun akselin ympäri.

Kalibrointi — Hallitse anturin kalibrointia.

  • calibrate — Kalibroi inertia-anturin.

  • is_calibrating — Palauttaa, onko inertia-anturi parhaillaan kalibroimassa.

Suuntautuminen#

get_rotation#

Rotaatio ilmaisee robotin kääntymismäärän asteina. Toisin kuin suunnassa, rotaatio voi kasvaa yli 359,99 asteen tai laskea alle 0 asteen. Projektin alussa rotaatioarvoksi asetetaan 0 astetta. get_rotation palauttaa robotin nykyisen rotaation liukulukuna.

Kääntyminen oikealle lisää kiertoa ja kääntäminen vasemmalle vähentää sitä. Esimerkiksi kaksi täyttä kierrosta oikealle palauttaa 720 asteen kiertoa. Yksi täysi kierros vasemmalle 0 asteesta palauttaa -360 asteen kiertoa.

Usage:
robot.inertial.get_rotation()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

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

Suunta on robotin suunta, mitattuna asteina välillä 0 - 359,99. get_heading palauttaa robotin nykyisen suunnan kelluvana lukuna.

Lähtösuunta on 0 astetta. Jos robotti kääntyy yli 359,99 astetta, suunta palautuu takaisin 0 asteeseen.

Usage:
robot.inertial.get_heading()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

# 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 kuvaa robotin kääntymistä vasemmalle tai oikealle pystyakselinsa ympäri. get_yaw palauttaa robotin kääntökulman välillä -180,00 - 180,00 astetta liukulukuna.

Alla olevassa kuvassa nuolet osoittavat positiivisen kiertymisen suunnan kääntöliikkeelle.

VEX AIM -koodausrobotti, jonka sininen nuoli osoittaa alaspäin robotin keskeltä. Sinisen nuolen ympärillä musta kaareva nuoli osoittaa myötäpäivään ja osoittaa positiivisen kääntösuunnan.

Usage:
robot.inertial.get_yaw()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

# 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 kuvaa robotin kallistumista puolelta toiselle. get_roll palauttaa robotin vierintäkulman liukuvana arvona väliltä -180,00 - 180,00 astetta.

Alla olevassa kuvassa nuolet osoittavat vierityksen positiivisen pyörimisen suunnan.

VEX AIM -koodausrobotti, jonka etuosassa, tekoälynäköanturin keskellä, näkyy vihreä nuoli. Vihreän nuolen ympärillä musta nuoli kaartuu vastapäivään osoittaen vierimisen positiivisen suunnan.

Usage:
robot.inertial.get_roll()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

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

Kallistuskulma kuvaa robotin kallistumista eteen- tai taaksepäin. get_pitch palauttaa robotin kallistuskulman välillä -90,00 - 90,00 astetta liukuvana arvona.

Alla olevassa kuvassa nuolet osoittavat nousun positiivisen pyörimisen suunnan.

VEX AIM -koodausrobotti, jonka kyljessä VEX-logon alapuolella näkyy punainen nuoli. Punaisen nuolen ympärillä musta nuoli kaartuu vastapäivään osoittaen kallistuksen positiivisen suunnan.

Usage:
robot.inertial.get_pitch()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

# 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 nollaa robotin nykyisen pyörityskulman 0 asteeseen.

Tämän menetelmän käytön jälkeen robotti seuraa tulevia käännöksiä uudesta 0 asteen kiertoarvosta.

Usage:
robot.inertial.reset_rotation()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

# 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 nollaa robotin nykyisen suunnan 0 asteeseen.

Tämän menetelmän käytön jälkeen robotin nykyisestä suunnasta tulee uusi 0 asteen suunta.

Usage:
robot.inertial.reset_heading()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

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

Suunta on robotin suunta, mitattuna asteina välillä 0 - 359,99. set_heading muuttaa robotin nykyisen suunnan uuteen suunta-arvoon.

Jos esimerkiksi robotti on kääntynyt oikealle ja suunnan asettaminen 0 asteeseen tekee oikealle osoittavasta asennosta uuden 0 asteen. Tämän jälkeen robotti voi seurata muita suuntia tämän uuden suunnan perusteella.

Usage:
robot.inertial.set_heading(heading)

Parametrit

Kuvaus

heading

Robotille asetettava suunta-arvo asteina. Tämä voi olla arvo väliltä 0–359,99.

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

Kaatuminen#

crashed#

crashed rekisteröi funktion kutsuttavaksi, kun robotti havaitsee äkillisen iskun tai törmäyksen.

Käyttö:

robot.inertial.crashed(callback, arg)

Parametrit

Kuvaus

callback

Funktio, joka on aiemmin määritelty suoritettavaksi törmäyksen havaittaessa.

arg

Valinnainen. Tuple, joka sisältää argumentteja, jotka välitetään takaisinkutsufunktiolle. Lisätietoja on kohdassa Funktioiden käyttö parametrien kanssa.

# 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 säätää, kuinka paljon äkillistä kiihtyvyyttä robotti tarvitsee törmäyksen havaitsemiseksi.

Usage:
robot.inertial.set_crash_sensitivity(sensitivity)

Parametrit

Kuvaus

sensitivity

Törmäysherkkyys:

  • HIGH — Herkin; havaitsee pienemmät iskut ja laukaisimet 1G:n taajuudella.
  • NORMAL — Oletusherkkyys; havaitsee kohtalaiset iskut ja laukaisimet 1,5G:n taajuudella.
  • LOW — Vähiten herkkä; havaitsee voimakkaammat iskut ja laukaisimet 2G:n taajuudella.

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)

Liike#

get_acceleration#

Kiihtyvyys ilmaisee, kuinka nopeasti robotti kiihtyy tai hidastuu. get_acceleration palauttaa robotin kiihtyvyyden valitulla akselilla välillä -4,00 G - 4,00 G, liukulukuna.

G on kiihtyvyyden yksikkö. 1 G on suunnilleen painovoiman aiheuttama kiihtyvyys, jonka tunnet paikallasi istuessasi.

Arvo voi olla positiivinen tai negatiivinen valitun akselin kiihtyvyyden suunnasta riippuen. AIM:ssä akselivaihtoehdot on nimetty robotin suuntien mukaan: FORWARD, RIGHTWARDja DOWNWARD.

VEX AIM -koodausrobotti, jonka keskeltä lähtee suuntanuolia. Robotin etuosasta lähtee vihreä eteenpäin osoittava nuoli, robotin alaosasta alaspäin osoittava sininen nuoli ja robotin sivusta VEX-logon alapuolelta oikealle osoittava punainen nuoli.

Käyttö:

robot.inertial.get_acceleration(type)

Parametrit

Kuvaus

type

Kiihtyvyyden mittausakseli:

  • DOWNWARD — Mittaa kiihtyvyyttä robotin pystysuunnassa.
  • FORWARD — Mittaa kiihtyvyyttä robotin edestä taaksepäin.
  • RIGHTWARD — Mittaa kiihtyvyyttä robotin sivulta sivulle.

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

Kääntönopeus ilmaisee robotin pyörimisnopeuden. get_turn_rate palauttaa robotin kääntymisnopeuden asteina sekunnissa \(dps\) liukulukuna väliltä -1000,00 - 1000,00 dps.

Arvo voi olla positiivinen tai negatiivinen riippuen robotin pyörimissuunnasta valitun akselin ympäri. Alla olevassa kuvassa nuolet osoittavat positiivisen pyörimisen suunnan vierinnälle, kallistukselle ja kääntökulmalle.

VEX AIM -koodausrobotti, jonka keskeltä lähtee suuntanuolia. Robotin etuosasta lähtee vihreä nuoli, jossa lukee roll, ja sen ympärillä on musta kaareva nuoli, joka osoittaa vastapäivään. Robotin pohjasta lähtee sininen nuoli, jossa lukee Yaw, ja sen ympärillä on musta kaareva nuoli, joka osoittaa myötäpäivään. Robotin sivulta VEX-logon alapuolelta lähtee punainen nuoli, jossa lukee Pitch, ja sen ympärillä on musta kaareva nuoli, joka osoittaa vastapäivään.

Usage:
robot.inertial.get_turn_rate(axis)

Parametrit

Kuvaus

axis

Mikä suunta palautetaan:

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

Kalibrointi#

Kalibrointi auttaa inertia-anturia mittaamaan käännöksiä oikein mittaamalla ja kompensoimalla anturin kohinaa ja ajautumista kahden sekunnin aikana. Tänä aikana robotin on pysyttävä täysin paikallaan vakaalla alustalla. Liike kalibroinnin aikana voi tuottaa epätarkkoja tuloksia.

VEX-robotit yrittävät kalibroida itsensä automaattisesti käynnistyksen yhteydessä odottaen, kunnes ne eivät havaitse liikettä. Jos robottia kuitenkin kannetaan tai liikutetaan käynnistyksen aikana, anturin kalibrointi ei välttämättä onnistu tai kalibrointi voi olla virheellinen.

Jos projektisi on erittäin riippuvainen tarkasta suunnasta tai jos tarvitset johdonmukaisia ​​ja toistettavia käännöksiä, funktion calibrate kutsuminen koodin alussa voi auttaa. On hyvä käytäntö näyttää robotin näytöllä viesti, kuten “Kalibrointi…”, kalibroinnin aikana ja päivittää se sitten viestiksi “Kalibrointi valmis” muistuttamaan sinua (ja kaikkia muita robotin käyttäjiä) siitä, että robotin on pysyttävä liikkumattomana tänä aikana.

calibrate#

calibrate kalibroi gyroskoopin. Kalibrointi auttaa inertia-anturia mittaamaan käännökset oikein mittaamalla ja kompensoimalla anturin kohinaa ja ajautumista kahden sekunnin aikana. Tänä aikana robotin on pysyttävä täysin paikallaan vakaalla alustalla. Liike kalibroinnin aikana voi tuottaa epätarkkoja tuloksia.

VEX-robotit yrittävät kalibroida itsensä automaattisesti käynnistyksen yhteydessä odottaen, kunnes ne eivät havaitse liikettä. Jos robottia kuitenkin kannetaan tai liikutetaan käynnistyksen aikana, anturin kalibrointi ei välttämättä onnistu tai kalibrointi voi olla virheellinen.

Usage:
robot.inertial.calibrate()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

# 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 palauttaa totuusarvon, joka ilmaisee, kalibroiko inertia-anturi.

  • True — Inertia-anturi kalibroi.

  • False — Inertia-anturi ei kalibroi.

Usage:
robot.inertial.is_calibrating()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

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