Инерциальный датчик#
Введение#
Класс inertial используется для управления и доступа к данным инерциального датчика EXP. EXP может использовать встроенный в Brain инерциальный датчик или внешний инерциальный датчик, подключенный к Smart Port.
Инерциальный датчик измеряет движение и повороты робота. Гироскоп измеряет повороты, такие как направление, вращение, угловая частота и ориентация. Акселерометр измеряет изменения движения, такие как ускорение или замедление вдоль осей x, y и z.
Конструкторы классов#
inertial(
int32_t index,
turnType dir = turnType::right );
Деструктор класса#
Уничтожает объект с инерцией inertial и освобождает связанные с ним ресурсы.
~inertial();
Параметры#
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Необязательно. Интеллектуальный порт, к которому подключен внешний инерциальный датчик, обозначается как |
|
|
Необязательно. Направление, возвращающее положительные значения:
|
Примеры#
// 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 Functionsdouble heading( rotationUnits units = degrees );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Единица измерения заголовка:
|
Возвращает значение типа double представляющее текущее направление движения датчика в указанных единицах.
Значение заголовка находится в диапазоне от 0 до 359,99 градусов. Используйте
rotation, чтобы получить доступ к значению непрерывного вращения.
// 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 Functionsdouble rotation( rotationUnits units = degrees );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Единица измерения вращения:
|
Возвращает значение типа double представляющее текущий поворот в указанных единицах.
Значение поворота является непрерывным и не переносится между 0 и 359,99 градусами. Используйте
heading, чтобы получить доступ к перенесенному значению заголовка.
// 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 Functionsvoid setHeading( double value, rotationUnits units );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Значение направления в градусах, которое необходимо задать для датчика. Это может быть значение от 0 до 359,99. |
|
|
Единица измерения заголовка:
|
Эта функция не возвращает значения.
Examples// Turn the robot around
myInertial.setHeading(180, degrees);
Drivetrain.turnToHeading(0, degrees);
setRotation#
Вращение — это угол поворота датчика, измеряемый в градусах. В отличие от курса, вращение может превышать 359,99 градусов или уменьшаться ниже 0 градусов. В начале проекта значение вращения устанавливается на 0 градусов. Эта функция изменяет текущее значение вращения инерциального датчика на новое значение.
Например, если датчик совершил два полных оборота вправо, значение его поворота составит 720 градусов. Установка поворота на 0 градусов сбросит это значение с 720 до 0 градусов. После этого датчик сможет отслеживать повороты на основе этого нового значения.
Available Functionsvoid setRotation( double value, rotationUnits units );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Значение угла поворота в градусах, которое необходимо задать для датчика. Это может быть целое число или десятичная дробь. |
|
|
Единица вращения:
|
Эта функция не возвращает значения.
Examples// Turn the robot around
myInertial.setRotation(-180, degrees);
Drivetrain.turnToRotation(0, degrees);
calibrate#
Выполняет калибровку инерциального датчика.
Калибровка помогает датчику правильно измерять повороты. Во время калибровки датчик должен оставаться неподвижным. Если датчик будет двигаться во время калибровки, значения курса, вращения, скорости гироскопа и ориентации могут измеряться некорректно.
Available Functionsvoid calibrate( );
Эта функция не принимает никаких параметров.
Return ValuesЭта функция не возвращает значения.
NotesВо время калибровки датчик должен оставаться неподвижным.
Используйте
isCalibrating, чтобы определить, когда калибровка завершена.
resetHeading#
Сбрасывает текущее положение инерциального датчика до 0 градусов.
После использования этой функции текущее направление датчика становится новым направлением 0 градусов.
Available Functionsvoid resetHeading();
Эта функция не принимает никаких параметров.
Return ValuesЭта функция не возвращает значения.
resetRotation#
Сбрасывает текущий угол поворота инерциального датчика до 0 градусов.
После использования этой функции датчик отслеживает будущие повороты, начиная с нового значения поворота в 0 градусов.
Available Functionsvoid resetRotation();
Эта функция не принимает никаких параметров.
Return ValuesЭта функция не возвращает значения.
isCalibrating#
Возвращает значение, указывающее, выполняется ли в данный момент калибровка инерциального датчика.
Available Functionsbool isCalibrating();
Эта функция не принимает никаких параметров.
Return ValuesВозвращает логическое значение, указывающее, выполняется ли калибровка инерциального датчика:
-
true— The sensor is currently calibrating. -
false— The sensor is not currently calibrating.
changed#
Регистрирует функцию обратного вызова, которая запускается при изменении значения направления движения инерциального датчика.
Available Functionsvoid changed( void (* callback)(void) );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Указатель на функцию, которая будет вызываться при изменении значения заголовка. Функция не должна принимать параметров и возвращать |
Эта функция не возвращает значения.
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 Functionsbool installed();
Эта функция не принимает никаких параметров.
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 — это примерно то ускорение, которое вы ощущаете от силы тяжести, сидя неподвижно. Значение может быть положительным или отрицательным в зависимости от направления ускорения по выбранной оси.
double acceleration( axisType axis );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Ось измерения ускорения:
|
Возвращает значение типа double представляющее ускорение вдоль указанной оси в G (гравитационных единицах).
Значения ускорения приводятся в единицах
G.
gyroRate#
Гироскопическая скорость — это скорость вращения инерциального датчика. Эта функция возвращает текущую скорость вращения инерциального датчика по выбранной оси.
Значение может быть положительным или отрицательным в зависимости от направления вращения датчика вокруг данной оси.
Available Functionsdouble gyroRate( axisType axis, velocityUnits units );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Ось, с которой возвращается скорость гироскопа:
|
|
|
Единица измерения гирочастоты:
|
Возвращает значение типа double представляющее текущую скорость вращения вдоль указанной оси в выбранных единицах измерения.
// 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 Functionsdouble orientation(
axisType axis,
rotationUnits units );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Ось, для которой возвращается ориентация:
|
|
|
Единица вращения:
|
Возвращает значение типа double представляющее выбранный угол ориентации в указанных единицах.
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 Functionsvoid collision( void (* callback)(axisType, double, double, double) );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Указатель на функцию, которая будет вызвана при обнаружении столкновения. Функция обратного вызова должна принимать следующие параметры:
void. |
Эта функция не возвращает значения.
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 Functionsvoid setTurnType( turnType dir );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Направление, возвращающее положительные значения:
|
Эта функция не возвращает значения.
NotesЭтот параметр влияет на то, как
headingиrotationотображают положительные и отрицательные значения.Вызов этой функции переопределяет значение
dirуказанное при создании инерциального объектаinertial.
getTurnType#
Возвращает значения, направление поворота которых дает положительные результаты.
Available FunctionsturnType getTurnType();
Эта функция не принимает никаких параметров.
Return ValuesВозвращает значение turnType , указывающее, какое направление приводит к положительным значениям:
-
right— Clockwise rotation returns positive values. -
left— Counterclockwise rotation returns positive values.
Это значение устанавливается во время создания инерциального объекта
inertialили путем вызоваsetTurnType.