смартдрайв#

Вступ#

Клас smartdrive контролює рух та повороти робота за допомогою двигунів, коліс та датчика. smartdrive може використовувати підключений гіроскопічний датчик або вбудований у Brain інерційний датчик.

A smartdrive використовує датчик, щоб допомогти роботу точно рухатися та повертатися. На початку кожного проекту трансмісія автоматично калібрує датчик. Під час калібрування тримайте робота нерухомим приблизно 2 секунди, щоб він міг правильно рухатися та повертатися.

Клас smartdrive базується на класі drivetrain. Він може використовувати ті ж функції керування та повороту, що й drivetrain, а також додає функції на основі датчиків, такі як turnToHeading та turnToRotation.

На цій сторінці як приклад назви смарт-приводу використовується myDrivetrain За потреби замініть її власною налаштованою назвою.

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

1 — Створює смарт-привід, використовуючи існуючі об’єкти motor_group для лівого та правого боків, а також гіроскопічний датчик або інерційний датчик.

smartdrive(
    motor_group     &l,
    motor_group     &r,
    gyro            &g,
    double          wheelTravel = 320,
    double          trackWidth  = 320,
    double          wheelBase   = 130,
    distanceUnits   unit = mm,
    double          externalGearRatio = 1.0 );

2 — Створює смарт-привід, використовуючи існуючі об’єкти motor для лівого та правого боків, а також гіроскопічний або інерційний датчик.

smartdrive(
    motor           &l,
    motor           &r,
    gyro            &g,
    double          wheelTravel = 320,
    double          trackWidth  = 320,
    double          wheelBase   = 130,
    distanceUnits   unit = mm,
    double          externalGearRatio = 1.0 );

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

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

~smartdrive();

Параметри#

Параметром датчика може бути gyro або inertial.

Параметр

Тип

Опис

&l / &r

motor_group / motor

Лівий та правий двигуни або групи двигунів. Обидва параметри повинні використовувати один і той самий тип: або два об’єкти motor_group , або два об’єкти motor.

&g

gyro / inertial

Гіроскопічний датчик або Інерціальний датчик, що використовується смарт-приводом.

wheelTravel

double

Довжина кола коліс трансмісії. Значення за замовчуванням — 320.

trackWidth

double

Відстань між лівим і правим колесами. Значення за замовчуванням — 320.

wheelBase

double

Відстань між передніми та задніми колесами. Значення за замовчуванням — 130.

unit

distanceUnits

Одиниця вимірювання для wheelTravel, trackWidthта wheelBase: mm (за замовчуванням) або inches.

externalGearRatio

double

Передавальне число, що використовується для регулювання відстані ходу, якщо використовуються шестерні. Значення за замовчуванням — 1.0.

Приклад#

/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */

// Create the left and right motor objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the Inertial Sensor object.
inertial myInertial = inertial(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myInertial, // Inertial Sensor
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

Функції-члени#

Клас smartdrive містить такі функції-члени:

Дії — Повернути робота за допомогою напрямку руху або обертання.

  • turnToHeading — Повертає робота обличчям до певного курсу від -359 до 359 градусів. Робот поверне найкоротшим шляхом для досягнення цільового курсу.

  • turnToRotation — Повертає робота на певний оберт.

  • calibrateDrivetrain — Калібрує датчик, налаштований за допомогою смарт-приводу.

Налаштування — Налаштуйте значення заголовка та повороту.

  • setHeading — Змінює поточний напрямок руху робота на новий.

  • setRotation — Змінює поточне обертання робота на нове обертання.

Значення — Перевірте напрямок та обертання.

  • heading — Повертає поточний напрямок руху робота від 0 до 359 градусів.

  • rotation — Повертає поточне обертання робота.

smartdrive також може використовувати успадковані функції-члени від drivetrain, такі як drive, driveFor, turn, turnFor, stop, isDoneта isMoving.

Перед викликом будь-яких функцій-членів smartdrive необхідно створити об’єкт smartdrive.

/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */

// Create the left and right motor objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the Inertial Sensor object.
inertial myInertial = inertial(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myInertial, // Inertial Sensor
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

turnToHeading#

Курс руху – це напрямок, у якому рухається робот, виміряний у градусах. turnToHeading повертає робота у певному напрямку від -359 до 359 градусів. Робот поверне у найкоротшому напрямку, щоб досягти цільового курсу.

Початковий курс робота становить 0 градусів.

Проєкт чекатиме, поки робот завершить обертання, перш ніж буде виконано наступний рядок коду.

Available Functions

1 — Повертає робота у вказаному напрямку, використовуючи поточну швидкість повороту.

bool turnToHeading(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — Повертає робота у вказаному напрямку з заданою швидкістю.

bool turnToHeading(
    double        angle,
    rotationUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

Параметр

Тип

Опис

angle

double

Напрямок, у якому має бути повернутий робот, у градусах. Це може бути від -359 до 359 при використанні deg або degrees.

units

rotationUnits

Одиниця вимірювання курсу: deg (градус), rev (оберти) або raw (необроблені одиниці). Один оберт дорівнює 360 градусам.

velocity

double

Швидкість повороту від 0% до 100% при використанні velocityUnits::pct, від 0 до 120 об/хв при використанні rpm, або від 0 до 720 градусів за секунду при використанні dps. Якщо швидкість не вказана, робот повертається з поточною швидкістю повороту.

units_v

velocityUnits

Одиниця вимірювання швидкості: velocityUnits::pct (відсоток), rpm (оберти за хвилину) або dps (градуси за секунду).

waitForCompletion

bool

true (за замовчуванням) змушує проект чекати, поки робот завершить обертання, перш ніж виконувати наступний рядок коду. false змушує наступний рядок коду виконуватися негайно.

Return Values

Повертає, чи досяг робот цільового напрямку, у вигляді логічного значення.

  • true — Робот досяг цільового курсу.

  • false — Робот не завершив хід, або функція повернула результат до завершення ходу, оскільки waitForCompletion було встановлено на false.

Notes
  • Запуск іншої функції руху трансмісії під час виконання функції turnToHeading перерве поточний рух.

  • turnToHeading використовує цільовий заголовок, тому isDone та isMoving можна використовувати разом з ним.

Examples
// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

turnToRotation#

turnToRotation повертає робота до певного обертання.

Обертання – це кут повороту робота, що вимірюється в градусах або обертах. На початку проекту значення повороту встановлюється на 0 градусів. Обертання також можна встановити за допомогою функції setRotation.

Значення обертання є абсолютними. Це означає, що напрямок повороту залежить від поточного обертання робота. Поворот праворуч збільшує обертання, а поворот ліворуч зменшує обертання.

Наприклад, якщо робот починає рух з кута 0 градусів, а потім повертається на 720 градусів, він двічі повернеться праворуч. Якщо потім повернути на 360 градусів, він один раз повернеться ліворуч, оскільки 360 менше за 720.

Проєкт чекатиме, поки робот завершить обертання, перш ніж буде виконано наступний рядок коду.

Available Functions

1 — Повертає робота до заданої швидкості обертання, використовуючи поточну швидкість обертання.

bool turnToRotation(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — Повертає робота до заданого обертання із заданою швидкістю.

bool turnToRotation(
    double        angle,
    rotationUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

Параметр

Тип

Опис

angle

double

Значення обертання, до якого повернеться робот.

units

rotationUnits

Одиниця вимірювання обертання: deg (градус), rev (оберти) або raw (необроблені одиниці). Один оберт дорівнює 360 градусам.

velocity

double

Швидкість повороту від 0% до 100% при використанні velocityUnits::pct, від 0 до 120 об/хв при використанні rpm, або від 0 до 720 градусів за секунду при використанні dps. Якщо швидкість не вказана, робот повертається з поточною швидкістю повороту.

units_v

velocityUnits

Одиниця вимірювання швидкості: velocityUnits::pct (відсоток), rpm (оберти за хвилину) або dps (градуси за секунду).

waitForCompletion

bool

true (за замовчуванням) змушує проект чекати, поки робот завершить обертання, перш ніж виконувати наступний рядок коду. false змушує наступний рядок коду виконуватися негайно.

Return Values

Повертає, чи досяг робот цільового обертання, у вигляді логічного значення.

  • true — Робот досяг цільового обертання.

  • false — Робот не завершив хід, або функція повернула результат до завершення ходу, оскільки waitForCompletion було встановлено на false.

Notes
  • Запуск іншої функції руху трансмісії під час роботи функції turnToRotation перерве поточний рух.

  • turnToRotation використовує цільове обертання, тому isDone та isMoving можна використовувати разом з ним.

Examples
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

calibrateDrivetrain#

calibrateDrivetrain калібрує підключений гіроскопічний датчик або вбудований інерційний датчик Brain, налаштований зі смарт-приводом.

Калібрування допомагає датчику правильно вимірювати рух. Під час калібрування тримайте робота нерухомим приблизно 2 секунди. Якщо робот рухається під час калібрування, датчик може неправильно вимірювати рух.

Проєкт чекатиме на завершення калібрування, перш ніж буде виконано наступний рядок коду.

Примітка: calibrateDrivetrain генерується автоматично VEXcode, коли трансмісія налаштована з гіроскопічним датчиком або інерціальним датчиком. Вона надається як частина вихідного коду проекту та не є частиною C++ API VEX IQ.

Available Functions
void calibrateDrivetrain();

Parameters

Ця функція не приймає жодних параметрів.

Return Values

Ця функція не повертає значення.

Notes
  • Робот автоматично калібрується на початку кожного проєкту, коли смарт-привід налаштовано у VEXcode.

  • Тримайте робота нерухомо приблизно 2 секунди під час калібрування.

Function Implementation

Нижче наведено приклад автоматично згенерованої реалізації calibrateDrivetrain , створеної VEXcode:

bool vexcode_initial_drivetrain_calibration_completed = false;
void calibrateDrivetrain() {
  wait(200, msec);
  Brain.Screen.print("Calibrating");
  Brain.Screen.newLine();
  Brain.Screen.print("Inertial");
  DrivetrainInertial.calibrate();
  while (DrivetrainInertial.isCalibrating()) {
    wait(25, msec);
  }
  vexcode_initial_drivetrain_calibration_completed = true;
  // Clears the screen and returns the cursor to row 1, column 1.
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
}

setHeading#

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

Наприклад, якщо робот повернувся обличчям праворуч, встановлення курсу на 0 градусів робить це положення обличчям праворуч новим 0 градусами. Потім робот може повертатися в інші позиції на основі цього нового курсу.

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

Parameters

Параметр

Тип

Опис

value

double

Значення курсу, яке потрібно встановити для робота. Воно може бути від -359 до 359 при використанні deg або degrees.

units

rotationUnits

Одиниця вимірювання курсу: deg (градус), rev (оберти) або raw (необроблені одиниці). Один оберт дорівнює 360 градусам.

Return Values

Ця функція не повертає значення.

Examples
// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

setRotation#

Обертання – це величина повороту робота, що вимірюється в градусах або обертах. На початку проекту значення повороту встановлюється на 0 градусів. setRotation змінює поточне обертання робота на нове значення.

Наприклад, якщо робот зробив два повних оберти праворуч, значення його обертання становитиме 720 градусів. Встановлення обертання на 0 градусів скине це обертання з 720 до 0 градусів. Потім робот зможе повертатися до обертань на основі цього нового значення.

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

Parameters

Параметр

Тип

Опис

value

double

Значення обертання, яке потрібно встановити для робота.

units

rotationUnits

Одиниця вимірювання обертання: deg (градус), rev (оберти) або raw (необроблені одиниці). Один оберт дорівнює 360 градусам.

Return Values

Ця функція не повертає значення.

Examples
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

heading#

Курс – це напрямок, у якому рухається робот, виміряний у градусах. heading повертає поточний курс робота від 0 до 359 градусів.

Початковий курс робота становить 0 градусів.

Available Functions
double heading( rotationUnits units = rotationUnits::deg );

Parameters

Параметр

Тип

Опис

units

rotationUnits

Необов’язково. Одиниця вимірювання для повернення напрямку: degrees, deg (за замовчуванням), revабо rawОдин оберт дорівнює 360 градусам.

Return Values

Повертає поточний напрямок руху робота у вигляді double у вибраному блоку вимірювання.

Examples
// Show heading before and after turning.
Brain.Screen.print("Before: %f", myDrivetrain.heading(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.heading(degrees));
myDrivetrain.stop();

rotation#

Обертання – це кут повороту робота, виміряний у градусах або обертах. На початку проекту значення повороту встановлюється на 0 градусів. rotation повертає поточне обертання робота.

Поворот праворуч збільшує обертання, а поворот ліворуч зменшує. Наприклад, два повних оберти праворуч повернуть обертання на 720 градусів.

Available Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

Параметр

Тип

Опис

units

rotationUnits

Необов’язково. Одиниця вимірювання для повернення обертання: degrees, deg (за замовчуванням), revабо rawОдин оберт дорівнює 360 градусам.

Return Values

Повертає поточне обертання робота у вигляді double у вибраній одиниці вимірювання.

Examples
// Show rotation before and after turning.
Brain.Screen.print("Before: %f", myDrivetrain.rotation(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.rotation(degrees));
myDrivetrain.stop();