AgileX Piper
Especificaciones Técnicas
Especificaciones de hardware completas, referencia de temas ROS2, resumen de API de piper_sdk y guía de solución de problemas.
Especificaciones Mecánicas
| Especificación | Valor |
|---|---|
| Grados de libertad | 6 DOF + pinza opcional |
| Rango | ~600 mm |
| Carga máxima | ~1.5 kg |
| Repetibilidad | ±0.1 mm |
| Factor de forma | Compacto de mesa / escritorio |
| Multi-brazo | Maestro-esclavo de doble brazo a través de interfaces CAN separadas |
| Fabricante | AgileX Robotics |
Eléctrico y Comunicación
| Especificación | Valor |
|---|---|
| Fuente de Alimentación | 24 VCC |
| Comunicación | Autobús CAN: 1.000.000 bps (1 Mbps) |
| Interfaz de Host | Adaptador USB a CAN (por ejemplo, CANable, GS_USB) |
| interfaz de linux | SocketCAN (can0, can1, …) |
Software y Control
| Especificación | Valor |
|---|---|
| Modos de Control | Posición de la articulación, pose del efector final, pinza |
| El SDK de Python | pip3 install piper_sdk — agilexrobotics/piper_sdk |
| Paquete ROS | agilexrobotics/piper_ros (ROS Noetic + MoveIt) |
| Simulación | Gazebo a través de piper_gazebo.launch |
| URDF | piper_description.urdf (firmware ≥ S-V1.6-3) |
| Soporte de SO | Ubuntu 18.04, 20.04, 22.04 |
| Versión de Python | Python 3.6+ |
Límites de las articulaciones
| Articulación | Mín (grados) | Máx (grados) |
|---|---|---|
| Articulación 1 | −175 | +175 |
| Articulación 2 | −90 | +135 |
| Articulación 3 | −150 | +80 |
| Articulación 4 | −175 | +175 |
| Articulación 5 | −90 | +90 |
| Articulación 6 | −175 | +175 |
Temas y servicios de ROS
Temas y servicios estándar expuestos por piper_ros después de lanzar start_single_piper.launch.
| Tema / Servicio | Tipo | Dirección | Descripción |
|---|---|---|---|
/joint_states |
sensor_msgs/JointState | Sub (enviar comandos) | Comandos de posición de la articulación — suscribirse para enviar objetivos de movimiento al brazo |
/arm_status |
piper_msgs/ArmStatus | Pub (retroalimentación) | Retroalimentación del estado del brazo: habilitado/deshabilitado, indicadores de error, posiciones actuales de las articulaciones |
/end_pose |
geometry_msgs/Pose | Pub (retroalimentación) | Retroalimentación de la pose del efector final en el espacio cartesiano (posición + cuaternión) |
/enable_srv |
std_srvs/SetBool | Servicio | Permitir (true) o deshabilitar (false) todas las articulaciones del brazo |
/go_zero_srv |
std_srvs/Trigger | Servicio | Ordenar al brazo que se mueva a la posición cero/inicial |
/gripper_srv |
piper_msgs/GripperCmd | Servicio | Establecer la posición del agarre (0 = abierto, máximo = completamente cerrado) |
/stop_srv |
std_srvs/Trigger | Servicio | Detener todo movimiento de las articulaciones inmediatamente (parada de emergencia a través de ROS) |
/reset_srv |
std_srvs/Trigger | Servicio | Restablecer errores del brazo y volver a habilitar después de una condición de falla |
Referencia de la API de piper_sdk
Métodos clave en el C_PiperInterface clase. Inicializar con piper = C_PiperInterface("can0").
| Método | Descripción |
|---|---|
ConnectPort() |
Abrir la interfaz CAN y comenzar el hilo de comunicación |
EnableArm(7) |
Habilitar todas las 6 articulaciones y el agarre (máscara de bits; 7 = todas) |
DisableArm(7) |
Deshabilitar todas las articulaciones — siempre llamar cuando se haya terminado o antes de desconectar |
EmergencyStop() |
Detener inmediatamente todo movimiento conjunto |
MotionCtrl_2(j1, j2, j3, j4, j5, j6) |
Enviar un comando de posición de junta de 6 DOF (ángulos en grados) |
GetArmJointMsgs() |
Leer las posiciones, velocidades y torques actuales de las juntas |
GetArmEndPoseMsgs() |
Leer la pose cartesiana actual del efector final |
GripperCtrl(position, speed) |
Establecer la posición del agarre (0 = abierto) y la velocidad |
GetArmGripperMsgs() |
Leer el estado actual del agarre y la retroalimentación de posición |
Solución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
OSError: [Errno 19] No such device |
Interfaz CAN no activa | Ejecutar sudo ip link set can0 up y verificar con ifconfig can0 |
| El brazo no responde a los comandos | El brazo no está en modo esclavo o no está habilitado | Llamar piper.EnableArm(7) después de conectar. Confirmar que el jumper de modo esclavo está configurado correctamente en el brazo. |
| La retroalimentación de la junta lee ceros | Discrepancia en la tasa de bits | Asegurarse de que el bitrate de la interfaz CAN sea exactamente 1000000. Volver a ejecutar ip link set can0 type can bitrate 1000000. |
can.CanError: Failed to transmit |
Bus CAN no terminado | Asegúrese de que los resistores de terminación de 120 ohmios estén presentes en ambos extremos del bus CAN. Active el terminador interno de Piper a través del interruptor DIP. |
| Modelo de robot URDF incorrecto en RViz | No coincide el firmware | Firmware < S-V1.6-3: usar piper_description_old.urdf. Firmware más reciente: usar piper_description.urdf. |
| Permiso denegado en can0 | Usuario no en dialout grupo |
SocketCAN requiere permisos de root o apropiados. Ejecute comandos con sudo o configure reglas de udev. |
| Teleoperación VR: el brazo se excede / golpea límites | scaleFactor demasiado alto en Unity |
Reducir scaleFactor en la aplicación Unity y volver a probar de forma incremental. El espacio de trabajo de Piper es más pequeño que el de xArm. |
Repositorios de GitHub
| Repositorio | Descripción |
|---|---|
| agilexrobotics/piper_sdk | SDK oficial de Python. Instalar: pip3 install piper_sdk. Incluye demostraciones, especificación de interfaz (INTERFACE_V2.MD), y guía de brazo dual. |
| agilexrobotics/piper_ros | Paquete ROS Noetic con MoveIt, simulación de Gazebo, URDF y temas / servicios estándar de ROS. |