CTE Рука#
Введение#
Класс arm обеспечивает управление 6-осевым манипулятором, используемым в рабочей ячейке CTE. В VEX V5 C++ 6-осевой манипулятор может перемещать концевой захват в трехмерное пространство, вращать концевой захват, проверять возможность перемещений и управлять прикрепленными инструментами, такими как инструмент для захвата магнитов или инструмент для удержания ручек.
Шестиосевой манипулятор не настроен как устройство в VEXcode V5. Чтобы использовать его в проекте VEX V5 на C++, вручную создайте в коде объект arm с указанием Smart Port, к которому подключен шестиосевой манипулятор.
В примерах на этой странице используется вручную сконструированный 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— Возвращает true, если 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-осевой манипулятор.
Обратные вызовы — Запускают функции при возникновении событий активации.
controlStopped— Регистрирует функцию, которая будет выполняться при включении функции control stop.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— Шестиосевой манипулятор не достиг целевой позиции, или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— Шестиосевой манипулятор не достиг запрошенной позиции, или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— Шестиосевой манипулятор завершил движение.false— Шестиосевой манипулятор все еще движется.
Пример
// 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 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 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.
Это функция совместимости, которая возвращает то же значение, что и installed.
Доступная функция
bool isConnected();
Параметры
Эта функция не имеет параметров.
Возвращаемая стоимость
Возвращает логическое значение.
true— 6-осевой манипулятор подключен к головному процессору V5.false— 6-осевой манипулятор не подключен к головному устройству V5.
Пример
// 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 регистрирует функцию, которая выполняется при включении функции control stop.
Доступная функция
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);
}