Інерційний датчик#

Вступ#

Клас inertial використовується для керування та доступу до даних з інерційного датчика V5, підключеного до смарт-порту.

Інерційний датчик V5 вимірює рух і повороти робота. Гіроскоп вимірює повороти, такі як напрямок, обертання, швидкість гіроскопа та орієнтація. Акселерометр вимірює зміни в русі, такі як прискорення або уповільнення вздовж осей x, y та z.

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

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

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

Знищує інерційний об’єкт inertial та звільняє пов’язані з ним ресурси.

~inertial();

Параметри#

Параметр

Тип

Опис

index

int32_t

Розумний порт, до якого підключено інерціальний датчик, записується як PORTx, де x – номер порту (наприклад, PORT1).

dir

turnType

Необов’язково. Напрямок, що повертає позитивні значення:

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

Приклади#

// Create an inertial instance for the V5 Inertial Sensor
inertial myInertial = inertial(
    PORT1,      // Smart Port 1
    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 using the Device Menu. Replace the values
as needed. */

// Create an inertial instance for the V5 Inertial Sensor connected to Port 1.
inertial myInertial = inertial(PORT1);

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 градусів. На початку проекту значення обертання встановлюється на 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())

// 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#

Орієнтація – це поточний кут інерційного датчика на вибраній осі. Ця функція повертає поточну орієнтацію інерційного датчика для вказаної осі.

Обрана вісь 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())

// 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