6-осьова рука#

Вступ#

6-осьова роботизована рука VEX може переміщувати кінцевий ефектор у тривимірному просторі, контролювати його орієнтацію за допомогою обертань по осі рисьбування, крен та тангаж, а також використовувати підключені інструменти, такі як інструмент магнітного захоплення або інструмент тримача ручки.

6-осьовий маніпулятор не налаштовано як пристрій у VEXcode V5. Щоб використовувати його в проекті VEX V5 на Python, вручну створіть об’єкт Arm у коді з інтелектуальним портом, до якого підключено 6-осьовий маніпулятор.

У прикладах на цій сторінці використовується ручно побудована 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 — Повертає, чи завершив рух 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.

Зворотні виклики — Запускають функції, коли відбуваються події arm.

  • 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

Координата x цільового положення в міліметрах.

y

Y-координата цільового положення в міліметрах.

z

Z-координата цільового положення в міліметрах.

wait

Необов’язково. wait=True (за замовчуванням) змушує проєкт чекати завершення руху, перш ніж продовжити. wait=False запускає рух і негайно продовжується до наступного рядка коду.

# 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

Відстань, на яку потрібно переміститися вздовж осі x, у міліметрах.

y

Відстань, на яку потрібно переміститися вздовж осі Y, у міліметрах.

z

Відстань, на яку потрібно переміститися вздовж осі z, у міліметрах.

wait

Необов’язково. wait=True (за замовчуванням) змушує проєкт чекати завершення руху, перш ніж продовжити. wait=False запускає рух і негайно продовжується до наступного рядка коду.

# 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)

Параметр

Опис

yaw

Кут рискування цілі, у градусах.

roll

Кут крену цілі, у градусах.

pitch

Кут тангажу цілі, у градусах.

wait

Необов’язково. wait=True (за замовчуванням) змушує проєкт чекати завершення руху, перш ніж продовжити. wait=False запускає рух і негайно продовжується до наступного рядка коду.

# 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)

Параметр

Опис

yaw

Зміна кута рисьхання, у градусах.

roll

Зміна крену, у градусах.

pitch

Зміна висоти тону, у градусах.

wait

Необов’язково. wait=True (за замовчуванням) змушує проєкт чекати завершення руху, перш ніж продовжити. wait=False запускає рух і негайно продовжується до наступного рядка коду.

# 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)

Параметр

Опис

speed

Швидкість руху 6-осьової руки від 1 до 100 відсотків.

# 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)

Параметр

Опис

type

Інструмент, прикріплений до 6-осьового маніпулятора: MAGNET (інструмент магнітного захоплення) або PEN (інструмент тримача ручки).

# 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)

Параметр

Опис

state

Стан інструмента магнітного підбирання: True для підбирання та утримання предметів або False для відпускання будь-якого утримуваного предмета та припинення підбирання нових предметів.

# 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 Якщо інструмент «Тримач пера» не вибрано, цей метод не матиме ефекту.

Зсув пера – це відстань від верхньої частини інструмента «Тримач пера» до кінчика маркера сухого стирання. На початку проєкту зсув пера встановлюється на 0Зсув пера 0 розміщує початок координат осі z кронштейна в точці, де інструмент «Тримач пера» з’єднується з 6-осьовим кронштейном.

Usage:
arm1.set_pen_offset(zOffset)

Параметр

Опис

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)

Параметр

Опис

state

Необов’язково. True (за замовчуванням) вмикає зупинку керування. False не вмикає зупинку керування.

# Stop the 6-Axis Arm and prevent further movement
arm1.set_control_stop()

set_timeout#

set_timeout встановлює значення тайм-ауту, яке використовується під час переміщення 6-осьового маніпулятора.

Якщо рух не завершується до досягнення тайм-ауту, проєкт продовжується до наступного рядка коду.

Usage:
arm1.set_timeout(timeout, units)

Параметр

Опис

timeout

Нове значення часу очікування.

units

Необов’язково. Одиниця вимірювання часу: MSEC (мілісекунди, за замовчуванням), SECONDSабо SEC.

# Set the 6-Axis Arm timeout to 2 seconds
arm1.set_timeout(2, SECONDS)

Геттери#

is_done#

is_done повертає, чи завершив рух 6-осьового маніпулятора.

Цей метод корисний після виклику методу переміщення з wait=False.

  • True — Рух 6-осьового маніпулятора завершено.

  • False — 6-осьовий маніпулятор все ще рухається.

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

Координата x цільового положення в міліметрах.

y

Y-координата цільового положення в міліметрах.

z

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 повертає, чи може 6-осьовий маніпулятор перемістити кінцевий ефектор на задану відстань x, y та z від його поточного положення.

Використовуйте цей метод для перевірки відносного руху перед використанням move_inc.

  • True — 6-осьовий маніпулятор може виконати запитуваний рух.

  • False — 6-осьовий маніпулятор не може виконати запитуваний рух.

Usage:
arm1.can_arm_reach_inc(x, y, z)

Параметр

Опис

x

Відстань, на яку потрібно переміститися вздовж осі x, у міліметрах.

y

Відстань, на яку потрібно переміститися вздовж осі Y, у міліметрах.

z

Відстань, на яку потрібно переміститися вздовж осі 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)

Параметр

Опис

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)

Параметр

Опис

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 повертає значення тайм-ауту, яке використовується методами руху 6-осьової руки в мілісекундах.

Usage:
arm1.get_timeout()

Параметри

Опис

Цей метод не має параметрів.

# Print the current movement timeout in milliseconds
brain.screen.print(arm1.get_timeout())

is_connected#

is_connected повертає, чи підключено 6-осьову руку до V5 Brain.

  • True — 6-осьова рука підключена до мозку V5.

  • False — 6-осьова рука не підключена до V5 Brain.

Usage:
arm1.is_connected()

Параметри

Опис

Цей метод не має параметрів.

# Print whether the 6-Axis Arm is connected
brain.screen.print(arm1.is_connected())

Зворотні виклики#

control_stopped#

control_stopped реєструє функцію, яка виконується, коли ввімкнено зупинку керування.

Цей метод повертає екземпляр класу Event.

Usage:
arm1.control_stopped(callback, arg)

Параметр

Опис

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)

Параметр

Опис

callback

Раніше визначена function, яка виконується при виявленні збою.

# 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)

Параметр

Опис

smartport

Розумний порт, до якого підключено 6-осьовий маніпулятор, записується як Ports.PORTx, де x – номер порту.

# Construct a 6-Axis Arm named arm1 with the Arm class
arm1 = Arm(Ports.PORT1)