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.
Configuração do CAN Bus e Host
~15 minAgileX 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.
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
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.
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.
Instalar piper_sdk
~20 minA 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.")
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.
Primeiro Movimento
~20 minCom 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)
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.")
Integração ROS2 / MoveIt
~60 minA 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
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.
Teleoperação VR Meta Quest 3
~90 minO 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
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
-
Inicie a interface CAN e habilite o braço.
sudo ip link set can0 type can bitrate 1000000 sudo ip link set can0 up -
Crie um
PiperControllerenvoltórioC_PiperInterface. Substitua oXArmControllerclasse em sua pilha de teleoperação existente por um novopiper_controller.py. Implementosconnect(),set_pose(x, y, z, roll, pitch, yaw),set_gripper(value), eemergency_stop()usando chamadas do piper_sdk. -
Inicie o servidor UDP Python no PC do robô.
O servidor escuta nas portas UDP 8888/8889 e encaminha os pacotes de pose da mão recebidos para o Piper.python3 teleoperation_main.py --robot-type piper -
Inicie o aplicativo Unity no Quest 3 e conecte-se ao endereço IP do PC.
Ajuste
positionOffset,rotationOffset, escaleFactorno Unity para corresponder ao espaço de trabalho do Piper. Esses parâmetros diferem do xArm devido ao envelope de alcance menor do Piper.
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.
Coleta de Dados
Em andamentoUma 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_rosgravaçã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
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.