Інерційний#
Вступ#
Робот-кодувальник 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 градусів у вигляді числа з плаваючою комою.
На зображенні нижче стрілки показують напрямок позитивного обертання для рисьблення.
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 градусів у вигляді числа з плаваючою комою.
На зображенні нижче стрілки показують напрямок позитивного обертання для крену.
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 градусів у вигляді числа з плаваючою комою.
На зображенні нижче стрілки показують напрямок позитивного обертання для тангажу.
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)
Параметри |
Опис |
|---|---|
|
Значення курсу в градусах, яке потрібно встановити для робота. Це може бути значення від 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)
Параметри |
Опис |
|---|---|
|
Функція function, яку попередньо визначено для виконання у разі виявлення колізії. |
|
Необов’язково. Кортеж, що містить аргументи для передачі функції зворотного виклику. Див. Використання функцій з параметрами для отримання додаткової інформації. |
# 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)
Параметри |
Опис |
|---|---|
|
Чутливість до зіткнення:
|
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.

Використання:
robot.inertial.get_acceleration(type)
Параметри |
Опис |
|---|---|
|
Вісь для вимірювання прискорення:
|
# 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.
Значення може бути додатним або від’ємним залежно від напрямку обертання робота навколо вибраної осі. На зображенні нижче стрілки показують напрямок позитивного обертання для крену, тангажу та рискування.

Usage:
robot.inertial.get_turn_rate(axis)
Параметри |
Опис |
|---|---|
|
Яку орієнтацію повернути:
|
# 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)