CTE Arm#
Вступ#
Клас arm забезпечує керування 6-осьовим маніпулятором, що використовується в робочій комірці CTE. У VEX V5 C++ 6-осьовий маніпулятор може переміщувати кінцевий ефектор у потрібні положення в тривимірному просторі, обертати кінцевий ефектор, перевіряти можливість рухів та керувати підключеними інструментами, такими як інструмент магнітного захоплення або інструмент тримача ручки.
6-осьовий маніпулятор не налаштовано як пристрій у VEXcode V5. Щоб використовувати його в проекті VEX V5 C++, вручну створіть об’єкт arm у коді з інтелектуальним портом, до якого підключено 6-осьовий маніпулятор.
У прикладах на цій сторінці використовується ручно сконструйований 6-осьовий маніпулятор з назвою Arm.
Конструктори#
arm#
arm створює об’єкт 6-осьової руки.
Доступна функція
arm(int32_t index);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Розумний порт, до якого підключено 6-осьовий маніпулятор, записується як |
Приклад
// Create a 6-Axis Arm named Arm on Port 1
arm Arm = arm(PORT1);
Деструктор#
~arm#
~arm знищує об’єкт arm та звільняє пов’язані з ним ресурси.
Доступна функція
~arm();
Функції-члени#
Клас arm містить такі функції-члени:
Дії — Переміщення 6-осьового маніпулятора в потрібні положення або орієнтації.
moveTo— Переміщує кінцевий ефектор до заданої координати x, y та z.moveInc— Переміщує кінцевий ефектор на задану відстань від його поточного положення.moveEndEffectorTo— Повертає кінцевий ефектор до заданої орієнтації по риску, крену та тангажу.moveEndEffectorInc— Повертає кінцевий ефектор на задану величину рисьблення, крену та тангажу.
Мутатори — налаштуйте рух, інструменти та параметри керування.
setSpeed— Встановлює швидкість руху, що використовується 6-осьовим маніпулятором.setEndEffectorType— Встановлює тип кінцевого ефектора, прикріпленого до 6-осьового важеля.setEndEffectorMagnet— Вмикає або вимикає інструмент магнітного захоплення.setPenOffset— Встановлює зміщення осі z, яке використовується з інструментом «Тримач пера».setControlStop— Вмикає або вимикає зупинку керування для 6-осьового маніпулятора.setTimeout— Встановлює час очікування, що використовується функціями руху 6-осьової руки.
Геттери — Повертають значення статусу руху, позиції, орієнтації та з’єднання.
isDone— Повертає, чи завершив рух 6-осьового маніпулятора.isCrashed— Повертає, чи стався збій 6-осьового маніпулятора під час руху.getX— Повертає поточну позицію x кінцевого ефектора.getY— Повертає поточну позицію кінцевого ефектора по осі Y.getZ— Повертає поточну позицію z кінцевого ефектора.getYaw— Повертає поточне значення рискування кінцевого ефектора.getRoll— Повертає поточний кидок кінцевого ефектора.getPitch— Повертає поточний крок тону кінцевого ефектора.canArmReachTo— Повертає, чи може 6-осьова рука досягти заданого положення.canArmReachInc— Повертає, чи може 6-осьова рука переміститися на задану відстань.canEndEffectorReachTo— Повертає, чи може кінцевий ефектор досягти заданої орієнтації.canEndEffectorReachInc— Повертає, чи може кінцевий ефектор обертатися на задану величину.isConnected— Повертає, чи підключено 6-осьову руку до V5 Brain.timestamp— Повертає позначку часу останнього отриманого пакета стану від 6-осьового маніпулятора.installed— Повертає, чи підключено 6-осьову рукоятку.
Зворотні виклики — Запускають функції, коли відбуваються події arm.
controlStopped— Реєструє функцію для запуску, коли ввімкнено зупинку керування.crashed— Реєструє функцію для запуску у разі виявлення збою.
Дії#
moveTo#
moveTo переміщує 6-осьовий маніпулятор до заданої координати x, y та z.
Координати x, y та z описують положення кінцевого ефектора у тривимірному просторі. Використовуйте canArmReachTo перед цією функцією, якщо цільове положення може бути поза межами досяжного робочого простору 6-осьового маніпулятора.
Доступна функція
bool moveTo(
double x,
double y,
double z,
bool waitForCompletion = true
);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Координата x цільового положення в міліметрах. |
|
|
Y-координата цільового положення в міліметрах. |
|
|
Z-координата цільового положення в міліметрах. |
|
|
Необов’язково. |
Повернене значення
Повертає логічне значення.
true— 6-осьовий маніпулятор досяг цільового положення.false— 6-осьова рука не досягла цільового положення, абоwaitForCompletionбуло встановлено наfalse.
Приклади
// Move the 6-Axis Arm to (200, 0, 100)
Arm.moveTo(200, 0, 100);
// Start moving, then print the y-position while the arm moves
Arm.moveTo(-100, 200, 100, false);
while (!Arm.isDone()) {
Brain.Screen.print(Arm.getY());
Brain.Screen.newLine();
wait(0.25, seconds);
}
moveInc#
moveInc переміщує 6-осьовий маніпулятор на задану відстань від його поточного положення вздовж осей x, y та z.
Використовуйте цю функцію для переміщення відносно поточного місця розташування кінцевого ефектора. Використовуйте canArmReachInc перед цією функцією, якщо рух може вивести 6-осьовий маніпулятор за межі його досяжної робочої області.
Доступна функція
bool moveInc(
double x,
double y,
double z,
bool waitForCompletion = true
);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Відстань, на яку потрібно переміститися вздовж осі x, у міліметрах. |
|
|
Відстань, на яку потрібно переміститися вздовж осі Y, у міліметрах. |
|
|
Відстань, на яку потрібно переміститися вздовж осі z, у міліметрах. |
|
|
Необов’язково. |
Повернене значення
Повертає логічне значення.
true— 6-осьова ручка досягла заданого положення.false— 6-осьова ручка не досягла запитуваного положення, абоwaitForCompletionбуло встановлено значенняfalse.
Приклад
// Move the 6-Axis Arm 100 millimeters along the y-axis
Arm.moveInc(0, 100, 0);
moveEndEffectorTo#
moveEndEffectorTo повертає кінцевий ефектор 6-осьового важеля до заданої орієнтації по риску, крену та тангажу.
Орієнтація описує, як обертається кінцевий ефектор. yaw обертається навколо осі z, roll обертається навколо осі x, а pitch обертається навколо осі y.
Доступна функція
bool moveEndEffectorTo(
double yaw,
double roll = 0,
double pitch = 0,
bool waitForCompletion = true
);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Кут рискування цілі в градусах. |
|
|
Необов’язково. Кут крену цілі в градусах. Значення за замовчуванням — |
|
|
Необов’язково. Цільовий кут нахилу в градусах. Значення за замовчуванням — |
|
|
Необов’язково. |
Повернене значення
Повертає логічне значення.
true— Кінцевий ефектор досяг цільової орієнтації.false— Кінцевий ефектор не досяг цільової орієнтації, абоwaitForCompletionбуло встановлено наfalse.
Приклад
// Rotate the end effector to 90 degrees of roll
Arm.moveEndEffectorTo(0, 90, 0);
moveEndEffectorInc#
moveEndEffectorInc повертає кінцевий ефектор 6-осьового маніпулятора на задану величину рисьблення, крен та тангажу відносно його поточної орієнтації.
Використовуйте цю функцію для обертання відносно поточного кута рисьблення, крену або тангажу кінцевого ефектора.
Доступна функція
bool moveEndEffectorInc(
double yaw,
double roll = 0,
double pitch = 0,
bool waitForCompletion = true
);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Зміна кута рисьхання, у градусах. |
|
|
Необов’язково. Зміна крену в градусах. Значення за замовчуванням — |
|
|
Необов’язково. Зміна висоти тону в градусах. Значення за замовчуванням — |
|
|
Необов’язково. |
Повернене значення
Повертає логічне значення.
true— Кінцевий ефектор досяг заданої орієнтації.false— Кінцевий ефектор не досяг запитуваної орієнтації, абоwaitForCompletionбуло встановлено наfalse.
Приклад
// Rotate the end effector -50 degrees in pitch
Arm.moveEndEffectorInc(0, 0, -50);
Мутатори#
setSpeed#
setSpeed встановлює швидкість руху, що використовується 6-осьовим маніпулятором.
Доступна функція
void setSpeed(uint32_t speed);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Швидкість, з якою має рухатися 6-осьовий маніпулятор, у міліметрах за секунду. |
Повернене значення
Ця функція не повертає значення.
Приклад
// Set the 6-Axis Arm movement speed
Arm.setSpeed(100);
setEndEffectorType#
setEndEffectorType встановлює тип кінцевого ефектора, прикріпленого до 6-осьового важеля.
Коли тип кінцевого ефектора змінюється, 6-осьовий маніпулятор автоматично налаштовує своє зміщення по осі z відповідно до вибраного інструменту.
Доступна функція
bool setEndEffectorType(
endEffectorType type,
bool waitForCompletion = true
);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Інструмент, прикріплений до 6-осьового важеля: |
|
|
Необов’язково. |
Повернене значення
Повертає логічне значення.
true— Запитаний тип встановлено.false— Запитаний тип не було встановлено, абоwaitForCompletionбуло встановлено наfalse.
Приклад
// Set the end effector type to the Magnet Pickup Tool
Arm.setEndEffectorType(magnet);
setEndEffectorMagnet#
setEndEffectorMagnet вмикає або вимикає інструмент магнітного захоплення.
Доступна функція
void setEndEffectorMagnet(bool enabled);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
|
Повернене значення
Ця функція не повертає значення.
Приклад
// Pick up objects and then drop them
Arm.setEndEffectorType(magnet);
Arm.setEndEffectorMagnet(true);
wait(2, seconds);
Arm.setEndEffectorMagnet(false);
setPenOffset#
setPenOffset встановлює зміщення по осі z, яке використовується, коли інструмент «Тримач пера» прикріплений до 6-осьового важеля.
Перед використанням цієї функції встановіть тип кінцевого ефектора на pen Якщо інструмент «Тримач пера» не вибрано, ця функція не матиме жодного ефекту.
Зсув пера – це відстань від верхньої частини інструмента «Тримач пера» до кінчика маркера сухого стирання. Додатне значення z переміщує зсув вгору від точки кріплення інструмента.
Доступна функція
void setPenOffset(double zOffset);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Значення зміщення пера в міліметрах. |
Повернене значення
Ця функція не повертає значення.
Приклад
// Set the end effector type to the Pen Holder Tool and set the pen offset
Arm.setEndEffectorType(pen);
Arm.setPenOffset(25);
setControlStop#
setControlStop вмикає або вимикає зупинку керування для 6-осьового маніпулятора.
Коли ввімкнено зупинку керування, 6-осьовий маніпулятор негайно зупиняє рух і запобігає подальшим лінійним або шарнірним рухам.
Доступна функція
void setControlStop(bool state = true);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Необов’язково. |
Повернене значення
Ця функція не повертає значення.
Приклад
// Stop the 6-Axis Arm and prevent further movement
Arm.setControlStop();
setTimeout#
setTimeout встановлює значення тайм-ауту, яке використовується під час переміщення 6-осьового маніпулятора.
Якщо рух не завершується до досягнення тайм-ауту, проєкт продовжується до наступного рядка коду.
Доступна функція
void setTimeout(
int32_t timeout,
timeUnits units
);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Нове значення часу очікування. |
|
|
Одиниця часу: |
Повернене значення
Ця функція не повертає значення.
Приклад
// Set the 6-Axis Arm timeout to 2 seconds
Arm.setTimeout(2, sec);
Геттери#
isDone#
isDone повертає, чи завершив рух 6-осьового маніпулятора.
Ця функція корисна після виклику функції переміщення зі значеннями waitForCompletion встановленими на false.
Доступна функція
bool isDone();
Параметри
Ця функція не має параметрів.
Повернене значення
Повертає логічне значення.
true— Рух 6-осьового маніпулятора завершено.false— 6-осьовий маніпулятор все ще рухається.
Приклад
// Display the 6-Axis Arm's y-position while it moves
Arm.moveTo(-100, 200, 100, false);
while (!Arm.isDone()) {
Brain.Screen.print(Arm.getY());
Brain.Screen.newLine();
wait(0.25, seconds);
}
isCrashed#
isCrashed повертає, чи стався збій 6-осьового маніпулятора під час руху.
У разі виявлення аварії 6-осьовий важіль зупиняє рух двигуна та може здаватися непрацюючим. Це зменшує навантаження та допомагає захистити двигуни від випадкового пошкодження.
Доступна функція
bool isCrashed();
Параметри
Ця функція не має параметрів.
Повернене значення
Повертає логічне значення.
true— 6-осьовий маніпулятор вийшов з ладу.false— 6-осьовий маніпулятор не вийшов з ладу.
Приклад
// Quickly move to a new location
Arm.setSpeed(100);
Arm.moveTo(-40, 250, 40, false);
// While moving, check for a crash
while (true) {
if (Arm.isCrashed()) {
// Indicate a crash with the Brain screen
Brain.Screen.print("Crash Detected");
break;
}
wait(5, msec);
}
getX#
getX повертає поточну позицію кінцевого ефектора по осі x у міліметрах.
Використовуйте цю функцію, щоб зчитати, де наразі знаходиться кінцевий ефектор вздовж осі x.
Доступна функція
float getX();
Параметри
Ця функція не має параметрів.
Повернене значення
Повертає значення float що представляє позицію x кінцевого ефектора в міліметрах.
Приклад
// Print the current x position of the 6-Axis Arm
Brain.Screen.print(Arm.getX());
getY#
getY повертає поточне положення кінцевого ефектора по осі Y у міліметрах.
Використовуйте цю функцію, щоб зчитати, де наразі знаходиться кінцевий ефектор вздовж осі Y.
Доступна функція
float getY();
Параметри
Ця функція не має параметрів.
Повернене значення
Повертає значення float , що представляє позицію y кінцевого ефектора в міліметрах.
Приклад
// Print the current y position of the 6-Axis Arm
Brain.Screen.print(Arm.getY());
getZ#
getZ повертає поточну позицію z кінцевого ефектора в міліметрах.
Використовуйте цю функцію, щоб зчитати, де наразі знаходиться кінцевий ефектор вздовж осі z.
Доступна функція
float getZ();
Параметри
Ця функція не має параметрів.
Повернене значення
Повертає значення float що представляє z-позицію кінцевого ефектора в міліметрах.
Приклад
// Print the current z position of the 6-Axis Arm
Brain.Screen.print(Arm.getZ());
getYaw#
getYaw повертає поточне напрямок руху кінцевого ефектора в градусах.
Доступна функція
float getYaw();
Параметри
Ця функція не має параметрів.
Повернене значення
Повертає значення float що представляє поточний кут риски кінцевого ефектора в градусах.
Приклад
// Print the current yaw of the end effector
Brain.Screen.print(Arm.getYaw());
getRoll#
getRoll повертає поточний кут кренування кінцевого ефектора в градусах.
Доступна функція
float getRoll();
Параметри
Ця функція не має параметрів.
Повернене значення
Повертає значення float яке представляє поточний хід кінцевого ефектора в градусах.
Приклад
// Print the current roll of the end effector
Brain.Screen.print(Arm.getRoll());
getPitch#
getPitch повертає поточний крок кінцевого ефектора в градусах.
Доступна функція
float getPitch();
Параметри
Ця функція не має параметрів.
Повернене значення
Повертає значення float , що представляє поточний кут нахилу кінцевого ефектора в градусах.
Приклад
// Print the current pitch of the end effector
Brain.Screen.print(Arm.getPitch());
canArmReachTo#
canArmReachTo повертає, чи може 6-осьовий маніпулятор перемістити кінцевий ефектор до заданих координат x, y та z.
Використовуйте цю функцію для перевірки цільової позиції перед використанням moveTo.
Доступна функція
bool canArmReachTo(
double x,
double y,
double z
);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Координата x цільового положення в міліметрах. |
|
|
Y-координата цільового положення в міліметрах. |
|
|
Z-координата цільового положення в міліметрах. |
Повернене значення
Повертає логічне значення.
true— 6-осьовий маніпулятор може досягти потрібного положення.false— 6-осьовий маніпулятор не може досягти потрібного положення.
Приклад
// Move the 6-Axis Arm to (100, -20, 50) if it can reach
if (Arm.canArmReachTo(100, -20, 50)) {
Arm.moveTo(100, -20, 50);
}
canArmReachInc#
canArmReachInc повертає, чи може 6-осьовий маніпулятор перемістити кінцевий ефектор на задану відстань x, y та z від його поточного положення.
Використовуйте цю функцію для перевірки відносного руху перед використанням moveInc.
Доступна функція
bool canArmReachInc(
double x,
double y,
double z
);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Відстань, на яку потрібно переміститися вздовж осі x, у міліметрах. |
|
|
Відстань, на яку потрібно переміститися вздовж осі Y, у міліметрах. |
|
|
Відстань, на яку потрібно переміститися вздовж осі z, у міліметрах. |
Повернене значення
Повертає логічне значення.
true— 6-осьовий маніпулятор може виконати запитуваний рух.false— 6-осьовий маніпулятор не може виконати запитуваний рух.
Приклад
// Increment the 6-Axis Arm 100 mm along the x-axis if possible
if (Arm.canArmReachInc(100, 0, 0)) {
Arm.moveInc(100, 0, 0);
}
canEndEffectorReachTo#
canEndEffectorReachTo повертає, чи може кінцевий ефектор обертатися до заданої орієнтації по риску, крену та тангажу.
Використовуйте цю функцію для перевірки орієнтації цілі перед використанням moveEndEffectorTo.
Доступна функція
bool canEndEffectorReachTo(
double yaw,
double roll = 0,
double pitch = 0
);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Кут рискування цілі в градусах. |
|
|
Необов’язково. Кут крену цілі в градусах. Значення за замовчуванням — |
|
|
Необов’язково. Цільовий кут нахилу в градусах. Значення за замовчуванням — |
Повернене значення
Повертає логічне значення.
true— Кінцевий ефектор може досягти запитуваної орієнтації.false— Кінцевий ефектор не може досягти запитуваної орієнтації.
Приклад
// Rotate the end effector to 90 degrees of roll if possible
if (Arm.canEndEffectorReachTo(0, 90, 0)) {
Arm.moveEndEffectorTo(0, 90, 0);
}
canEndEffectorReachInc#
canEndEffectorReachInc повертає, чи може кінцевий ефектор обертатися на задану величину рисьблення, крену та тангажу відносно своєї поточної орієнтації.
Використовуйте цю функцію для перевірки руху відносної орієнтації перед використанням moveEndEffectorInc.
Доступна функція
bool canEndEffectorReachInc(
double yaw,
double roll = 0,
double pitch = 0
);
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Зміна кута рисьхання, у градусах. |
|
|
Необов’язково. Зміна крену в градусах. Значення за замовчуванням — |
|
|
Необов’язково. Зміна висоти тону в градусах. Значення за замовчуванням — |
Повернене значення
Повертає логічне значення.
true— Кінцевий ефектор може виконати запитуване обертання.false— Кінцевий ефектор не може виконати запитуване обертання.
Приклад
// Increment the end effector by 10 degrees of pitch if possible
if (Arm.canEndEffectorReachInc(0, 0, 10)) {
Arm.moveEndEffectorInc(0, 0, 10);
}
isConnected#
isConnected повертає, чи підключено 6-осьову руку до V5 Brain.
Це функція сумісності, яка повертає те саме значення, що й installed.
Доступна функція
bool isConnected();
Параметри
Ця функція не має параметрів.
Повернене значення
Повертає логічне значення.
true— 6-осьова рука підключена до V5 Brain.false— 6-осьова рука не підключена до V5 Brain.
Приклад
// Print whether the 6-Axis Arm is connected
Brain.Screen.print(Arm.isConnected());
timestamp#
timestamp повертає позначку часу останнього отриманого пакета стану від 6-осьового маніпулятора.
Доступна функція
uint32_t timestamp();
Параметри
Ця функція не має параметрів.
Повернене значення
Повертає позначку часу останнього пакета стану як uint32_t у мілісекундах.
installed#
installed повертає, чи підключено 6-осьову рукоятку.
Доступна функція
bool installed();
Параметри
Ця функція не має параметрів.
Повернене значення
Повертає логічне значення.
true— 6-осьовий маніпулятор підключено.false— 6-осьовий маніпулятор не підключений.
Зворотні виклики#
controlStopped#
controlStopped реєструє функцію, яка виконується, коли ввімкнено зупинку керування.
Доступна функція
void controlStopped(void (* callback)(void));
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Функція, яка виконується, коли ввімкнено зупинку керування. |
Повернене значення
Ця функція не повертає значення.
Приклад
// Called when the 6-Axis Arm is control stopped
void onControlStopped() {
Brain.Screen.print("Arm control stopped");
}
int main() {
Arm.controlStopped(onControlStopped);
}
crashed#
crashed реєструє функцію, яка виконується, коли 6-осьовий маніпулятор збійне під час руху.
У разі виявлення аварії 6-осьовий важіль зупиняє рух двигуна та може здаватися непрацюючим. Це зменшує навантаження та допомагає захистити двигуни від випадкового пошкодження.
Доступна функція
void crashed(void (* callback)(void));
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Функція, яка запускається, коли 6-осьовий маніпулятор виходить з ладу під час руху. |
Повернене значення
Ця функція не повертає значення.
Приклад
// Called when the 6-Axis Arm crashes while moving
void onArmCrashed() {
Brain.Screen.print("Crash detected");
}
int main() {
Arm.crashed(onArmCrashed);
}