AgileX Piper
Especificações Técnicas
Especificações de hardware completas, referência de tópicos ROS2, resumo da API piper_sdk e guia de solução de problemas.
Especificações Mecânicas
| Especificação | Valentia |
|---|---|
| Graus de Liberdade | 6 DOF + garra opcional |
| Alcance | ~600 mm |
| Carga Máxima | ~1,5kg |
| Repetibilidade | ±0,1mm |
| Fator de Forma | Compacto para mesa/desktop |
| Multi-braço | Mestre-escravo de braço duplo via interfaces CAN separadas |
| Fabricante | AgileX Robotics |
Elétrico e Comunicação
| Especificação | Valentia |
|---|---|
| Fonte de Alimentação | 24 V DC |
| Comunicação | Barramento CAN — 1.000.000 bps (1 Mbps) |
| Interface do Host | Adaptador USB para CAN (por exemplo, CANable, GS_USB) |
| InterfaceLinux | SocketCAN (can0, can1, …) |
Software e Controle
| Especificação | Valentia |
|---|---|
| Modos de Controle | Posição da junta, pose do efetor final, garra |
| SDK Python | pip3 install piper_sdk — agilexrobotics/piper_sdk |
| Pacote ROS | agilexrobotics/piper_ros (ROS Noetic + MoveIt) |
| Simulação | Gazebo via piper_gazebo.launch |
| URDF | piper_description.urdf (firmware ≥ S-V1.6-3) |
| Suporte a SO | Ubuntu 18.04, 20.04, 22.04 |
| Versão do Python | Python 3.6+ |
Limites das Juntas
| Junta | Meu (graus) | Máx (graus) |
|---|---|---|
| Junta 1 | −175 | +175 |
| Junta 2 | −90 | +135 |
| Junta 3 | −150 | +80 |
| Junta 4 | −175 | +175 |
| Junta 5 | −90 | +90 |
| Junta 6 | −175 | +175 |
Tópicos e Serviços ROS
Tópicos e serviços padrão expostos por piper_ros após o lançamento start_single_piper.launch.
| Tópico / Serviço | Tipo | Direção | Descrição |
|---|---|---|---|
/joint_states |
sensor_msgs/JointState | Sub (enviar comandos) | Comandos de posição da junta — inscreva-se para enviar alvos de movimento para o braço |
/arm_status |
piper_msgs/ArmStatus | Pub (feedback) | Feedback do estado do braço: habilitado/desabilitado, flags de erro, posições atuais das juntas |
/end_pose |
geometry_msgs/Pose | Pub (feedback) | Feedback da pose do efetor final no espaço cartesiano (posição + quaternion) |
/enable_srv |
std_srvs/SetBool | Serviço | Habilitar (true) ou desabilitar (false) todas as juntas do braço |
/go_zero_srv |
std_srvs/Trigger | Serviço | Comandar o braço para mover-se para a posição zero/inicial |
/gripper_srv |
piper_msgs/GripperCmd | Serviço | Definir a posição do gripper (0 = aberto, máximo = totalmente fechado) |
/stop_srv |
std_srvs/Trigger | Serviço | Parar todo o movimento das juntas imediatamente (parada de emergência via ROS) |
/reset_srv |
std_srvs/Trigger | Serviço | Redefinir erros do braço e reabilitar após uma condição de falha |
Referência da API piper_sdk
Métodos principais na C_PiperInterface classe. Inicializar com piper = C_PiperInterface("can0").
| Método | Descrição |
|---|---|
ConnectPort() |
Abrir a interface CAN e iniciar a thread de comunicação |
EnableArm(7) |
Habilitar todas as 6 juntas e o gripper (máscara de bits; 7 = todas) |
DisableArm(7) |
Desabilitar todas as juntas — sempre chamar quando terminar ou antes de desconectar |
EmergencyStop() |
Interrompa imediatamente todo o movimento conjunto |
MotionCtrl_2(j1, j2, j3, j4, j5, j6) |
Envie um comando de posição de junta 6-DOF (ângulos em graus) |
GetArmJointMsgs() |
Leia as posições, velocidades e torques atuais das juntas |
GetArmEndPoseMsgs() |
Leia a pose cartesiana atual do efetor final |
GripperCtrl(position, speed) |
Defina a posição do gripper (0 = aberto) e a velocidade |
GetArmGripperMsgs() |
Leia o estado atual do gripper e o feedback de posição |
Solução de Problemas
| Sintoma | Causa provável | Correção |
|---|---|---|
OSError: [Errno 19] No such device |
Interface CAN não está ativa | Executar sudo ip link set can0 up e verifique com ifconfig can0 |
| O braço não responde aos comandos | O braço não está em modo escravo ou não está habilitado | Chamar piper.EnableArm(7) após conectar. Confirme que o jumper do modo escravo está configurado corretamente no braço. |
| O feedback da junta lê todos os zeros | Incompatibilidade de taxa de bits | Certifique-se de que a taxa de bits da interface CAN é exatamente 1000000. Execute novamente ip link set can0 type can bitrate 1000000. |
can.CanError: Failed to transmit |
Barramento CAN não está terminado | Certifique-se de que resistores de terminação de 120 ohms estejam presentes em ambas as extremidades do barramento CAN. Ative o terminador interno do Piper via o DIP switch. |
| Modelo de robô URDF incorreto no RViz | Incompatibilidade de firmware | Firmware < S-V1.6-3: use piper_description_old.urdf. Firmware mais recente: use piper_description.urdf. |
| Permissão negada em can0 | Usuário não está em dialout grupo |
SocketCAN requer root ou permissões apropriadas. Execute comandos com sudo ou configure regras udev. |
| Teleop VR: braço ultrapassa / atinge limites | scaleFactor muito alto no Unity |
Reduza scaleFactor no aplicativo Unity e re-teste incrementalmente. O espaço de trabalho do Piper é menor que o do xArm. |
Repositórios do GitHub
| Repositório | Descrição |
|---|---|
| agilexrobotics/piper_sdk | SDK oficial do Python. Instale: pip3 install piper_sdk. Inclui demos, especificação da interface (INTERFACE_V2.MD), e guia de braço duplo. |
| agilexrobotics/piper_ros | Pacote ROS Noetic com MoveIt, simulação Gazebo, URDF e tópicos / serviços ROS padrão. |