6-осевой манипулятор#
Введение#
Роботизированная рука VEX с 6 осями может перемещать концевой эффектор в трехмерном пространстве, управлять его ориентацией с помощью вращений по осям рыскания, крена и тангажа, а также использовать прикрепленные инструменты, такие как магнитный захват или держатель для ручки.
Шестиосевой манипулятор не настроен как устройство в VEXcode V5. Чтобы использовать его в проекте VEX V5 на Python, вручную создайте в коде объект Arm с указанием Smart Port, к которому подключен шестиосевой манипулятор.
В примерах на этой странице используется вручную сконструированный 6-осевой манипулятор, обозначенный как arm1.
Ниже приведён список всех доступных методов:
Действия — Перемещайте 6-осевой манипулятор в заданные положения или ориентации.
move_to— Перемещает концевой эффектор в заданные координаты x, y и z.move_inc— Перемещает концевой эффектор на заданное расстояние от его текущего положения.move_end_effector_to— Поворачивает концевой эффектор в заданное положение по рысканию, крену и тангажу.move_end_effector_inc— Поворачивает концевой эффектор на заданную величину рыскания, крена и тангажа.
Мутаторы — Настройка параметров передвижения, инструментов и управления.
set_speed— Устанавливает скорость движения 6-осевого манипулятора.set_end_effector_type— Задает тип концевого эффектора, прикрепленного к 6-осевому манипулятору.set_end_effector_magnet— Включает или выключает инструмент захвата магнита.set_pen_offset— Задает смещение по оси Z, используемое с инструментом «Держатель пера».set_control_stop— Включает остановку управления для 6-осевого манипулятора.set_timeout— Устанавливает тайм-аут, используемый методами перемещения 6-осевого манипулятора.
Геттеры — возвращают статус движения, положение, ориентацию и значения соединения.
is_done— Возвращает значение true, если 6-осевой манипулятор завершил движение.is_crashed— Возвращает значение, указывающее, произошел ли сбой 6-осевого манипулятора во время движения.get_x— Возвращает текущую x-позицию конечного эффектора.get_y— Возвращает текущую позицию по оси Y конечного эффектора.get_z— Возвращает текущую z-позицию концевого эффектора.get_pitch— Возвращает текущий шаг тона концевого эффектора.get_roll— Возвращает текущий бросок конечного эффектора.get_yaw— Возвращает текущий угол рыскания концевого эффектора.can_arm_reach_to— Возвращает значение, указывающее, может ли 6-осевой манипулятор достичь заданной позиции.can_arm_reach_inc— Возвращает значение, указывающее, может ли 6-осевой манипулятор переместиться на заданное расстояние.can_end_effector_reach_to— Возвращает значение, указывающее, может ли концевой эффектор достичь заданной ориентации.can_end_effector_reach_inc— Возвращает значение, указывающее, может ли концевой эффектор вращаться на заданное значение.get_timeout— Возвращает текущее значение таймаута, используемое методами перемещения.is_connected— Возвращает значение, указывающее, подключен ли 6-осевой манипулятор к V5 Brain.
Обратные вызовы — Запускают функции при возникновении событий активации.
control_stopped— Регистрирует функцию, которая будет выполняться при включении функции остановки управления.crashed— Регистрирует функцию, которая будет запущена при обнаружении сбоя.
Конструктор — Создание объекта 6-осевого манипулятора вручную.
Arm— Создает объект 6-осевого манипулятора.
Действия#
move_to#
move_to перемещает 6-осевой манипулятор в заданные координаты x, y и z.
Координаты x, y и z описывают положение концевого эффектора в трехмерном пространстве. Используйте can_arm_reach_to перед этим методом, если целевое положение может находиться за пределами досягаемой рабочей зоны 6-осевого манипулятора.
Usage:
arm1.move_to(x, y, z, wait)
Параметр |
Описание |
|---|---|
|
Координата x целевой позиции в миллиметрах. |
|
Координата Y целевой позиции в миллиметрах. |
|
Z-координата целевой позиции в миллиметрах. |
|
Необязательно. |
# Move the 6-Axis Arm to (40, 140, 210)
arm1.move_to(40, 140, 210)
# Start moving, then print the y-position while the arm moves
arm1.move_to(-100, 200, 100, wait=False)
while not arm1.is_done():
brain.screen.print(arm1.get_y())
brain.screen.next_row()
wait(0.25, SECONDS)
move_inc#
move_inc перемещает 6-осевой манипулятор на заданное расстояние от его текущего положения вдоль осей x, y и z.
Используйте этот метод для перемещения относительно текущего положения конечного эффектора. Используйте can_arm_reach_inc перед этим методом, если перемещение может вывести 6-осевой манипулятор за пределы его досягаемой рабочей зоны.
Usage:
arm1.move_inc(x, y, z, wait)
Параметр |
Описание |
|---|---|
|
Расстояние перемещения вдоль оси X в миллиметрах. |
|
Расстояние перемещения вдоль оси Y в миллиметрах. |
|
Расстояние перемещения вдоль оси Z в миллиметрах. |
|
Необязательно. |
# Move the 6-Axis Arm 100 millimeters along the y-axis
arm1.move_inc(0, 100, 0)
move_end_effector_to#
Параметр move_end_effector_to поворачивает концевой эффектор 6-осевого манипулятора в заданное положение по осям рыскания, крена и тангажа.
Ориентация описывает, как вращается концевой эффектор. yaw вращение вокруг оси Z, roll — вращение вокруг оси X, и pitch — вращение вокруг оси Y.
Usage:
arm1.move_end_effector_to(yaw, roll, pitch, wait)
Параметр |
Описание |
|---|---|
|
Целевой угол рыскания в градусах. |
|
Целевой угол крена, в градусах. |
|
Целевой угол наклона руля, в градусах. |
|
Необязательно. |
# Rotate the end effector to 90 degrees of roll
arm1.move_end_effector_to(0, 90, 0)
move_end_effector_inc#
move_end_effector_inc поворачивает концевой эффектор 6-осевого манипулятора на заданные значения рыскания, крена и тангажа относительно его текущей ориентации.
Используйте этот метод для вращения относительно текущего угла рыскания, крена или тангажа концевого эффектора.
Usage:
arm1.move_end_effector_inc(yaw, roll, pitch, wait)
Параметр |
Описание |
|---|---|
|
Изменение угла рыскания, в градусах. |
|
Изменение крена в градусах. |
|
Изменение высоты тона, в градусах. |
|
Необязательно. |
# Rotate the end effector -50 degrees in pitch
arm1.move_end_effector_inc(0, 0, -50)
Мутаторы#
set_speed#
set_speed устанавливает скорость перемещения, используемую 6-осевым манипулятором для методов перемещения.
В начале проекта скорость вращения 6-осевого манипулятора устанавливается на 50%.
Usage:
arm1.set_speed(speed)
Параметр |
Описание |
|---|---|
|
The movement speed of the 6-Axis Arm, from |
# Set the 6-Axis Arm speed to 30%
arm1.set_speed(30)
set_end_effector_type#
set_end_effector_type задает тип концевого эффектора, прикрепленного к 6-осевому манипулятору.
При изменении типа концевого захвата 6-осевой манипулятор автоматически корректирует смещение по оси Z в соответствии с выбранным инструментом. В начале проекта тип концевого захвата устанавливается на MAGNET.
Usage:
arm1.set_end_effector_type(type)
Параметр |
Описание |
|---|---|
|
Инструмент, крепящийся к 6-осевому манипулятору: |
# Set the end effector type to the Pen Holder Tool
arm1.set_end_effector_type(PEN)
set_end_effector_magnet#
set_end_effector_magnet включает или выключает магнитный захватный инструмент.
Состояние магнита остается активным до тех пор, пока метод set_end_effector_magnet` не изменит его. Состояние магнита сбрасывается до False в начале проекта.
Usage:
arm1.set_end_effector_magnet(state)
Параметр |
Описание |
|---|---|
|
Состояние инструмента «Магнитный захват»: |
# Pick up objects and then drop them
arm1.set_end_effector_type(MAGNET)
arm1.set_end_effector_magnet(True)
wait(2, SECONDS)
arm1.set_end_effector_magnet(False)
set_pen_offset#
set_pen_offset задает смещение по оси Z, используемое при креплении держателя пера к 6-осевому манипулятору.
Перед использованием этого метода установите тип исполнительного инструмента на PEN Если инструмент «Держатель пера» не выбран, этот метод не будет эффективен.
The pen offset is the distance from the top of the Pen Holder Tool to the tip of the Dry-Erase Marker. At the start of a project, the pen offset is set to 0. A pen offset of 0 places the arm’s z-axis origin at the point where the Pen Holder Tool connects to the 6-Axis Arm.
Usage:
arm1.set_pen_offset(zOffset)
Параметр |
Описание |
|---|---|
|
Значение смещения пера в миллиметрах. |
# Set the end effector type to the Pen Holder Tool and set the pen offset
arm1.set_end_effector_type(PEN)
arm1.set_pen_offset(25)
set_control_stop#
set_control_stop включает остановку управления для 6-осевого манипулятора.
При включении функции остановки управления 6-осевой манипулятор немедленно останавливает любое движение и не будет выполнять никаких дальнейших операций перемещения до перезапуска проекта.
Usage:
arm1.set_control_stop(state)
Параметр |
Описание |
|---|---|
|
Необязательно. |
# Stop the 6-Axis Arm and prevent further movement
arm1.set_control_stop()
set_timeout#
set_timeout устанавливает значение тайм-аута, используемое при перемещении 6-осевого манипулятора.
Если движение не завершится до истечения времени ожидания, проект перейдет к следующей строке кода.
Usage:
arm1.set_timeout(timeout, units)
Параметр |
Описание |
|---|---|
|
Новое значение тайм-аута. |
|
Необязательно. Единица измерения времени: |
# Set the 6-Axis Arm timeout to 2 seconds
arm1.set_timeout(2, SECONDS)
Геттеры#
is_done#
is_done возвращает значение, указывающее, завершилось ли движение 6-осевого манипулятора.
Этот метод полезен после вызова метода перемещения с параметрами wait=False.
True— Шестиосевой манипулятор завершил движение.False— Шестиосевой манипулятор все еще движется.
Usage:
arm1.is_done()
Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Display the 6-Axis Arm's y-position while it moves
arm1.move_to(-100, 200, 100, wait=False)
while not arm1.is_done():
brain.screen.print(arm1.get_y())
brain.screen.next_row()
wait(0.25, SECONDS)
is_crashed#
is_crashed возвращает значение, указывающее, произошел ли сбой в работе 6-осевого манипулятора во время движения.
При обнаружении столкновения 6-осевой манипулятор останавливает движение двигателей и может казаться ослабленным. Это снижает нагрузку и помогает защитить двигатели от случайных повреждений.
True— 6-осевой манипулятор вышел из строя.False— 6-осевой манипулятор не разбился.
Usage:
arm1.is_crashed()
Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Quickly move to a new location
arm1.set_speed(100)
arm1.move_to(-30, 240, 40, wait=False)
# While moving, check for a crash
while True:
if arm1.is_crashed():
# Indicate a crash with the Brain screen
brain.screen.print("Crash Detected")
break
wait(5, MSEC)
get_x#
get_x возвращает текущую x-координату концевого эффектора в миллиметрах.
Используйте этот метод, чтобы определить текущее положение концевого эффектора вдоль оси X.
Usage:
arm1.get_x()
Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Print the current x position of the 6-Axis Arm
brain.screen.print(arm1.get_x())
get_y#
Функция get_y возвращает текущую позицию по оси Y концевого эффектора в миллиметрах.
Используйте этот метод, чтобы определить текущее положение концевого эффектора вдоль оси Y.
Usage:
arm1.get_y()
Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Print the current y position of the 6-Axis Arm
brain.screen.print(arm1.get_y())
get_z#
get_z возвращает текущую позицию по оси Z концевого эффектора в миллиметрах.
Используйте этот метод, чтобы определить текущее положение концевого эффектора вдоль оси Z.
Usage:
arm1.get_z()
Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Print the current z position of the 6-Axis Arm
brain.screen.print(arm1.get_z())
get_pitch#
get_pitch возвращает текущий угол наклона концевого эффектора в градусах.
Usage:
arm1.get_pitch()
Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Print the current pitch of the end effector
brain.screen.print(arm1.get_pitch())
get_roll#
get_roll возвращает текущий угол крена концевого эффектора в градусах.
Usage:
arm1.get_roll()
Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Print the current roll of the end effector
brain.screen.print(arm1.get_roll())
get_yaw#
get_yaw возвращает текущий угол рыскания концевого эффектора в градусах.
Usage:
arm1.get_yaw()
Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Print the current yaw of the end effector
brain.screen.print(arm1.get_yaw())
can_arm_reach_to#
Параметр can_arm_reach_to возвращает значение, указывающее, может ли 6-осевой манипулятор переместить концевой эффектор в заданные координаты x, y и z.
Используйте этот метод для проверки положения цели перед использованием move_to.
True— 6-осевой манипулятор может достичь запрошенного положения.False— 6-осевой манипулятор не может достичь запрошенной позиции.
Usage:
arm1.can_arm_reach_to(x, y, z)
Параметр |
Описание |
|---|---|
|
Координата x целевой позиции в миллиметрах. |
|
Координата Y целевой позиции в миллиметрах. |
|
Z-координата целевой позиции в миллиметрах. |
# Move the 6-Axis Arm to (100, -20, 50) if it can reach
if arm1.can_arm_reach_to(100, -20, 50):
arm1.move_to(100, -20, 50)
can_arm_reach_inc#
Функция can_arm_reach_inc ( can_arm_reach_inc возвращает значение, указывающее, может ли 6-осевой манипулятор переместить концевой эффектор на заданное расстояние по осям x, y и z от своего текущего положения.
Используйте этот метод для проверки относительного перемещения перед использованием move_inc.
True— 6-осевой манипулятор может выполнить запрошенное перемещение.False— 6-осевой манипулятор не может выполнить запрошенное перемещение.
Usage:
arm1.can_arm_reach_inc(x, y, z)
Параметр |
Описание |
|---|---|
|
Расстояние перемещения вдоль оси X в миллиметрах. |
|
Расстояние перемещения вдоль оси Y в миллиметрах. |
|
Расстояние перемещения вдоль оси Z в миллиметрах. |
# Increment the 6-Axis Arm 100 mm along the x-axis if possible
if arm1.can_arm_reach_inc(100, 0, 0):
arm1.move_inc(100, 0, 0)
can_end_effector_reach_to#
Параметр can_end_effector_reach_to возвращает значение, указывающее, может ли концевой эффектор вращаться в заданное положение по осям рыскания, крена и тангажа.
Используйте этот метод для проверки ориентации цели перед использованием move_end_effector_to.
True— Конечный эффектор может достичь требуемой ориентации.False— Конечный эффектор не может достичь запрошенной ориентации.
Usage:
arm1.can_end_effector_reach_to(yaw, roll, pitch)
Параметр |
Описание |
|---|---|
|
Целевой угол рыскания в градусах. |
|
Целевой угол крена, в градусах. |
|
Целевой угол наклона руля, в градусах. |
# Rotate the end effector to 90 degrees of roll if possible
if arm1.can_end_effector_reach_to(0, 90, 0):
arm1.move_end_effector_to(0, 90, 0)
can_end_effector_reach_inc#
can_end_effector_reach_inc возвращает значение, указывающее, может ли концевой эффектор вращаться на заданные значения по осям рыскания, крена и тангажа относительно своей текущей ориентации.
Используйте этот метод для проверки относительного перемещения ориентации перед использованием move_end_effector_inc.
True— Конечный исполнительный механизм может выполнить запрошенное вращение.False— Конечный эффектор не может выполнить запрошенное вращение.
Usage:
arm1.can_end_effector_reach_inc(yaw, roll, pitch)
Параметр |
Описание |
|---|---|
|
Изменение угла рыскания, в градусах. |
|
Изменение крена в градусах. |
|
Изменение высоты тона, в градусах. |
# Increment the end effector by 10 degrees of pitch if possible
if arm1.can_end_effector_reach_inc(0, 0, 10):
arm1.move_end_effector_inc(0, 0, 10)
get_timeout#
Функция get_timeout get_timeout возвращает значение тайм-аута, используемое методами перемещения 6-осевого манипулятора, в миллисекундах.
Usage:
arm1.get_timeout()
Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Print the current movement timeout in milliseconds
brain.screen.print(arm1.get_timeout())
is_connected#
is_connected возвращает значение, указывающее, подключен ли 6-осевой манипулятор к блоку управления V5.
True— 6-осевой манипулятор подключен к головному процессору V5.False— 6-осевой манипулятор не подключен к головному устройству V5.
Usage:
arm1.is_connected()
Параметры |
Описание |
|---|---|
Этот метод не имеет параметров. |
# Print whether the 6-Axis Arm is connected
brain.screen.print(arm1.is_connected())
Обратные звонки#
control_stopped#
control_stopped регистрирует функцию, которая выполняется при включении функции Control Stop.
Этот метод возвращает экземпляр класса Event.
Usage:
arm1.control_stopped(callback, arg)
Параметр |
Описание |
|---|---|
|
Ранее определенная функция, которая выполняется при включении управления остановкой. |
|
Необязательно. Кортеж, содержащий аргументы для передачи в функцию обратного вызова. См. Использование функций с параметрами для получения дополнительной информации. |
# Define a function to run when control stop is enabled
def when_control_stopped():
brain.screen.print("The arm has been control stopped")
# Run when_control_stopped when the 6-Axis Arm is control stopped
arm1.control_stopped(when_control_stopped)
crashed#
crashed регистрирует функцию, которая запускается в случае ошибки 6-осевого манипулятора во время движения.
При обнаружении столкновения 6-осевой манипулятор останавливает движение двигателей и может казаться ослабленным. Это снижает нагрузку и помогает защитить двигатели от случайных повреждений.
Usage:
arm1.crashed(callback)
Параметр |
Описание |
|---|---|
|
Ранее определенная функция, которая запускается при обнаружении сбоя. |
# Define what happens if a crash is detected
def arm_crash():
brain.screen.print("Crash Detected")
# Run arm_crash when the 6-Axis Arm crashes
arm1.crashed(arm_crash)
Строители#
Arm#
Команда Arm создает объект 6-осевого манипулятора. 6-осевой манипулятор необходимо создать вручную в VEXcode V5, прежде чем его можно будет использовать в проекте.
Usage:
Arm(smartport)
Параметр |
Описание |
|---|---|
|
Интеллектуальный порт, к которому подключен 6-осевой манипулятор, обозначается как |
# Construct a 6-Axis Arm named arm1 with the Arm class
arm1 = Arm(Ports.PORT1)