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.
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.
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.
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 |
|---|---|
|
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 |
|---|---|
|
Funktio, joka on aiemmin määritelty suoritettavaksi törmäyksen havaittaessa. |
|
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 |
|---|---|
|
Törmäysherkkyys:
|
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.

Käyttö:
robot.inertial.get_acceleration(type)
Parametrit |
Kuvaus |
|---|---|
|
Kiihtyvyyden mittausakseli:
|
# 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.

Usage:
robot.inertial.get_turn_rate(axis)
Parametrit |
Kuvaus |
|---|---|
|
Mikä suunta palautetaan:
|
# 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)