Braço de 6 eixos#

Introdução#

O braço robótico de 6 eixos VEX é um manipulador robótico utilizado na célula de trabalho CTE. No VEXcode EXP, os métodos do braço permitem que um EXP Brain mova o braço de 6 eixos, rode o seu efetor final, verifique se os movimentos são possíveis e controle ferramentas acopladas, como a ferramenta de recolha magnética ou a ferramenta porta-canetas.

Esta página é para projetos CTE Workcell em que o Braço de 6 Eixos está ligado a um EXP Brain. Se estiver a utilizar o Braço de 6 Eixos sozinho com o CTE Tile, utilize em vez disso a página API do Braço CTE.

Os exemplos nesta página utilizam um braço de 6 eixos configurado denominado arm1.

Segue-se uma lista de todos os métodos disponíveis:

Ações — Mova o braço de 6 eixos para as posições ou orientações pretendidas.

  • move_to — Move o efetor final para uma coordenada x, y e z especificada.

  • move_inc — Move o efetor final por uma distância especificada a partir da sua posição atual.

  • move_end_effector_to — Roda o efetor final para uma orientação de guinada, rotação e inclinação especificada.

  • move_end_effector_inc — Roda o efetor final por uma quantidade especificada de guinada, rotação e inclinação.

Mutadores — Configure os movimentos, as ferramentas e os ajustes de controlo.

  • set_speed — Define a velocidade de movimento utilizada pelo braço de 6 eixos.

  • set_end_effector_type — Define o tipo de efetor final ligado ao braço de 6 eixos.

  • set_end_effector_magnet — Engata ou liberta a Ferramenta de Recolha Magnética.

  • set_pen_offset — Define o deslocamento do eixo z utilizado com a Ferramenta de Suporte de Canetas.

  • set_control_stop — Activa a paragem de controlo para o braço de 6 eixos.

  • set_timeout — Define o tempo limite utilizado pelos métodos de movimento do braço de 6 eixos.

Getters — Devolvem o estado do movimento, a posição, a orientação e os valores de ligação.

  • is_done — Retorna se o braço de 6 eixos terminou de se mover.

  • is_crashed — Retorna se o braço de 6 eixos colidiu durante o movimento.

  • get_x — Retorna a posição x actual do efetor final.

  • get_y — Retorna a posição y atual do efetor final.

  • get_z — Retorna a posição z atual do efetor final.

  • get_pitch — Retorna o tom atual do efetor final.

  • get_roll — Retorna o roll atual do efetor final.

  • get_yaw — Retorna o yaw atual do efetor final.

  • can_arm_reach_to — Retorna se o braço de 6 eixos consegue atingir uma posição especificada.

  • can_arm_reach_inc — Retorna se o braço de 6 eixos se pode mover uma distância especificada.

  • can_end_effector_reach_to — Retorna se o efetor final pode atingir uma orientação especificada.

  • can_end_effector_reach_inc — Retorna se o efetor final pode rodar por uma quantidade especificada.

  • get_timeout — Retorna o valor de tempo limite actual utilizado pelos métodos de movimento.

  • is_connected — Retorna se o Braço de 6 Eixos está ligado ao Cérebro EXP.

Callbacks — Executam funções quando ocorrem eventos de ativação do mecanismo de disparo.

  • control_stopped — Regista uma função para executar quando a paragem de controlo está activada.

  • crashed — Regista uma função para ser executada quando é detectada uma falha.

Construtor — Crie manualmente um objeto de braço de 6 eixos.

  • Arm — Cria um objeto de braço de 6 eixos.

Ações#

move_to#

move_to move o braço de 6 eixos para uma coordenada x, y e z especificada.

As coordenadas x, y e z descrevem a posição do efetor final no espaço tridimensional. Utilize can_arm_reach_to antes deste método se a posição alvo puder estar fora do espaço de trabalho alcançável do Braço de 6 Eixos.

Usage:
arm1.move_to(x, y, z, wait)

Parâmetro

Descrição

x

A coordenada x da posição do alvo em milímetros.

y

A coordenada y da posição do alvo em milímetros.

z

A coordenada z da posição do alvo em milímetros.

wait

Opcional. wait=True (padrão) faz com que o projeto espere até que o movimento esteja concluído antes de continuar. wait=False inicia o movimento e continua imediatamente para a linha de código seguinte.

# 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 move o braço de 6 eixos por uma distância especificada a partir da sua posição actual ao longo dos eixos x, y e z.

Utilize este método para se mover em relação ao local onde o efetor final está agora. Utilize can_arm_reach_inc antes deste método se o movimento puder colocar o Braço de 6 Eixos fora do seu espaço de trabalho alcançável.

Usage:
arm1.move_inc(x, y, z, wait)

Parâmetro

Descrição

x

A distância a percorrer ao longo do eixo x, em milímetros.

y

A distância a percorrer ao longo do eixo dos y, em milímetros.

z

A distância a percorrer ao longo do eixo z, em milímetros.

wait

Opcional. wait=True (padrão) faz com que o projeto espere até que o movimento esteja concluído antes de continuar. wait=False inicia o movimento e continua imediatamente para a linha de código seguinte.

# 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 roda o efetor final do braço de 6 eixos para uma orientação específica de guinada, rotação e inclinação.

A orientação descreve como o efetor final é rodado. yaw roda em torno do eixo z, roll roda em torno do eixo x e pitch roda em torno do eixo y.

Usage:
arm1.move_end_effector_to(yaw, roll, pitch, wait)

Parâmetro

Descrição

yaw

O ângulo de guinada alvo, em graus.

roll

O ângulo de inclinação alvo, em graus.

pitch

O ângulo de inclinação alvo, em graus.

wait

Opcional. wait=True (padrão) faz com que o projeto espere até que o movimento esteja concluído antes de continuar. wait=False inicia o movimento e continua imediatamente para a linha de código seguinte.

# 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 roda o efetor final do braço de 6 eixos numa quantidade especificada de guinada, rotação e inclinação a partir da sua orientação atual.

Utilize este método para rodar em relação à guinada, rotação ou inclinação atual do efetor final.

Usage:
arm1.move_end_effector_inc(yaw, roll, pitch, wait)

Parâmetro

Descrição

yaw

A variação do ângulo de guinada, em graus.

roll

A mudança de inclinação, em graus.

pitch

A mudança de tom, em graus.

wait

Opcional. wait=True (padrão) faz com que o projeto espere até que o movimento esteja concluído antes de continuar. wait=False inicia o movimento e continua imediatamente para a linha de código seguinte.

# Rotate the end effector -50 degrees in pitch
arm1.move_end_effector_inc(0, 0, -50)

Mutantes#

set_speed#

set_speed define a velocidade de movimento utilizada pelo braço de 6 eixos para os métodos de movimento.

A velocidade do braço de 6 eixos é definida para 50% no início de um projeto.

Usage:
arm1.set_speed(speed)

Parâmetro

Descrição

speed

A velocidade de movimento do braço de 6 eixos, de 1 a 100 por cento.

# Set the 6-Axis Arm speed to 30%
arm1.set_speed(30)

set_end_effector_type#

set_end_effector_type define o tipo de efetor final ligado ao braço de 6 eixos.

Quando o tipo de ferramenta final é alterado, o braço de 6 eixos ajusta automaticamente o seu deslocamento em z para corresponder à ferramenta selecionada. O tipo de ferramenta final é definido como MAGNET no início de um projeto.

Usage:
arm1.set_end_effector_type(type)

Parâmetro

Descrição

type

A ferramenta acoplada ao braço de 6 eixos é: MAGNET (Ferramenta de recolha de íman) ou PEN (Ferramenta porta-canetas).

# Set the end effector type to the Pen Holder Tool
arm1.set_end_effector_type(PEN)

set_end_effector_magnet#

set_end_effector_magnet engrena ou desengata a ferramenta de recolha magnética.

O estado do íman permanece ativo até que outro método set_end_effector_magnet o altere. O estado do íman é reposto em False no início de um projeto.

Usage:
arm1.set_end_effector_magnet(state)

Parâmetro

Descrição

state

O estado da Ferramenta de Recolha Magnética é: True para apanhar e segurar objetos ou False para largar qualquer objeto seguro e parar de apanhar novos objetos.

# 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 define o deslocamento do eixo z utilizado quando a ferramenta de suporte da caneta está ligada ao braço de 6 eixos.

Defina o tipo de efetor final para PEN antes de utilizar este método. Se a Ferramenta Suporte de Canetas não estiver selecionada, este método não terá qualquer efeito.

O deslocamento da caneta é a distância entre a parte superior do suporte da caneta e a ponta do marcador de quadro branco. No início de um projeto, o deslocamento da caneta é definido como 0Um deslocamento da caneta de 0 posiciona a origem do eixo z do braço no ponto onde o suporte da caneta se liga ao braço de 6 eixos.

Usage:
arm1.set_pen_offset(zOffset)

Parâmetro

Descrição

zOffset

O valor de deslocamento da caneta em milímetros.

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

O comando set_control_stop activa a paragem de controlo para o braço de 6 eixos.

Quando a paragem de controlo está ativada, o braço de 6 eixos interrompe imediatamente qualquer movimento e não executará mais nenhum método de movimento do braço até que o projeto seja reiniciado.

Usage:
arm1.set_control_stop(state)

Parâmetro

Descrição

state

Opcional. True (padrão) ativa a paragem de controlo. False não ativa a paragem de controlo.

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

set_timeout#

set_timeout define o valor de tempo limite utilizado ao mover o braço de 6 eixos.

Se uma ação não for concluída antes de ser atingido o tempo limite, o projeto continua para a linha de código seguinte.

Usage:
arm1.set_timeout(timeout, units)

Parâmetro

Descrição

timeout

O novo valor de tempo limite.

units

Opcional. A unidade de tempo: MSEC (milissegundos, predefinição), SECONDSou SEC.

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

Getters#

is_done#

is_done retorna se o braço de 6 eixos tiver terminado de se mover.

Este método é útil após um método de movimento ser chamado com wait=False.

  • True — O braço de 6 eixos terminou de se mover.

  • False — O braço de 6 eixos ainda se move.

Usage:
arm1.is_done()

Parâmetros

Descrição

Este método não tem parâmetros.

# 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 retorna se o braço de 6 eixos colidiu durante o movimento.

Quando é detetada uma colisão, o braço de 6 eixos interrompe o movimento do motor e pode parecer ficar inerte. Isto reduz a tensão e ajuda a proteger os motores contra danos acidentais.

  • True — O braço de 6 eixos sofreu uma avaria.

  • False — O braço de 6 eixos não colidiu.

Usage:
arm1.is_crashed()

Parâmetros

Descrição

Este método não tem parâmetros.

# 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 Signal Tower and Brain screen
        brain.screen.print("Crash Detected")
        signal_tower_2.set_color(SignalTower.GREEN, SignalTower.OFF)
        signal_tower_2.set_color(SignalTower.RED, SignalTower.ON)
        break

    wait(5, MSEC)

get_x#

get_x devolve a posição x atual do efetor final em milímetros.

Utilize este método para ler a posição atual do efetor final ao longo do eixo x.

Usage:
arm1.get_x()

Parâmetros

Descrição

Este método não tem parâmetros.

# Print the current x position of the 6-Axis Arm
brain.screen.print(arm1.get_x())

get_y#

get_y devolve a posição y atual do efetor final em milímetros.

Utilize este método para ler a posição atual do efetor final ao longo do eixo y.

Usage:
arm1.get_y()

Parâmetros

Descrição

Este método não tem parâmetros.

# Print the current y position of the 6-Axis Arm
brain.screen.print(arm1.get_y())

get_z#

get_z devolve a posição z atual do efetor final em milímetros.

Utilize este método para ler a posição atual do efetor final ao longo do eixo z.

Usage:
arm1.get_z()

Parâmetros

Descrição

Este método não tem parâmetros.

# Print the current z position of the 6-Axis Arm
brain.screen.print(arm1.get_z())

get_pitch#

get_pitch devolve a inclinação atual do efetor final em graus.

Usage:
arm1.get_pitch()

Parâmetros

Descrição

Este método não tem parâmetros.

# Print the current pitch of the end effector
brain.screen.print(arm1.get_pitch())

get_roll#

get_roll devolve a rotação atual do efetor final em graus.

Usage:
arm1.get_roll()

Parâmetros

Descrição

Este método não tem parâmetros.

# Print the current roll of the end effector
brain.screen.print(arm1.get_roll())

get_yaw#

get_yaw devolve o ângulo de guinada atual do efetor final em graus.

Usage:
arm1.get_yaw()

Parâmetros

Descrição

Este método não tem parâmetros.

# Print the current yaw of the end effector
brain.screen.print(arm1.get_yaw())

can_arm_reach_to#

valor para can_arm_reach_to indica se o braço de 6 eixos pode mover o efetor final para uma coordenada x, y e z especificada.

Utilize este método para verificar uma posição alvo antes de utilizar move_to.

  • True — O braço de 6 eixos consegue alcançar a posição solicitada.

  • False — O braço de 6 eixos não consegue alcançar a posição solicitada.

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

Parâmetro

Descrição

x

A coordenada x da posição do alvo em milímetros.

y

A coordenada y da posição do alvo em milímetros.

z

A coordenada z da posição do alvo em milímetros.

# 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 retorna se o braço de 6 eixos pode mover o efetor final por uma distância x, y e z especificada a partir da sua posição atual.

Utilize este método para verificar um movimento relativo antes de utilizar move_inc.

  • True — O braço de 6 eixos pode fazer o movimento solicitado.

  • False — O braço de 6 eixos não pode executar o movimento solicitado.

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

Parâmetro

Descrição

x

A distância a percorrer ao longo do eixo x, em milímetros.

y

A distância a percorrer ao longo do eixo dos y, em milímetros.

z

A distância a percorrer ao longo do eixo z, em milímetros.

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

valor para can_end_effector_reach_to indica se o efetor final pode rodar para uma orientação específica de guinada, rotação e inclinação.

Utilize este método para verificar uma orientação alvo antes de utilizar move_end_effector_to.

  • True — O efetor final consegue atingir a orientação solicitada.

  • False — O efetor final não consegue alcançar a orientação solicitada.

Usage:
arm1.can_end_effector_reach_to(yaw, roll, pitch)

Parâmetro

Descrição

yaw

O ângulo de guinada alvo, em graus.

roll

O ângulo de inclinação alvo, em graus.

pitch

O ângulo de inclinação alvo, em graus.

# 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 retorna se o efetor final pode rodar por uma quantidade especificada de guinada, rotação e inclinação a partir da sua orientação atual.

Utilize este método para verificar um movimento de orientação relativa antes de utilizar move_end_effector_inc.

  • True — O efetor final pode fazer a rotação solicitada.

  • False — O efetor final não consegue realizar a rotação solicitada.

Usage:
arm1.can_end_effector_reach_inc(yaw, roll, pitch)

Parâmetro

Descrição

yaw

A variação do ângulo de guinada, em graus.

roll

A mudança de inclinação, em graus.

pitch

A mudança de tom, em graus.

# 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 devolve o valor de tempo limite utilizado pelos métodos de movimento do braço de 6 eixos em milissegundos.

Usage:
arm1.get_timeout()

Parâmetros

Descrição

Este método não tem parâmetros.

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

is_connected#

is_connected retorna se o braço de 6 eixos está ligado ao cérebro EXP.

  • True — O braço de 6 eixos está ligado ao cérebro EXP.

  • False — O braço de 6 eixos não está ligado ao cérebro EXP.

Usage:
arm1.is_connected()

Parâmetros

Descrição

Este método não tem parâmetros.

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

Retornos de chamada#

control_stopped#

control_stopped regista uma função que é executada quando a paragem de controlo está activada.

Este método retorna uma instância da classe Event.

Usage:
arm1.control_stopped(callback, arg)

Parâmetro

Descrição

callback

Uma função previamente definida que é executada quando a paragem de controlo é activada.

arg

Opcional. Uma tupla contendo argumentos para passar para a função de callback. Consulte Utilizar funções com parâmetros para obter mais informações.

# 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 regista uma função que é executada quando o braço de 6 eixos colide durante o movimento.

Quando é detetada uma colisão, o braço de 6 eixos interrompe o movimento do motor e pode parecer ficar inerte. Isto reduz a tensão e ajuda a proteger os motores contra danos acidentais.

Usage:
arm1.crashed(callback)

Parâmetro

Descrição

callback

Uma função previamente definida que é executada quando é detectada uma avaria.

# Define what happens if a crash is detected
def arm_crash():
    brain.screen.print("Crash Detected")
    signal_tower_2.set_color(SignalTower.RED, SignalTower.ON)

# Run arm_crash when the 6-Axis Arm crashes
arm1.crashed(arm_crash)

Construtores#

Arm#

O comando Arm cria um objeto de braço de 6 eixos.

Usage:
Arm(smartport)

Parâmetro

Descrição

smartport

A porta inteligente à qual o braço de 6 eixos está ligado é escrita como Ports.PORTx, onde x é o número da porta.

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