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

Введение#

Класс inertial используется для управления и доступа к данным инерциального датчика EXP. EXP может использовать встроенный в Brain инерциальный датчик или внешний инерциальный датчик, подключенный к Smart Port.

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

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

inertial(
    int32_t  index,
    turnType dir = turnType::right );

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

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

~inertial();

Параметры#

Параметр

Тип

Описание

index

int32_t

Необязательно. Интеллектуальный порт, к которому подключен внешний инерциальный датчик, обозначается как PORTx, где x — номер порта (например, PORT1). Не указывайте этот параметр при использовании встроенного в Brain инерциального датчика.

dir

turnType

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

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

Примеры#

// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();

// Use an external Inertial Sensor connected to Port 1.
inertial Inertial1 = inertial(PORT1);

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

Класс инерции 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 using the Device Menu. Replace the values
as needed. */

// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();

heading#

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

Направление движения — это угол, в котором направлен датчик, измеряемый в градусах от 0 до 359,99. Если датчик поворачивает более чем на 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 градусов. В начале проекта значение вращения устанавливается на 0 градусов. Эта функция изменяет текущее значение вращения инерциального датчика на новое значение.

Например, если датчик совершил два полных оборота вправо, значение его поворота составит 720 градусов. Установка поворота на 0 градусов сбросит это значение с 720 до 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())

// Called 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()

/* vexcodeInit() is only required when using VEXcode.
Remove vexcodeInit() if compiling in VS Code. */
int main() {

  // Turn the robot by hand briefly
  // to change the robot's heading
  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#

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

Выбранная ось x, y или z соответствует одной из осей ориентации датчика.

Available Functions
double orientation(
  axisType      axis,
  rotationUnits units );

Parameters

Параметр

Тип

Описание

axis

axisType

Ось, для которой возвращается ориентация:

  • xaxis
  • yaxis
  • zaxis

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(xaxis, 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())

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

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

/* vexcodeInit() is only required when using VEXcode.
Remove vexcodeInit() if compiling in VS Code. */
int main() {

  // Firmly move the robot by hand briefly to simulate
  // a collision and call the onCollision function
  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