Guia de Configuração

Desde a ativação do barramento CAN até o primeiro episódio teleoperado. Cobre piper_sdk, lançamento ROS2 e teleoperação em VR Meta Quest 3.

1

Configuração do CAN Bus e Host

~15 min

AgileX Piper se comunica exclusivamente por meio de barramento CAN a 1 Mbps. Você precisa de um adaptador USB para CAN (por exemplo, CANable, GS_USB) para expor uma interface SocketCAN no seu host Linux.

Segurança em primeiro lugar Prenda fisicamente a base do braço a uma superfície estável antes de ligar. Mantenha os humanos fora do alcance total do braço (~600 mm de raio) durante o movimento.

Ativar uma interface CAN

Conecte o adaptador USB para CAN, em seguida, execute:

# Set bitrate and bring up the CAN interface
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up

# Verify the interface is active
ifconfig can0
Script de ativação automática. A piper_sdk o repositório inclui um can_activate.sh auxiliar. Execute-o como: bash can_activate.sh can0 1000000. Este é o mesmo script usado por piper_ros.
O nome da interface pode variar Se você tiver vários adaptadores USB para CAN conectados, a interface pode aparecer como can1, can2, etc. Use ip link show para listar todas as interfaces CAN e passe o nome correto para C_PiperInterface.

Suporte do sistema operacional

Ubuntu 18.04, 20.04 e 22.04 são as plataformas oficialmente testadas. Python 3.6+ é necessário.

2

Instalar piper_sdk

~20 min

A piper_sdk A biblioteca Python lida com a formatação CAN, feedback do estado das juntas e controle do gripper. Instale a partir do PyPI (recomendado) ou a partir do código-fonte.

# Option A: Install from PyPI (recommended)
pip3 install piper_sdk

# Option B: Install from source
git clone https://github.com/agilexrobotics/piper_sdk.git
cd piper_sdk
pip install -e .

# Verify installation
python3 -c "import piper_sdk; print('piper_sdk OK')"

O SDK instala automaticamente python-can como uma dependência para comunicação via barramento CAN.

Conecte e habilite

A C_PiperInterface a classe é o ponto de entrada principal. Após a conexão, o braço deve ser habilitado antes de aceitar comandos de movimento. EnableArm(7) habilita todas as seis juntas mais o gripper.

from piper_sdk import C_PiperInterface

# Initialize with the CAN interface name (default: "can0")
piper = C_PiperInterface("can0")

# Connect to the arm
piper.ConnectPort()

# Enable all joints (required before motion commands)
piper.EnableArm(7)

print("Piper connected and enabled.")
Scripts de demonstração. O SDK vem com demos prontas para rodar em piper_sdk/demo/V2/. Comece com demo_joint_ctrl.py para verificar o movimento básico antes de construir seu próprio loop de controle.
3

Primeiro Movimento

~20 min

Com o braço conectado e habilitado, leia o estado das juntas e envie seu primeiro comando de posição.

Leia o estado das juntas

import time

# Read joint angles in a polling loop
for _ in range(10):
    joint_state = piper.GetArmJointMsgs()
    print(joint_state)
    time.sleep(0.1)

# Read end-effector pose
end_pose = piper.GetArmEndPoseMsgs()
print(end_pose)

Envie um comando de posição da junta

# Move to a joint configuration (angles in degrees)
# Arguments: joint1, joint2, joint3, joint4, joint5, joint6
piper.MotionCtrl_2(
    0,      # joint 1
    0,      # joint 2
    90,     # joint 3
    0,      # joint 4
    0,      # joint 5
    0       # joint 6
)
time.sleep(2)  # wait for motion to complete

Controle da garra

# Open gripper
piper.GripperCtrl(0, 1000)

# Close gripper (check your gripper's max value)
piper.GripperCtrl(70, 1000)

# Read gripper state
gripper_state = piper.GetArmGripperMsgs()
print(gripper_state)
Desabilite quando terminar Sempre desabilite o braço com piper.DisableArm(7) quando terminar. Um braço habilitado responde imediatamente a qualquer comando — incluindo os errôneos de bugs ou pacotes perdidos.

Configuração de braço duplo (mestre-escravo)

Para configurações bimanual, conecte dois Pipers em interfaces CAN separadas:

piper_left  = C_PiperInterface("can0")
piper_right = C_PiperInterface("can1")

piper_left.ConnectPort()
piper_right.ConnectPort()

piper_left.EnableArm(7)
piper_right.EnableArm(7)

print("Both arms connected.")
4

Integração ROS2 / MoveIt

~60 min

A piper_ros o pacote fornece um driver completo do ROS Noetic com planejamento de movimento do MoveIt e simulação do Gazebo. Ele envolve piper_sdk internamente e expõe interfaces padrão do ROS.

Instalar dependências

# Install required ROS packages
sudo apt-get install -y \
  ros-noetic-moveit \
  ros-noetic-ruckig \
  ros-noetic-ompl

# Install Python CAN dependency
pip3 install python-can piper_sdk

Começar

# Step 1: Activate CAN interface
bash can_activate.sh can0 1000000

# Step 2: Launch the Piper control node
roslaunch piper start_single_piper.launch

# For dual-arm:
roslaunch piper start_double_piper.launch

Planejamento do MoveIt

# Launch MoveIt with RViz for interactive planning
roslaunch piper_moveit_config demo.launch

# Gazebo simulation (no physical arm required)
roslaunch piper piper_gazebo.launch
Nota de Firmware. Versões de firmware anteriores a S-V1.6-3 requerem o legado piper_description_old.urdf arquivo. Firmwares mais recentes usam o padrão piper_description.urdf. Verifique o rótulo da versão do firmware na base do braço antes de carregar os modelos ROS.

Veja o Página de especificações para a tabela completa de tópicos e serviços do ROS.

5

Teleoperação VR Meta Quest 3

~90 min

O Piper pode ser controlado em tempo real usando um Meta Quest 3 headset. A arquitetura usa UDP sobre sua rede local: o Quest executa um aplicativo Unity que transmite dados de pose da mão, e um servidor Python no PC do robô traduz isso em comandos do SDK do Piper.

Arquitetura

Meta Quest 3 (Unity)
↓ UDP – carrega 8888/8889
Servidor UDP Python (host do PC)
piper_sdk → C_PiperInterface
AgileX Piper (barramento CAN)

O lado Unity (VRHandPoseSender.cs, VRGripperController.cs, VRTeleoperationManager.cs) e a camada UDP são totalmente reutilizáveis de configurações xArm — apenas o módulo do controlador do robô precisa ser trocado.

Passos de configuração

  1. Inicie a interface CAN e habilite o braço.
    sudo ip link set can0 type can bitrate 1000000
    sudo ip link set can0 up
  2. Crie um PiperController envoltório C_PiperInterface. Substitua o XArmController classe em sua pilha de teleoperação existente por um novo piper_controller.py. Implementos connect(), set_pose(x, y, z, roll, pitch, yaw), set_gripper(value), e emergency_stop() usando chamadas do piper_sdk.
  3. Inicie o servidor UDP Python no PC do robô.
    python3 teleoperation_main.py --robot-type piper
    O servidor escuta nas portas UDP 8888/8889 e encaminha os pacotes de pose da mão recebidos para o Piper.
  4. Inicie o aplicativo Unity no Quest 3 e conecte-se ao endereço IP do PC. Ajuste positionOffset, rotationOffset, e scaleFactor no Unity para corresponder ao espaço de trabalho do Piper. Esses parâmetros diferem do xArm devido ao envelope de alcance menor do Piper.
Diferenças no sistema de coordenadas O espaço de trabalho do Piper é menor que o do xArm. Reduza scaleFactor no Unity para evitar que o braço atinja os limites das articulações durante a teleoperação. Comece com uma escala conservadora e aumente gradualmente enquanto monitora os ângulos das articulações.
Guia completo do Quest 3. Para instruções completas de configuração — instalando o aplicativo Unity, emparelhando com o PC e calibrando o rastreamento da mão — consulte o Guia de teleoperação VR do Quest 3.
6

Coleta de Dados

Em andamento

Uma vez que a teleoperação esteja funcionando, use a plataforma SVRC para gravar, rotular e exportar demonstrações de manipulação.

  • Grave episódios teleoperados via o servidor UDP Python ou diretamente através de piper_ros gravação de bag
  • Exportar em RLDS ou LeRobot formato para treinamento de políticas a jusante
  • Use o Plataforma SVRC para gerenciar conjuntos de dados, executar verificações de qualidade e treinar modelos de Política ACT ou Difusão
Dica. Usar piper.GetArmJointMsgs() e piper.GetArmEndPoseMsgs() a ~50 Hz em uma thread em segundo plano para capturar o estado sincronizado das juntas e do efetor final durante a teleoperação.
Plataforma Aberta → Wiki Completa do Desenvolvedor →

Precisa de Ajuda com Sua Configuração?

Nossa equipe está disponível para sessões práticas na instalação de Mountain View, CA.