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.

Robot VEX AIM z niebieską strzałką skierowaną w dół od środka robota. Wokół niebieskiej strzałki znajduje się czarna, zakrzywiona strzałka skierowana zgodnie z ruchem wskazówek zegara, wskazująca dodatni kierunek odchylenia.

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.

Robot VEX AIM Coding z zieloną strzałką wystającą z przodu robota, w centrum czujnika AI Vision. Wokół zielonej strzałki czarna strzałka zakrzywia się przeciwnie do ruchu wskazówek zegara, wskazując dodatni kierunek obrotu.

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.

Robot VEX do kodowania AIM z czerwoną strzałką wystającą z boku robota pod logo VEX. Wokół czerwonej strzałki czarna strzałka zakrzywia się przeciwnie do ruchu wskazówek zegara, wskazując dodatni kierunek 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

heading

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

callback

Funkcja, która została wcześniej zdefiniowana do wykonania po wykryciu kolizji.

arg

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

sensitivity

Czułość na zderzenia:

  • HIGH — Najwyższa czułość; wykrywa słabsze uderzenia i wyzwalacze przy 1G.
  • NORMAL — Domyślna czułość; wykrywa umiarkowane uderzenia i wyzwalacze przy 1,5G.
  • LOW — Najmniejsza czułość; wykrywa silniejsze uderzenia i wyzwalacze przy 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)

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.

Robot VEX do programowania AIM ze strzałkami kierunkowymi wychodzącymi ze środka robota. Zielona strzałka oznaczona jako „do przodu” znajduje się z przodu robota, niebieska strzałka oznaczona jako „w dół” znajduje się u dołu robota, a czerwona strzałka oznaczona jako „w prawo” znajduje się z boku robota pod logo VEX.

Stosowanie:

robot.inertial.get_acceleration(type)

Parametry

Opis

type

Oś, na której mierzy się przyspieszenie:

  • DOWNWARD — Mierzy przyspieszenie w kierunku pionowym robota.
  • FORWARD — Mierzy przyspieszenie w kierunku przód-tył robota.
  • RIGHTWARD — Mierzy przyspieszenie w kierunku bocznym robota.

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

Robot VEX AIM Coding ze strzałkami kierunkowymi wychodzącymi ze środka robota. Zielona strzałka z napisem „roll” wychodzi z przodu robota, otoczona czarną, zakrzywioną strzałką skierowaną przeciwnie do ruchu wskazówek zegara. Niebieska strzałka z napisem „Yaw” wychodzi z dołu robota, otoczona czarną, zakrzywioną strzałką skierowaną zgodnie z ruchem wskazówek zegara. Czerwona strzałka z napisem „Pitch” wychodzi z boku robota pod logo VEX, otoczona czarną, zakrzywioną strzałką skierowaną przeciwnie do ruchu wskazówek zegara.

Usage:
robot.inertial.get_turn_rate(axis)

Parametry

Opis

axis

Którą orientację zwrócić:

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

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)