Инерциальный датчик#

Введение#

Инерциальный класс inertial используется для управления и доступа к данным, поступающим от встроенного инерциального датчика IQ (2-го поколения) Brain. Этот датчик измеряет движение и повороты Brain.

Инерциальный датчик использует для этого две части. Гироскоп измеряет повороты, такие как курс, вращение, угловую скорость и ориентацию. Акселерометр измеряет изменения движения, такие как ускорение или замедление вдоль осей x, y и z.

Конструкторы классов#

inertial(
  turnType dir = turnType::right );

Деструктор класса#

Уничтожает объект с инерцией inertial и освобождает связанные с ним ресурсы.

~inertial();

Параметры#

Параметр

Тип

Описание

dir

turnType

Необязательно. Направление, возвращающее положительные значения:

  • right (по умолчанию) — Повороты направо возвращают положительные значения.
  • left — Повороты налево возвращают положительные значения.

Примеры#

// Create the inertial instance
inertial myInertial = inertial(
    right);     // dir

Функции участников#

Класс инерции inertial включает следующие функции-члены:

  • heading — Возвращает направление, в котором направлен датчик.

  • rotation — Возвращает, насколько повернулся датчик.

  • setHeading — Устанавливает текущее направление датчика на новое значение направления.

  • setRotation — Устанавливает текущее вращение датчика на новое значение вращения.

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

  • resetHeading — Сбрасывает текущее направление датчика до 0 градусов.

  • resetRotation — Сбрасывает текущее вращение датчика до 0 градусов.

  • isCalibrating — Возвращает значение, указывающее, выполняется ли в данный момент калибровка инерциального датчика.

  • changed — Регистрирует функцию обратного вызова, которая запускается при изменении заголовка.

  • installed — Возвращает значение, указывающее, установлен ли инерциальный датчик.

  • acceleration — Возвращает, насколько быстро датчик ускоряется или замедляется по выбранной оси.

  • gyroRate — Возвращает скорость вращения датчика по выбранной оси.

  • orientation — Возвращает угол крена, тангажа или рыскания инерциального датчика.

  • collision — Регистрирует функцию обратного вызова, которая запускается при обнаружении столкновения.

  • setTurnType — Устанавливает, какое направление поворота возвращает положительные значения курса.

  • getTurnType — Возвращает, какое направление поворота приводит к положительным значениям.

Перед вызовом любых функций-членов inertial необходимо создать экземпляр inertial , как показано ниже:

/* This constructor is required when using VS Code.
Inertial Sensor configuration is generated automatically
in VEXcode with the IQ (2nd gen) Brain. Replace the values
as needed. */

// Create the inertial instance
inertial myInertial = inertial();

heading#

Направление движения — это то, в каком направлении направлен датчик, измеряемое в градусах от 0 до 359,99. Эта функция возвращает текущее направление движения датчика.

Начальный курс равен 0 градусам. Если датчик отклоняется более чем на 359,99 градуса, курс возвращается к 0 градусам.

Available Functions
double heading( rotationUnits units = degrees );

Parameters

Параметр

Тип

Описание

units

rotationUnits

Единица измерения заголовка:

  • deg / degrees (по умолчанию) — градусы
  • turns / rev — оборотов

Return Values

Возвращает значение типа double представляющее текущее направление движения датчика в указанных единицах.

Notes
  • Значение заголовка находится в диапазоне от 0 до 359,99 градусов. Используйте rotation, чтобы получить доступ к значению непрерывного вращения.

Examples
// Turn, then show the current heading
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.heading(degrees));

rotation#

Возвращает текущий угол поворота инерциального датчика.

Вращение показывает, насколько повернулся датчик. В отличие от курса, вращение может превышать 359,99 градусов или уменьшаться ниже 0 градусов. Например, два полных оборота вправо дают вращение на 720 градусов. Один полный оборот влево от 0 градусов дает вращение на -360 градусов.

Available Functions
double rotation( rotationUnits units = degrees );

Parameters

Параметр

Тип

Описание

units

rotationUnits

Единица измерения вращения:

  • deg / degrees (по умолчанию) — градусов
  • turns / rev — оборотов

Return Values

Возвращает значение типа double представляющее текущий поворот в указанных единицах.

Notes
  • Значение поворота является непрерывным и не переносится между 0 и 359,99 градусами. Используйте heading, чтобы получить доступ к перенесенному значению заголовка.

Examples
// Turn, then show the current rotation
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.rotation(degrees));

setHeading#

Направление движения — это то, в каком направлении направлен датчик, измеряемое в градусах от 0 до 359,99. Эта функция изменяет текущее направление движения инерциального датчика на новое значение.

Например, если датчик повернулся вправо, установка направления на 0 градусов делает это положение, обращенное вправо, новым значением 0 градусов. Затем датчик может отслеживать другие направления, основываясь на этом новом направлении.

Available Functions
void setHeading( double        value,
                 rotationUnits units );

Parameters

Параметр

Тип

Описание

value

double

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

units

rotationUnits

Единица измерения заголовка:

  • deg / degrees — градусов
  • turns / rev — оборотов

Return Values

Эта функция не возвращает значения.

Examples
// Turn the robot around
myInertial.setHeading(180, degrees);
Drivetrain.turnToHeading(0, degrees);

setRotation#

Устанавливает текущее значение угла поворота инерциального датчика на заданное значение.

Угол поворота показывает, насколько повернулся датчик. В отличие от курса, угол поворота может превышать 359,99 градусов или уменьшаться ниже 0 градусов.

Available Functions
void setRotation( double        value,
                  rotationUnits units );

Parameters

Параметр

Тип

Описание

value

double

Значение угла поворота в градусах, которое необходимо задать для датчика. Это может быть целое число или десятичная дробь.

units

rotationUnits

Единица вращения:

  • deg / degrees — градусов
  • turns / rev — оборотов

Return Values

Эта функция не возвращает значения.

Examples
// Turn the robot around
myInertial.setRotation(-180, degrees);
Drivetrain.turnToRotation(0, degrees);

calibrate#

Выполняет калибровку инерциального датчика.

Калибровка помогает датчику правильно измерять повороты. Во время калибровки датчик должен оставаться неподвижным. Если датчик будет двигаться во время калибровки, значения курса, вращения, скорости гироскопа и ориентации могут измеряться некорректно.

Available Functions
void calibrate( );

Parameters

Эта функция не принимает никаких параметров.

Return Values

Эта функция не возвращает значения.

Notes
  • Во время калибровки датчик должен оставаться неподвижным.

  • Используйте isCalibrating, чтобы определить, когда калибровка завершена.

resetHeading#

Сбрасывает текущее положение инерциального датчика до 0 градусов.

После использования этой функции текущее направление датчика становится новым направлением 0 градусов.

Available Functions
void resetHeading();

Parameters

Эта функция не принимает никаких параметров.

Return Values

Эта функция не возвращает значения.

resetRotation#

Сбрасывает текущий угол поворота инерциального датчика до 0 градусов.

После использования этой функции датчик отслеживает будущие повороты, начиная с нового значения поворота в 0 градусов.

Available Functions
void resetRotation();

Parameters

Эта функция не принимает никаких параметров.

Return Values

Эта функция не возвращает значения.

isCalibrating#

Возвращает значение, указывающее, выполняется ли в данный момент калибровка инерциального датчика.

Available Functions
bool isCalibrating();

Parameters

Эта функция не принимает никаких параметров.

Return Values

Возвращает логическое значение, указывающее, выполняется ли калибровка инерциального датчика:

  • true — The sensor is currently calibrating.
  • false — The sensor is not currently calibrating.

changed#

Регистрирует функцию обратного вызова, которая запускается при изменении значения направления движения инерциального датчика.

Available Functions
void changed( void (* callback)(void) );

Parameters

Параметр

Тип

Описание

callback

void (*)(void)

Указатель на функцию, которая будет вызываться при изменении значения заголовка. Функция не должна принимать параметров и возвращать void.

Return Values

Эта функция не возвращает значения.

Examples

Определите функцию обратного вызова (вне int main())

// Display the heading when the Inertial Sensor's heading value changes.
void onHeadingChanged() {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Heading: %.2f", myInertial.heading());
}

Зарегистрируйте функцию обратного вызова внутри int main()

int main() {
  // Run onHeadingChanged when the Inertial Sensor's heading value changes.
  myInertial.changed(onHeadingChanged);
}

installed#

Возвращает значение, указывающее, установлен и подключен инерциальный датчик.

Available Functions
bool installed();

Parameters

Эта функция не принимает никаких параметров.

Return Values

Возвращает логическое значение, указывающее, установлен ли и подключен инерциальный датчик:

  • true — The sensor is connected and responding.
  • false — The sensor is not connected or not detected.

acceleration#

Ускорение — это показатель того, насколько быстро датчик ускоряется или замедляется. Эта функция возвращает значение ускорения инерциального датчика по выбранной оси в диапазоне от -4,0 G до 4,0 G.

G — это единица измерения ускорения. 1 G — это примерно то ускорение, которое вы ощущаете от силы тяжести, сидя неподвижно. Значение может быть положительным или отрицательным в зависимости от направления ускорения по выбранной оси.

Available Functions
double acceleration( axisType axis );

Parameters

Параметр

Тип

Описание

axis

axisType

Ось измерения ускорения:

  • xaxis
  • yaxis
  • zaxis

Return Values

Возвращает значение типа double представляющее ускорение вдоль указанной оси в G (гравитационных единицах).

Notes
  • Значения ускорения приводятся в единицах G.

gyroRate#

Гироскопическая скорость — это скорость вращения инерциального датчика. Эта функция возвращает текущую скорость вращения инерциального датчика по выбранной оси.

Значение может быть положительным или отрицательным в зависимости от направления вращения датчика вокруг данной оси.

Available Functions
double gyroRate( axisType      axis,
                 velocityUnits units );

Parameters

Параметр

Тип

Описание

axis

axisType

Ось, с которой возвращается скорость гироскопа:

  • xaxis
  • yaxis
  • zaxis

units

velocityUnits

Единица измерения гирочастоты:

  • dps — градусов в секунду
  • rpm — оборотов в минуту

Return Values

Возвращает значение типа double представляющее текущую скорость вращения вдоль указанной оси в выбранных единицах измерения.

Examples
// Display the rate of change of rotation while turning in dps
Drivetrain.turn(right);
wait(1, seconds);

Brain.Screen.print(myInertial.gyroRate(zaxis, dps));

Drivetrain.stop();

orientation#

Ориентация — это текущий угол наклона инерциального датчика относительно выбранной оси вращения. Эта функция возвращает текущую ориентацию инерциального датчика для указанной оси.

Крен, тангаж и рыскание описывают различные способы наклона или поворота датчика.

Available Functions
double orientation(
  orientationType type,
  rotationUnits   units );

Parameters

Параметр

Тип

Описание

type

orientationType

Угол ориентации для возврата:

  • pitch
  • roll
  • yaw

units

rotationUnits

Единица измерения ориентации:

  • deg / degrees — градусов
  • turns / rev — оборотов

Return Values

Возвращает значение типа double представляющее выбранный угол ориентации в указанных единицах.

Examples
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1,1);
  // Show the Inertial Sensor's orientation value
  // for roll in degrees
  double orient = myInertial.orientation(roll, deg);
  Brain.Screen.print("%f", orient);
  wait(0.1, seconds);
}

collision#

Регистрирует функцию обратного вызова, которая запускается, когда инерциальный датчик обнаруживает внезапный удар или столкновение.

Available Functions
void collision( void (* callback)(axisType, double, double, double) );

Parameters

Параметр

Тип

Описание

callback

void (*)(axisType, double, double, double)

Указатель на функцию, которая будет вызвана при обнаружении столкновения. Функция обратного вызова должна принимать следующие параметры:

  • axisType — Ось, на которой было обнаружено столкновение.
  • Значения ускорения в момент удара, в порядке:
    • double — Ускорение вдоль оси x (в G).
    • double — Ускорение вдоль оси y (в G).
    • double — Ускорение вдоль оси z (в G).
Функция должна возвращать void.

Return Values

Эта функция не возвращает значения.

Examples

Определите функцию обратного вызова (вне int main())

// Display a message when the Inertial Sensor detects a collision.
void onCollision(axisType axis, double x, double y, double z) {
  Brain.Screen.print("Collision detected!");
}

Зарегистрируйте функцию обратного вызова внутри int main()

int main() {
  // Run onCollision when the Inertial Sensor detects a collision.
  myInertial.collision(onCollision);
}

setTurnType#

Множества, в которых направление поворота возвращается к положительным значениям.

Available Functions
void setTurnType( turnType dir );

Parameters

Параметр

Тип

Описание

dir

turnType

Направление, возвращающее положительные значения:

  • right
  • left

Return Values

Эта функция не возвращает значения.

Notes

getTurnType#

Возвращает значения, направление поворота которых дает положительные результаты.

Available Functions
turnType getTurnType();

Parameters

Эта функция не принимает никаких параметров.

Return Values

Возвращает значение turnType , указывающее, какое направление приводит к положительным значениям:

  • right — Clockwise rotation returns positive values.
  • left — Counterclockwise rotation returns positive values.
Notes