AgileX Piper
Technische Spezifikationen
Vollständige Hardware-Spezifikationen, ROS2-Themenreferenz, Piper_sdk-API-Zusammenfassung und Leitfaden zur Fehlerbehebung.
Mechanische Spezifikationen
| Spez | Wert |
|---|---|
| Freiheitsgrade | 6 DOF + optionaler Greifer |
| Erreichen | ~600 mm |
| Maximale Nutzlast | ~1,5 kg |
| Wiederholbarkeit | ±0,1 mm |
| Formfaktor | Kompakte Tischplatte/Desktop |
| Mehrarmig | Doppelarmiger Master-Slave über separate CAN-Schnittstellen |
| Herstellerin | AgileX Robotics |
Elektrik und Kommunikation
| Spez | Wert |
|---|---|
| Stromversorgung | 24 V DC |
| Kommunikation | CAN-Bus – 1.000.000 bps (1 Mbit/s) |
| Host-Schnittstelle | USB-zu-CAN-Adapter (z. B. CANable, GS_USB) |
| Linux-Schnittstelle | SocketCAN (can0, can1, …) |
Software & Steuerung
| Spez | Wert |
|---|---|
| Steuermodi | Gelenkposition, Endeffektorhaltung, Greifer |
| Python-SDK | pip3 install piper_sdk — agilexrobotics/piper_sdk |
| ROS-Paket | agilexrobotics/piper_ros (ROS Noetic + MoveIt) |
| Simulation | Pavillon entfernt piper_gazebo.launch |
| URDF | piper_description.urdf (Firmware ≥ S-V1.6-3) |
| Betriebssystemunterstützung | Ubuntu 18.04, 20.04, 22.04 |
| Python-Version | Python 3.6+ |
Gemeinsame Grenzen
| Gemeinsam | mein (du) | Max (du) |
|---|---|---|
| Gelenk 1 | −175 | +175 |
| Gelenk 2 | −90 | +135 |
| Gelenk 3 | −150 | +80 |
| Gelenk 4 | −175 | +175 |
| Gelenk 5 | −90 | +90 |
| Gelenk 6 | −175 | +175 |
ROS-Themen und -Dienste
Standardthemen und -dienste bereitgestellt von piper_ros nach dem Start start_single_piper.launch.
| Thema / Service | Typ | Richtung | Beschreibung |
|---|---|---|---|
/joint_states |
sensor_msgs/JointState | Sub (Befehle senden) | Gelenkpositionsbefehle – Abonnieren Sie, um Bewegungsziele an den Arm zu senden |
/arm_status |
piper_msgs/ArmStatus | Kneipe (Feedback) | Armzustandsrückmeldung: aktiviert/deaktiviert, Fehlerflags, aktuelle Gelenkpositionen |
/end_pose |
Geometrie_msgs/Pose | Kneipe (Feedback) | Endeffektor-Pose-Feedback im kartesischen Raum (Position + Quaternion) |
/enable_srv |
std_srvs/SetBool | Service | Aktivieren (true) oder deaktivieren (false) alle Armgelenke |
/go_zero_srv |
std_srvs/Trigger | Service | Befehlen Sie dem Arm, sich in die Null-/Ausgangsposition zu bewegen |
/gripper_srv |
piper_msgs/GripperCmd | Service | Greiferposition einstellen (0 = offen, max = vollständig geschlossen) |
/stop_srv |
std_srvs/Trigger | Service | Alle Gelenkbewegungen sofort stoppen (Notstopp über ROS) |
/reset_srv |
std_srvs/Trigger | Service | Setzen Sie Armfehler zurück und aktivieren Sie sie nach einem Fehlerzustand erneut |
Piper_sdk-API-Referenz
Schlüsselmethoden zum C_PiperInterface Klasse. Initialisieren mit piper = C_PiperInterface("can0").
| Verfahren | Beschreibung |
|---|---|
ConnectPort() |
Öffnen Sie die CAN-Schnittstelle und starten Sie den Kommunikationsthread |
EnableArm(7) |
Alle 6 Gelenke und Greifer aktivieren (Bitmaske; 7 = alle) |
DisableArm(7) |
Deaktivieren Sie alle Verbindungen – rufen Sie immer an, wenn Sie fertig sind oder bevor Sie die Verbindung trennen |
EmergencyStop() |
Stoppen Sie sofort alle gemeinsamen Bewegungen |
MotionCtrl_2(j1, j2, j3, j4, j5, j6) |
Senden Sie einen 6-DOF-Gelenkpositionsbefehl (Winkel in Grad) |
GetArmJointMsgs() |
Lesen Sie aktuelle Gelenkpositionen, Geschwindigkeiten und Drehmomente ab |
GetArmEndPoseMsgs() |
Lesen Sie die aktuelle kartesische Pose des Endeffektors |
GripperCtrl(position, speed) |
Greiferposition (0 = offen) und Geschwindigkeit einstellen |
GetArmGripperMsgs() |
Lesen Sie den aktuellen Greiferzustand und die Positionsrückmeldung |
Fehlerbehebung
| Symptom | Wahrscheinliche Ursache | Fix |
|---|---|---|
OSError: [Errno 19] No such device |
CAN-Schnittstelle nicht aktiv | Laufen sudo ip link set can0 up und überprüfen Sie mit ifconfig can0 |
| Arm reagiert nicht auf Befehle | Scharfschaltung nicht im Slave-Modus oder nicht aktiviert | Anruf piper.EnableArm(7) nach dem Anschließen. Bestätigen Sie, dass der Slave-Modus-Jumper am Arm richtig gesetzt ist. |
| Die gemeinsame Rückmeldung liest alle Nullen | Nicht übereinstimmende Bitrate | Stellen Sie sicher, dass die Bitrate der CAN-Schnittstelle genau 1000000 beträgt. Führen Sie den Vorgang erneut aus ip link set can0 type can bitrate 1000000. |
can.CanError: Failed to transmit |
CAN-Bus nicht terminiert | Stellen Sie sicher, dass an beiden Enden des CAN-Busses 120-Ohm-Abschlusswiderstände vorhanden sind. Aktivieren Sie den internen Abschlusswiderstand des Piper über den DIP-Schalter. |
| Falsches URDF-Robotermodell in RViz | Firmware-Konflikt | Firmware < S-V1.6-3: verwenden piper_description_old.urdf. Neuere Firmware: verwenden piper_description.urdf. |
| Berechtigung für can0 verweigert | Benutzer nicht da dialout Gruppe |
SocketCAN erfordert Root- oder entsprechende Berechtigungen. Befehle ausführen mit sudo oder udev-Regeln konfigurieren. |
| VR-Teleop: Arm überschreitet/stößt an Grenzen | scaleFactor zu hoch in Unity |
Reduzieren scaleFactor in der Unity-App und testen Sie es schrittweise erneut. Der Piper-Arbeitsbereich ist kleiner als xArm. |
GitHub-Repositorys
| Repository | Beschreibung |
|---|---|
| agilexrobotics/piper_sdk | Offizielles Python SDK. Installieren: pip3 install piper_sdk. Enthält Demos, Schnittstellenspezifikationen (INTERFACE_V2.MD) und Doppelarmführung. |
| agilexrobotics/piper_ros | ROS Noetic-Paket mit MoveIt, Gazebo-Simulation, URDF und Standard-ROS-Themen/-Diensten. |