смартдрайв#
Вступ#
Клас smartdrive контролює рух та повороти робота за допомогою двигунів, коліс та датчика. smartdrive може використовувати Інерційний датчик або Гіроскопічний датчик для відстеження напрямку та обертання.
A smartdrive використовує датчик, щоб допомогти роботу точно рухатися та повертатися. На початку кожного проекту трансмісія автоматично калібрує датчик. Під час калібрування тримайте робота нерухомим приблизно 2 секунди, щоб він міг правильно рухатися та повертатися.
Клас smartdrive базується на класі drivetrain. Він може використовувати ті ж функції керування та повороту, що й drivetrain, а також додає функції на основі датчиків, такі як turnToHeading та turnToRotation.
Конструктори класів#
1 — Створює смарт-привід, використовуючи існуючі об’єкти
motor_groupдля лівого (&l) та правого (&r) боків, а також інерційний датчик або гіроскоп.smartdrive( motor_group &l, motor_group &r, inertial &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
2 — Створює смарт-привід, використовуючи існуючі об’єкти
motorдля лівого (&l) та правого (&r) боків, а також інерційний датчик або гіроскоп.smartdrive( motor &l, motor &r, inertial &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
Деструктор класів#
Знищує об’єкт smartdrive та звільняє пов’язані з ним ресурси.
~smartdrive();
Параметри#
Параметром датчика може бути інерціальний об’єкт inertial або gyro.
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Посилання на існуючі екземпляри |
|
|
Посилання на існуючий екземпляр гіроскопа |
|
|
Довжина кола коліс трансмісії. Значення за замовчуванням — |
|
|
Відстань між лівим і правим колесами. Значення за замовчуванням — |
|
|
Відстань між передніми та задніми колесами. Значення за замовчуванням — |
|
|
Одиниця вимірювання для |
|
|
Передавальне число, що використовується для регулювання відстані ходу, якщо використовуються шестерні. Значення за замовчуванням — |
Приклад#
/* 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 instances
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the inertial instance
inertial myInertial = inertial(PORT3);
// Create the smartdrive instance
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor object
rightMotor, // right motor object
myInertial, // inertial object
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 instances
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the inertial instance
inertial myInertial = inertial(PORT3);
// Create the smartdrive instance
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor object
rightMotor, // right motor object
myInertial, // inertial object
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
turnToHeading#
Курс руху – це напрямок, у якому рухається робот, виміряний у градусах. turnToHeading повертає робота у певному напрямку від -359 до 359 градусів. Робот поверне у найкоротшому напрямку, щоб досягти цільового курсу.
Початковий курс робота становить 0 градусів.
Проєкт чекатиме, поки робот завершить обертання, перш ніж буде виконано наступний рядок коду.
Available Functions1 — Повертає трансмісію у вказаному напрямку, використовуючи поточну налаштовану швидкість повороту.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Повертає трансмісію у вказаному напрямку із заданою швидкістю.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Напрямок, у якому має бути повернутий робот, у градусах. Це може бути від -359 до 359 при використанні |
|
|
Одиниця вимірювання обертання: |
|
|
Швидкість повороту від 0% до 100% при використанні |
|
|
Одиниця вимірювання швидкості: |
|
|
|
Повертає, чи досяг робот цільового напрямку, у вигляді логічного значення.
true— Робот досяг цільового курсу.false— Робот не завершив хід, або функція повернула результат до завершення ходу, оскількиwaitForCompletionбуло встановлено наfalse.
Виконання іншої функції руху трансмісії (наприклад,
turnабоdrive) під час виконанняturnToHeadingперерве поточний рух.Оскільки
turnToHeadingбазується на цілі (використовує параметр кутаangle), такі функції, якisDoneтаisMoving, працюють зturnToHeading.
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation повертає робота до певного обертання.
Обертання – це кут повороту робота, що вимірюється в градусах або обертах. На початку проекту значення повороту встановлюється на 0 градусів. Обертання також можна встановити за допомогою функції setRotation.
Значення обертання є абсолютними. Це означає, що напрямок повороту залежить від поточного обертання робота. Поворот праворуч збільшує обертання, а поворот ліворуч зменшує обертання.
Наприклад, якщо робот починає рух з кута 0 градусів, а потім повертається на 720 градусів, він двічі повернеться праворуч. Якщо потім повернути на 360 градусів, він один раз повернеться ліворуч, оскільки 360 менше за 720.
Проєкт чекатиме, поки робот завершить обертання, перш ніж буде виконано наступний рядок коду.
Available Functions1 — Повертає трансмісію на задану швидкість обертання, використовуючи поточну налаштовану швидкість повороту.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Повертає трансмісію до заданої швидкості обертання.
bool turnToRotation( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Значення обертання, до якого повернеться робот. |
|
|
Одиниця вимірювання обертання: |
|
|
Швидкість повороту від 0% до 100% при використанні |
|
|
Одиниця вимірювання швидкості: |
|
|
|
Повертає, чи досяг робот цільового обертання, у вигляді логічного значення.
true— Робот досяг цільового обертання.false— Робот не завершив хід, або функція повернула результат до завершення ходу, оскількиwaitForCompletionбуло встановлено наfalse.
Виконання іншої функції руху трансмісії (наприклад,
turnабоdrive) під час виконанняturnToRotationперерве поточний рух.Оскільки
turnToRotationбазується на цілі (використовує параметр кутаangle), такі функції, якisDoneтаisMoving, працюють зturnToRotation.
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain калібрує інерційний датчик або гіроскоп, налаштований за допомогою смарт-приводу.
Калібрування допомагає датчику правильно вимірювати рух. Під час калібрування тримайте робота нерухомим приблизно 2 секунди. Якщо робот рухається під час калібрування, датчик може неправильно вимірювати рух.
Проєкт чекатиме на завершення калібрування, перш ніж буде виконано наступний рядок коду.
Значення calibrateDrivetrain генерується автоматично VEXcode, коли трансмісія налаштована з інерціальним датчиком або гіроскопічним датчиком. Воно надається як частина вихідного коду проекту та не є частиною C++ API VEX EXP.
void calibrateDrivetrain();
Ця функція не приймає жодних параметрів.
Return ValuesЦя функція не повертає значення.
NotesРобот калібрується автоматично на початку кожного проєкту.
Тримайте робота нерухомо приблизно 2 секунди під час калібрування.
Нижче наведено автоматично згенеровану реалізацію 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 Functionsvoid setHeading(
double value,
rotationUnits units);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Значення курсу, яке потрібно встановити для робота. Воно може бути від -359 до 359 при використанні |
|
|
Одиниця вимірювання курсу: |
Ця функція не повертає значення.
Examples// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
Обертання – це величина повороту робота, що вимірюється в градусах або обертах. На початку проекту значення повороту встановлюється на 0 градусів. setRotation змінює поточне обертання робота на нове значення.
Наприклад, якщо робот зробив два повних оберти праворуч, значення його обертання становитиме 720 градусів. Встановлення обертання на 0 градусів скине це обертання з 720 до 0 градусів. Потім робот зможе повертатися до обертань на основі цього нового значення.
Available Functionsvoid setRotation(
double value,
rotationUnits units);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Значення обертання, яке потрібно встановити для робота. |
|
|
Одиниця вимірювання обертання: |
Ця функція не повертає значення.
Examples// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
heading#
Курс – це напрямок, у якому рухається робот, виміряний у градусах. heading повертає поточний курс робота від 0 до 359 градусів.
Початковий курс робота становить 0 градусів.
Available Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Необов’язково. Одиниця вимірювання для повернення напрямку: |
Повертає поточний напрямок руху робота у вигляді double у вибраному блоку вимірювання.
// 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 Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Необов’язково. Одиниця вимірювання для повернення напрямку: |
Повертає поточне обертання робота у вигляді double у вибраній одиниці вимірювання.
// 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();