Bezwładnościowy#
Wstęp#
Robot kodujący VEX AIM ma wbudowany czujnik bezwładnościowy. Czujnik ten mierzy ruch i skręt robota.
Czujnik bezwładnościowy wykorzystuje do tego celu dwie części. Żyroskop mierzy obroty, takie jak kierunek, obrót, odchylenie, przechylenie, pochylenie i prędkość skrętu robota. Akcelerometr mierzy zmiany ruchu, takie jak przyspieszenie, zwolnienie lub nagłe zatrzymanie podczas zderzenia.
Metody bezwładnościowe można stosować do śledzenia zakrętów, pomiaru przyspieszenia, wykrywania kolizji, resetowania wartości kierunku lub obrotu oraz kalibracji czujnika.
Poniżej znajduje się lista wszystkich metod:
Orientacja — uzyskaj i zresetuj sposób, w jaki robot jest skierowany, obraca się lub przechyla.
get_rotation— Zwraca, jak daleko obrócił się robot.get_heading— Zwraca kierunek, w którym zwrócony jest robot, od 0 do 359,99 stopnia.get_yaw— Zwraca kąt odchylenia robota.get_roll— Zwraca kąt obrotu robota.get_pitch— Zwraca kąt nachylenia robota.reset_rotation— Resetuje aktualny obrót robota do 0 stopni.reset_heading— Resetuje aktualny kierunek robota do 0 stopni.set_heading— Ustawia aktualny kierunek robota na nową wartość kierunku.
Wypadek — wykrywanie kolizji.
crashed— Rejestruje funkcję, która ma zostać uruchomiona po wykryciu awarii.set_crash_sensitivity— Ustawia czułość wykrywania awarii na uderzenia.
Ruch — pomiar przyspieszenia i prędkości skrętu.
get_acceleration— Zwraca szybkość, z jaką robot przyspiesza lub zwalnia na wybranej osi.get_turn_rate— Zwraca szybkość, z jaką robot obraca się wokół wybranej osi.
Kalibracja — Zarządzaj kalibracją czujnika.
calibrate— Kalibruje czujnik bezwładnościowy.is_calibrating— Zwraca informację, czy czujnik bezwładnościowy jest obecnie kalibrowany.
Orientacja#
get_rotation#
Obrót to wartość, o jaką robot się obrócił, mierzona w stopniach. W przeciwieństwie do kierunku, obrót może wzrosnąć powyżej 359,99 stopnia lub zmniejszyć się poniżej 0 stopni. Na początku projektu wartość obrotu jest ustawiona na 0 stopni. get_rotation zwraca aktualny obrót robota jako wartość zmiennoprzecinkową.
Skręt w prawo zwiększa obrót, a skręt w lewo zmniejsza. Na przykład, wykonanie dwóch pełnych obrotów w prawo spowoduje obrót o 720 stopni. Jeden pełny obrót w lewo od 0 stopni spowoduje obrót o -360 stopni.
Usage:
robot.inertial.get_rotation()
Parametry |
Opis |
|---|---|
Ta metoda nie ma żadnych parametrów. |
# 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#
Kierunek, w którym zwrócony jest robot, mierzony w stopniach od 0 do 359,99. get_heading zwraca aktualny kierunek robota jako wartość zmiennoprzecinkową.
Początkowy kurs wynosi 0 stopni. Jeśli robot obróci się o 359,99 stopnia, kurs powróci do 0 stopni.
Usage:
robot.inertial.get_heading()
Parametry |
Opis |
|---|---|
Ta metoda nie ma żadnych parametrów. |
# 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#
Odchylenie opisuje ruch robota w lewo lub prawo wokół jego osi pionowej. get_yaw zwraca kąt odchylenia robota w zakresie od -180,00 do 180,00 stopni jako wartość zmiennoprzecinkową.
Na poniższym rysunku strzałki pokazują kierunek dodatniego obrotu przy odchyleniu.
Usage:
robot.inertial.get_yaw()
Parametry |
Opis |
|---|---|
Ta metoda nie ma żadnych parametrów. |
# 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 opisuje przechylanie się robota na boki. get_roll zwraca kąt przechyłu robota w zakresie od -180,00 do 180,00 stopni jako wartość zmiennoprzecinkową.
Na poniższym rysunku strzałki pokazują kierunek dodatniego obrotu przy przechyle.
Usage:
robot.inertial.get_roll()
Parametry |
Opis |
|---|---|
Ta metoda nie ma żadnych parametrów. |
# 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 opisuje pochylenie robota do przodu lub do tyłu. get_pitch zwraca kąt nachylenia robota w zakresie od -90,00 do 90,00 stopni jako wartość zmiennoprzecinkową.
Na poniższym rysunku strzałki pokazują kierunek dodatniego obrotu dla kąta nachylenia.
Usage:
robot.inertial.get_pitch()
Parametry |
Opis |
|---|---|
Ta metoda nie ma żadnych parametrów. |
# 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 resetuje bieżący obrót robota do 0 stopni.
Po zastosowaniu tej metody robot śledzi przyszłe skręty od nowej wartości obrotu 0 stopni.
Usage:
robot.inertial.reset_rotation()
Parametry |
Opis |
|---|---|
Ta metoda nie ma żadnych parametrów. |
# 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 resetuje aktualny kierunek robota do 0 stopni.
Po zastosowaniu tej metody aktualny kierunek robota staje się nowym kursem 0 stopni.
Usage:
robot.inertial.reset_heading()
Parametry |
Opis |
|---|---|
Ta metoda nie ma żadnych parametrów. |
# 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#
Kierunek to kierunek, w którym zwrócony jest robot, mierzony w stopniach od 0 do 359,99. set_heading zmienia bieżący kierunek robota na nową wartość kierunku.
Na przykład, jeśli robot obrócił się w prawo, ustawienie kierunku na 0 stopni spowoduje, że ta pozycja skierowana w prawo stanie się nowym 0 stopniem. Wtedy robot może śledzić inne kierunki na podstawie tego nowego kierunku.
Usage:
robot.inertial.set_heading(heading)
Parametry |
Opis |
|---|---|
|
Wartość kierunku (w stopniach), którą należy ustawić dla robota. Może to być wartość z zakresu od 0 do 359,99. |
# Turn the robot to 90 degrees using its new heading
robot.inertial.set_heading(45)
robot.turn_to(90)
Rozbić się#
crashed#
crashed rejestruje funkcję, która ma zostać wywołana, gdy robot wykryje nagłe uderzenie lub kolizję.
Stosowanie:
robot.inertial.crashed(callback, arg)
Parametry |
Opis |
|---|---|
|
Funkcja, która została wcześniej zdefiniowana do wykonania po wykryciu kolizji. |
|
Opcjonalnie. Krotka zawierająca argumenty do przekazania do funkcji wywołania zwrotnego. Więcej informacji można znaleźć w Używanie funkcji z parametrami. |
# 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 dostosowuje, jak duże nagłe przyspieszenie jest potrzebne, aby robot wykrył zderzenie.
Usage:
robot.inertial.set_crash_sensitivity(sensitivity)
Parametry |
Opis |
|---|---|
|
Czułość na zderzenia:
|
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)
Ruch#
get_acceleration#
Przyspieszenie określa, jak szybko robot przyspiesza lub zwalnia. get_acceleration zwraca przyspieszenie robota na wybranej osi od -4,00 G do 4,00 G w postaci wartości zmiennoprzecinkowej.
G to jednostka miary przyspieszenia. 1 G to przyspieszenie ziemskie odczuwane w pozycji siedzącej.
Wartość może być dodatnia lub ujemna w zależności od kierunku przyspieszenia na wybranej osi. W systemie AIM opcje osi są nazwane zgodnie z kierunkami ruchu robota: FORWARD, RIGHTWARDi DOWNWARD.

Stosowanie:
robot.inertial.get_acceleration(type)
Parametry |
Opis |
|---|---|
|
Oś, na której mierzy się przyspieszenie:
|
# 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#
Szybkość obrotu określa prędkość, z jaką obraca się robot. get_turn_rate zwraca szybkość obrotu robota w stopniach na sekundę \(dps\) jako wartość zmiennoprzecinkową, od -1000,00 do 1000,00 dps.
Wartość może być dodatnia lub ujemna, w zależności od kierunku obrotu robota wokół wybranej osi. Na poniższym rysunku strzałkami pokazano kierunek dodatniego obrotu dla osi przechyłu, pochylenia i odchylenia.

Usage:
robot.inertial.get_turn_rate(axis)
Parametry |
Opis |
|---|---|
|
Którą orientację zwrócić:
|
# 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)
Kalibrowanie#
Kalibracja pomaga czujnikowi bezwładnościowemu prawidłowo mierzyć obroty poprzez pomiar i kompensację szumów czujnika oraz dryftu w ciągu 2 sekund. W tym czasie robot musi pozostać całkowicie nieruchomy na stabilnej powierzchni. Ruch podczas kalibracji może dawać niedokładne wyniki.
Roboty VEX próbują automatycznie kalibrować się po uruchomieniu, czekając, aż nie wykryją ruchu. Jeśli jednak robot jest przenoszony lub poruszany podczas uruchamiania, czujnik może nie skalibrować się prawidłowo lub uzyskać nieprawidłową kalibrację.
Jeśli Twój projekt w dużym stopniu opiera się na precyzyjnym kursie lub potrzebujesz spójnych i powtarzalnych zwrotów, wywołanie polecenia calibrate na początku kodu może pomóc. Dobrą praktyką jest wyświetlanie komunikatu typu „Kalibracja…” na ekranie robota podczas kalibracji, a następnie zaktualizowanie go do „Kalibracja zakończona”, aby przypomnieć Tobie (i wszystkim innym użytkownikom robota), że robot musi pozostać nieruchomy w tym czasie.
calibrate#
calibrate kalibruje żyroskop. Kalibracja pomaga czujnikowi bezwładnościowemu prawidłowo mierzyć obroty poprzez pomiar i kompensację szumów czujnika oraz dryftu w ciągu 2 sekund. W tym czasie robot musi pozostać całkowicie nieruchomy na stabilnej powierzchni. Ruch podczas kalibracji może dawać niedokładne wyniki.
Roboty VEX próbują automatycznie kalibrować się po uruchomieniu, czekając, aż nie wykryją ruchu. Jeśli jednak robot jest przenoszony lub poruszany podczas uruchamiania, czujnik może nie skalibrować się prawidłowo lub uzyskać nieprawidłową kalibrację.
Usage:
robot.inertial.calibrate()
Parametry |
Opis |
|---|---|
Ta metoda nie ma żadnych parametrów. |
# 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 zwraca wartość logiczną wskazującą, czy czujnik bezwładnościowy jest kalibrowany.
True— Czujnik bezwładnościowy jest kalibrowany.False— Czujnik bezwładnościowy nie kalibruje się.
Usage:
robot.inertial.is_calibrating()
Parametry |
Opis |
|---|---|
Ta metoda nie ma żadnych parametrów. |
# 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)