Инерционный#
Введение#
В роботе-программисте VEX AIM встроен инерциальный датчик. Этот датчик измеряет движение и повороты робота.
Инерциальный датчик использует для этого две части. Гироскоп измеряет повороты, такие как курс робота, вращение, рыскание, крен, тангаж и скорость поворота. Акселерометр измеряет изменения движения, такие как ускорение, замедление или внезапная остановка при столкновении.
Инерциальные методы можно использовать для отслеживания поворотов, измерения ускорения, обнаружения столкновений, сброса значений курса или вращения, а также калибровки датчика.
Ниже приведён список всех методов:
Ориентация — определение и изменение положения робота (поворот, поворот или наклон).
get_rotation— Возвращает, насколько повернулся робот.get_heading— Возвращает направление, в котором смотрит робот, от 0 до 359,99 градусов.get_yaw— Возвращает угол рыскания робота.get_roll— Возвращает угол крена робота.get_pitch— Возвращает угол наклона робота.reset_rotation— Сбрасывает текущее вращение робота до 0 градусов.reset_heading— Сбрасывает текущий курс робота до 0 градусов.set_heading— Устанавливает текущее направление робота на новое значение направления.
Crash — Обнаружение столкновений.
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 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 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 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)
Параметры |
Описание |
|---|---|
|
A function that is previously defined to execute when a collision is detected. |
|
Необязательно. Кортеж, содержащий аргументы для передачи в функцию обратного вызова. См. Использование функций с параметрами для получения дополнительной информации. |
# 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 get_turn_rate` возвращает скорость поворота робота в градусах в секунду (градусов в секунду) в виде числа с плавающей запятой, от -1000,00 до 1000,00 градусов в секунду.
Значение может быть положительным или отрицательным в зависимости от направления вращения робота вокруг выбранной оси. На изображении ниже стрелками показано направление положительного вращения для крена, тангажа и рыскания.

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)