Guía de Configuración
Desde el inicio del bus CAN hasta el primer episodio teleoperado. Cubre piper_sdk, lanzamiento de ROS2 y teleoperación en VR con Meta Quest 3.
Configuración de CAN Bus y Host
~15 minEl AgileX Piper se comunica exclusivamente a través de Autobús CAN a 1 Mbps. Necesitas un adaptador USB a CAN (por ejemplo, CANable, GS_USB) para exponer una interfaz SocketCAN en tu host Linux.
Activa la interfaz CAN
Conecta el adaptador USB a CAN, luego ejecuta:
# 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 el repositorio incluye un can_activate.sh asistente. Ejecútalo como: bash can_activate.sh can0 1000000. Este es el mismo script utilizado por piper_ros.
can1, can2, etc. Estados Unidos ip link show para listar todas las interfaces CAN y pasar el nombre correcto a C_PiperInterface.
Soporte del sistema operativo
Ubuntu 18.04, 20.04 y 22.04 son las plataformas oficialmente probadas. Se requiere Python 3.6+.
Instalar piper_sdk
~20 minLa piper_sdk La biblioteca de Python maneja el enmarcado CAN, la retroalimentación del estado conjunto y el control del gripper. Instalar desde PyPI (recomendado) o desde la fuente.
# 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')"
El SDK se instala automáticamente python-can como una dependencia para la comunicación del bus CAN.
Conectar y habilitar
La C_PiperInterface la clase es el punto de entrada principal. Después de conectar, el brazo debe ser habilitado antes de aceptar comandos de movimiento. EnableArm(7) habilita las seis articulaciones más el 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/. Comienza con demo_joint_ctrl.py para verificar el movimiento básico antes de construir tu propio bucle de control.
Primer movimiento
~20 minCon el brazo conectado y habilitado, lee el estado de las articulaciones y envía tu primer comando de posición.
Leer el estado de las articulaciones
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)
Enviar un comando de posición de articulación
# 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
Control del gripper
# 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) cuando termines. Un brazo habilitado responde inmediatamente a cualquier comando, incluidos los erróneos de errores o paquetes perdidos.
Configuración de brazo dual (maestro-esclavo)
Para configuraciones bimanuales, conecta dos Pipers en 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.")
Integración de ROS2 / MoveIt
~60 minLa piper_ros el paquete proporciona un controlador completo de ROS Noetic con planificación de movimiento de MoveIt y simulación de Gazebo. Envuelve piper_sdk internamente y expone interfaces estándar de ROS.
Instalar dependencias
# 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
Lanzar
# 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
Planificación de 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 requieren el legado piper_description_old.urdf archivo. El firmware más reciente utiliza el estándar piper_description.urdf. Verifique la etiqueta de la versión del firmware en la base del brazo antes de cargar los modelos de ROS.
Ver el Página de especificaciones para la tabla completa de temas y servicios de ROS.
Teleoperación VR Meta Quest 3
~90 minEl Piper se puede controlar en tiempo real utilizando un Meta Quest 3 auricular. La arquitectura utiliza UDP a través de su red local: el Quest ejecuta una aplicación de Unity que transmite datos de la pose de la mano, y un servidor de Python en la PC del robot traduce eso en comandos del SDK de Piper.
Arquitectura
El lado de Unity (VRHandPoseSender.cs, VRGripperController.cs, VRTeleoperationManager.cs) y la capa UDP son completamente reutilizables de configuraciones de xArm: solo se necesita cambiar el módulo del controlador del robot.
Pasos de configuración
-
Inicie la interfaz CAN y habilite el brazo.
sudo ip link set can0 type can bitrate 1000000 sudo ip link set can0 up -
Cree un
PiperControllerenvoltorioC_PiperInterface. Reemplace elXArmControllerclase en su pila de teleoperación existente con un nuevopiper_controller.py. Implementosconnect(),set_pose(x, y, z, roll, pitch, yaw),set_gripper(value), yemergency_stop()utilizando llamadas de piper_sdk. -
Inicie el servidor UDP de Python en la PC del robot.
El servidor escucha en los puertos UDP 8888/8889 y reenvía los paquetes de pose de mano recibidos al Piper.python3 teleoperation_main.py --robot-type piper -
Inicie la aplicación de Unity en el Quest 3 y conéctese a la dirección IP de la PC.
Ajuste
positionOffset,rotationOffset, yscaleFactoren Unity para que coincida con el espacio de trabajo del Piper. Estos parámetros difieren de xArm debido al menor alcance del Piper.
scaleFactor en Unity para evitar que el brazo golpee los límites de las articulaciones durante la teleoperación. Comience con una escala conservadora y aumente gradualmente mientras monitorea los ángulos de las articulaciones.
Recolección de Datos
En cursoUna vez que la teleoperación esté funcionando, use la plataforma SVRC para grabar, etiquetar y exportar demostraciones de manipulación.
- Grabar episodios teleoperados a través del servidor UDP de Python o directamente a través de
piper_rosgrabación de bolsa - Exportar en RLDS o LeRobot formato para el entrenamiento de políticas posteriores
- Usa el Plataforma SVRC para gestionar conjuntos de datos, realizar controles de calidad y entrenar modelos de Política ACT o Difusión
piper.GetArmJointMsgs() y piper.GetArmEndPoseMsgs() a ~50 Hz en un hilo de fondo para capturar el estado sincronizado de las juntas y del efector final durante la teleoperación.