Інерційний#

Вступ#

Робот-кодувальник VEX AIM має вбудований інерційний датчик. Цей датчик вимірює, як робот рухається та повертається.

Інерційний датчик використовує для цього дві частини. Гіроскоп вимірює повороти, такі як напрямок руху робота, обертання, рисьхання, крен, тангаж та швидкість повороту. Акселерометр вимірює зміни в русі, такі як прискорення, уповільнення або раптова зупинка під час аварії.

Інерційні методи можна використовувати для відстеження поворотів, вимірювання прискорення, виявлення аварій, скидання значень курсу або обертання та калібрування датчика.

Нижче наведено список усіх методів:

Орієнтація — Отримання та скидання орієнтації, повороту або нахилу робота.

  • get_rotation — Повертає, наскільки далеко повернувся робот.

  • get_heading — Повертає напрямок, у якому обертається робот, від 0 до 359,99 градусів.

  • get_yaw — Повертає кут риски робота.

  • get_roll — Повертає кут крену робота.

  • get_pitch — Повертає кут нахилу робота.

  • reset_rotation — Скидає поточне обертання робота до 0 градусів.

  • reset_heading — Скидає поточний напрямок руху робота до 0 градусів.

  • set_heading — Встановлює поточний напрямок руху робота на нове значення.

Зіткнення — Виявлення зіткнень.

  • crashed — Реєструє функцію для запуску у разі виявлення збою.

  • set_crash_sensitivity — Встановлює чутливість виявлення зіткнень до ударів.

Рух — Вимірювання прискорення та швидкості повороту.

  • get_acceleration — Повертає, наскільки швидко робот прискорюється або сповільнюється на вибраній осі.

  • get_turn_rate — Повертає швидкість обертання робота навколо вибраної осі.

Калібрування — керування калібруванням датчика.

  • calibrate — Калібрує інерціальний датчик.

  • is_calibrating — Повертає, чи калібрується інерційний датчик.

Орієнтація#

get_rotation#

Обертання – це кут повороту робота, виміряний у градусах. На відміну від напрямку, обертання може збільшуватися понад 359,99 градусів або зменшуватися нижче 0 градусів. На початку проекту значення обертання встановлюється на 0 градусів. get_rotation повертає поточне обертання робота у вигляді числа з плаваючою комою.

Поворот праворуч збільшує обертання, а поворот ліворуч зменшує. Наприклад, два повні обертки праворуч повернуть обертання на 720 градусів. Поворот на один повний оберт ліворуч від 0 градусів поверне обертання на -360 градусів.

Usage:
robot.inertial.get_rotation()

Параметри

Опис

Цей метод не має параметрів.

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

Курс руху — це напрямок, у якому рухається робот, виміряний у градусах від 0 до 359,99. get_heading повертає поточний курс руху робота у вигляді числа з плаваючою комою.

Початковий курс становить 0 градусів. Якщо робот повертається далі за 359,99 градусів, курс повертається до 0 градусів.

Usage:
robot.inertial.get_heading()

Параметри

Опис

Цей метод не має параметрів.

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

Риськування описує поворот робота ліворуч або праворуч навколо своєї вертикальної осі. get_yaw повертає кут риськування робота в діапазоні від -180,00 до 180,00 градусів у вигляді числа з плаваючою комою.

На зображенні нижче стрілки показують напрямок позитивного обертання для рисьблення.

Робот-кодувальник VEX AIM із синьою стрілкою, що вказує вниз від центру робота. Навколо синьої стрілки чорна вигнута стрілка вказує за годинниковою стрілкою, що вказує на позитивний напрямок рискання.

Usage:
robot.inertial.get_yaw()

Параметри

Опис

Цей метод не має параметрів.

# 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 описує нахил робота з боку в бік. get_roll повертає кут крену робота в діапазоні від -180,00 до 180,00 градусів у вигляді числа з плаваючою комою.

На зображенні нижче стрілки показують напрямок позитивного обертання для крену.

Робот-кодувальник VEX AIM із зеленою стрілкою, що виступає з передньої частини робота, в центрі датчика AI Vision. Навколо зеленої стрілки чорна стрілка вигинається проти годинникової стрілки, що вказує на позитивний напрямок крену.

Usage:
robot.inertial.get_roll()

Параметри

Опис

Цей метод не має параметрів.

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

Кут нахилу описує нахил робота вперед або назад. get_pitch повертає кут нахилу робота в діапазоні від -90,00 до 90,00 градусів у вигляді числа з плаваючою комою.

На зображенні нижче стрілки показують напрямок позитивного обертання для тангажу.

Робот-кодер VEX AIM з червоною стрілкою, що виступає збоку робота під логотипом VEX. Навколо червоної стрілки чорна стрілка вигинається проти годинникової стрілки, що вказує на позитивний напрямок висоти тону.

Usage:
robot.inertial.get_pitch()

Параметри

Опис

Цей метод не має параметрів.

# 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 скидає поточне обертання робота до 0 градусів.

Після використання цього методу робот відстежує майбутні повороти, виходячи з нового значення повороту 0 градусів.

Usage:
robot.inertial.reset_rotation()

Параметри

Опис

Цей метод не має параметрів.

# 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 скидає поточний напрямок руху робота до 0 градусів.

Після використання цього методу поточний напрямок руху робота стає новим курсом 0 градусів.

Usage:
robot.inertial.reset_heading()

Параметри

Опис

Цей метод не має параметрів.

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

Курс руху — це напрямок, у якому рухається робот, що вимірюється в градусах від 0 до 359,99. set_heading змінює поточний курс руху робота на нове значення курсу.

Наприклад, якщо робот повернувся обличчям праворуч, встановлення курсу на 0 градусів робить це положення праворуч новим 0 градусами. Тоді робот може відстежувати інші курси на основі цього нового напрямку.

Usage:
robot.inertial.set_heading(heading)

Параметри

Опис

heading

Значення курсу в градусах, яке потрібно встановити для робота. Це може бути значення від 0 до 359,99.

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

Аварія#

crashed#

crashed реєструє функцію, яка викликається, коли робот виявляє раптовий удар або зіткнення.

Використання:

robot.inertial.crashed(callback, arg)

Параметри

Опис

callback

Функція function, яку попередньо визначено для виконання у разі виявлення колізії.

arg

Необов’язково. Кортеж, що містить аргументи для передачі функції зворотного виклику. Див. Використання функцій з параметрами для отримання додаткової інформації.

# 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 налаштовує, наскільки сильним є раптове прискорення, необхідне для виявлення зіткнення роботом.

Usage:
robot.inertial.set_crash_sensitivity(sensitivity)

Параметри

Опис

sensitivity

Чутливість до зіткнення:

  • HIGH — Найбільш чутлива; виявляє менші удари та спрацьовує при 1G.
  • NORMAL — Чутливість за замовчуванням; виявляє помірні удари та спрацьовує при 1,5G.
  • LOW — Найменш чутлива; виявляє сильніші удари та спрацьовує при 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)

Рух#

get_acceleration#

Прискорення – це швидкість прискорення або сповільнення робота. get_acceleration повертає прискорення робота на вибраній осі, від -4.00 G до 4.00 G, у вигляді числа з плаваючою комою.

G — це одиниця вимірювання прискорення. 1 G — це прискорення, яке ви відчуваєте від сили тяжіння, сидячи нерухомо.

Значення може бути додатним або від’ємним залежно від напрямку прискорення на вибраній осі. В AIM опції осей називаються відповідно до напрямків руху робота: FORWARD, RIGHTWARDта DOWNWARD.

Робот-кодер VEX AIM зі стрілками напрямку, що тягнуться від центру робота. Зелена стрілка з позначкою «вперед» тягнеться від передньої частини робота, синя стрілка з позначкою «вниз» тягнеться від нижньої частини робота, а червона стрілка з позначкою «праворуч» тягнеться від бокової частини робота під логотипом VEX.

Використання:

robot.inertial.get_acceleration(type)

Параметри

Опис

type

Вісь для вимірювання прискорення:

  • DOWNWARD — Вимірює прискорення вздовж вертикального напрямку робота.
  • FORWARD — Вимірює прискорення вздовж напрямку робота спереду назад.
  • RIGHTWARD — Вимірює прискорення вздовж напрямку робота з боку в бік.

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

Швидкість повороту – це швидкість обертання робота. get_turn_rate повертає швидкість повороту робота в градусах за секунду \(dps\) як число з плаваючою комою, від -1000.00 до 1000.00 dps.

Значення може бути додатним або від’ємним залежно від напрямку обертання робота навколо вибраної осі. На зображенні нижче стрілки показують напрямок позитивного обертання для крену, тангажу та рискування.

Робот-кодер VEX AIM зі стрілками напрямку, що тягнуться від центру робота. Зелена стрілка з позначкою «кочення» тягнеться від передньої частини робота, а чорна вигнута стрілка вказує проти годинникової стрілки навколо неї. Синя стрілка з позначкою «поворот» тягнеться від нижньої частини робота, а чорна вигнута стрілка вказує за годинниковою стрілкою навколо неї. А червона стрілка з позначкою «нахил» тягнеться від бокової частини робота під логотипом VEX, а чорна вигнута стрілка вказує проти годинникової стрілки навколо неї.

Usage:
robot.inertial.get_turn_rate(axis)

Параметри

Опис

axis

Яку орієнтацію повернути:

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

Калібрування#

Калібрування допомагає інерційному датчику правильно вимірювати повороти, вимірюючи та компенсуючи шум датчика та його дрейф протягом 2-секундного періоду. Протягом цього часу робот повинен залишатися повністю нерухомим на стійкій поверхні. Рух під час калібрування може призвести до неточних результатів.

Роботи VEX намагаються автоматично калібрувати себе після запуску, чекаючи, поки не виявлять жодного руху. Однак, якщо робота переносять або переміщують під час запуску, датчик може не відкалібруватися належним чином або призвести до неправильного калібрування.

Якщо ваш проект значною мірою залежить від точного курсу, або якщо вам потрібні послідовні та повторювані повороти, виклик calibrate на початку вашого коду може допомогти. Рекомендується відображати повідомлення типу «Калібрування…» на екрані робота під час калібрування, а потім оновлювати його на «Калібрування завершено», щоб нагадати вам (і всім іншим, хто використовує робота), що робот повинен залишатися нерухомим протягом цього періоду.

calibrate#

calibrate калібрує гіроскоп. Калібрування допомагає інерційному датчику правильно вимірювати повороти, вимірюючи та компенсуючи шум датчика та дрейф протягом 2-секундного періоду. Протягом цього часу робот повинен залишатися повністю нерухомим на стійкій поверхні. Рух під час калібрування може призвести до неточних результатів.

Роботи VEX намагаються автоматично калібрувати себе після запуску, чекаючи, поки не виявлять жодного руху. Однак, якщо робота переносять або переміщують під час запуску, датчик може не відкалібруватися належним чином або призвести до неправильного калібрування.

Usage:
robot.inertial.calibrate()

Параметри

Опис

Цей метод не має параметрів.

# 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 повертає логічне значення, яке вказує, чи калібрується інерціальний датчик.

  • True — Інерційний датчик калібрується.

  • False — Інерційний датчик не калібрується.

Usage:
robot.inertial.is_calibrating()

Параметри

Опис

Цей метод не має параметрів.

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