CTE Рука#

Введение#

Класс arm обеспечивает управление 6-осевым манипулятором, используемым в рабочей ячейке CTE. В VEX EXP C++ 6-осевой манипулятор может перемещать концевой захват в трехмерное пространство, вращать концевой захват, проверять возможность перемещений и управлять прикрепленными инструментами, такими как инструмент для захвата магнитов или инструмент для удержания ручек.

В примерах на этой странице используется сконфигурированный 6-осевой манипулятор с именем Arm.

Строители#

arm#

arm создает объект “6-осевой манипулятор”.

Доступная функция

arm(int32_t index);

Параметр

Тип

Описание

index

int32_t

Интеллектуальный порт, к которому подключен 6-осевой манипулятор, обозначается как PORTx, где x — номер порта. Например, PORT1.

Пример

// 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-осевой манипулятор к EXP 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

double

Координата x целевой позиции в миллиметрах.

y

double

Координата Y целевой позиции в миллиметрах.

z

double

Z-координата целевой позиции в миллиметрах.

waitForCompletion

bool

Необязательно. true (по умолчанию) — ожидает завершения движения перед продолжением. false запускает движение и немедленно переходит к следующей строке кода.

Возвращаемая стоимость

Возвращает логическое значение.

  • 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

double

Расстояние перемещения вдоль оси X в миллиметрах.

y

double

Расстояние перемещения вдоль оси Y в миллиметрах.

z

double

Расстояние перемещения вдоль оси Z в миллиметрах.

waitForCompletion

bool

Необязательно. true (по умолчанию) — ожидает завершения движения перед продолжением. false запускает движение и немедленно переходит к следующей строке кода.

Возвращаемая стоимость

Возвращает логическое значение.

  • 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
);

Параметр

Тип

Описание

yaw

double

Целевой угол рыскания в градусах.

roll

double

Необязательно. Целевой угол крена в градусах. Значение по умолчанию: 0.

pitch

double

Необязательно. Целевой угол тангажа в градусах. Значение по умолчанию: 0.

waitForCompletion

bool

Необязательно. true (по умолчанию) — ожидает завершения движения перед продолжением. false запускает движение и немедленно переходит к следующей строке кода.

Возвращаемая стоимость

Возвращает логическое значение.

  • 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
);

Параметр

Тип

Описание

yaw

double

Изменение угла рыскания, в градусах.

roll

double

Необязательный параметр. Изменение крена в градусах. Значение по умолчанию: 0.

pitch

double

Необязательный параметр. Изменение высоты тона в градусах. Значение по умолчанию: 0.

waitForCompletion

bool

Необязательно. true (по умолчанию) — ожидает завершения движения перед продолжением. false запускает движение и немедленно переходит к следующей строке кода.

Возвращаемая стоимость

Возвращает логическое значение.

  • 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);

Параметр

Тип

Описание

speed

uint32_t

Скорость, с которой должен перемещаться 6-осевой манипулятор, в миллиметрах в секунду.

Возвращаемая стоимость

Эта функция не возвращает значения.

Пример

// Set the 6-Axis Arm movement speed
Arm.setSpeed(100);

setEndEffectorType#

Параметр setEndEffectorType задает тип концевого эффектора, прикрепленного к 6-осевому манипулятору.

При изменении типа концевого захвата 6-осевой манипулятор автоматически регулирует смещение по оси Z в соответствии с выбранным инструментом.

Доступная функция

bool setEndEffectorType(
  endEffectorType type,
  bool            waitForCompletion = true
);

Параметр

Тип

Описание

type

endEffectorType

Инструмент, крепящийся к 6-осевому манипулятору: magnet (инструмент для захвата магнитов) или pen (инструмент для держателя ручек).

waitForCompletion

bool

Необязательно. true (по умолчанию) ожидает завершения изменения, прежде чем продолжить. false запускает изменение и немедленно переходит к следующей строке кода.

Возвращаемая стоимость

Возвращает логическое значение.

  • true — Запрошенный тип установлен.

  • false — Запрошенный тип не был установлен, или waitForCompletion был установлен на false.

Пример

// Set the end effector type to the Magnet Pickup Tool
Arm.setEndEffectorType(magnet);

setEndEffectorMagnet#

setEndEffectorMagnet включает или отключает инструмент захвата магнита.

Доступная функция

void setEndEffectorMagnet(bool enabled);

Параметр

Тип

Описание

enabled

bool

true позволяет магниту поднимать и удерживать предметы. false отключает магнит и отпускает любой удерживаемый предмет.

Возвращаемая стоимость

Эта функция не возвращает значения.

Пример

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

Параметр

Тип

Описание

zOffset

double

Значение смещения пера в миллиметрах.

Возвращаемая стоимость

Эта функция не возвращает значения.

Пример

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

Параметр

Тип

Описание

state

bool

Необязательно. true (по умолчанию) — включает остановку управления и предотвращает дальнейшие линейные или шарнирные перемещения. false — отключает остановку управления.

Возвращаемая стоимость

Эта функция не возвращает значения.

Пример

// Stop the 6-Axis Arm and prevent further movement
Arm.setControlStop();

setTimeout#

Параметр setTimeout устанавливает значение тайм-аута, используемого при перемещении 6-осевого манипулятора.

Если движение не завершится до истечения времени ожидания, проект перейдет к следующей строке кода.

Доступная функция

void setTimeout(
  int32_t   timeout,
  timeUnits units
);

Параметр

Тип

Описание

timeout

int32_t

Новое значение тайм-аута.

units

timeUnits

Единица измерения времени: sec (секунды) или msec (миллисекунды).

Возвращаемая стоимость

Эта функция не возвращает значения.

Пример

// 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 Signal Tower and Brain screen
    Brain.Screen.print("Crash Detected");
    SignalTower6.setColor(signaltower::green, signaltower::off);
    SignalTower6.setColor(signaltower::red, signaltower::on);
    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 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

double

Координата x целевой позиции в миллиметрах.

y

double

Координата Y целевой позиции в миллиметрах.

z

double

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

double

Расстояние перемещения вдоль оси X в миллиметрах.

y

double

Расстояние перемещения вдоль оси Y в миллиметрах.

z

double

Расстояние перемещения вдоль оси 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
);

Параметр

Тип

Описание

yaw

double

Целевой угол рыскания в градусах.

roll

double

Необязательно. Целевой угол крена в градусах. Значение по умолчанию: 0.

pitch

double

Необязательно. Целевой угол тангажа в градусах. Значение по умолчанию: 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
);

Параметр

Тип

Описание

yaw

double

Изменение угла рыскания, в градусах.

roll

double

Необязательный параметр. Изменение крена в градусах. Значение по умолчанию: 0.

pitch

double

Необязательный параметр. Изменение высоты тона в градусах. Значение по умолчанию: 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-осевой манипулятор к блоку управления EXP Brain.

Это функция совместимости, которая возвращает то же значение, что и installed.

Доступная функция

bool isConnected();

Параметры

Эта функция не имеет параметров.

Возвращаемая стоимость

Возвращает логическое значение.

  • true — 6-осевой манипулятор подключен к блоку управления EXP.

  • false — 6-осевой манипулятор не подключен к блоку управления EXP.

Пример

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

Параметр

Тип

Описание

callback

void (*)(void)

Функция, которая запускается при включении функции остановки управления.

Возвращаемая стоимость

Эта функция не возвращает значения.

Пример

// Called when the 6-Axis Arm is control stopped
void onControlStopped() {
  Brain.Screen.print("Arm control stopped");
}

int main() {
  vexcodeInit();

  Arm.controlStopped(onControlStopped);
}

crashed#

crashed регистрирует функцию, которая запускается в случае ошибки 6-осевого манипулятора во время движения.

При обнаружении столкновения 6-осевой манипулятор останавливает движение двигателей и может казаться ослабленным. Это снижает нагрузку и помогает защитить двигатели от случайных повреждений.

Доступная функция

void crashed(void (* callback)(void));

Параметр

Тип

Описание

callback

void (*)(void)

Функция, которая запускается в случае поломки 6-осевого манипулятора во время движения.

Возвращаемая стоимость

Эта функция не возвращает значения.

Пример

// Called when the 6-Axis Arm crashes while moving
void onArmCrashed() {
  Brain.Screen.print("Crash detected");
  SignalTower6.setColor(signaltower::green, signaltower::off);
  SignalTower6.setColor(signaltower::red, signaltower::on);
}

int main() {
  vexcodeInit();

  Arm.crashed(onArmCrashed);
}