Back to Robot Platforms
/ ROBOT PLATFORM · Learning platforms

AgileX PIPER Arm

AgileX PIPER is a compact CAN-bus 6-DoF arm common in low-cost embodied-AI data collection. Here is how its control stack works.

Updated Aug 20265 min read
SHORT ANSWER

PIPER is AgileX Robotics' compact 6-DoF manipulator, communicating over CAN bus and controlled through the piper_sdk Python package or the community and AgileX-maintained piper_ros driver. Its low cost and CAN-based control loop have made it a common low-cost arm in embodied-AI data collection rigs, often mounted on AgileX mobile bases.

PIPER occupies the same market niche as SO-101, the smaller Interbotix arms, and pre-assembled options like UFACTORY's xArm — a 6-DoF manipulator cheap enough to buy several of, aimed at teams building embodied-AI datasets rather than industrial deployment. Where it differs is the control layer: PIPER speaks CAN, not a serial-servo bus or a heavyweight vendor middleware, which makes it a common choice when a manipulator needs to be one component of a larger mobile or multi-arm rig rather than the entire system.

At roughly $2,000 as of 2026, PIPER sits close to SO-101 on price while being a fundamentally different kind of product: a single pre-assembled arm from a commercial robotics vendor rather than a 3D-printed, self-assembled kit. That trade-off — less hands-on build time, less transparency into the mechanical design — is worth weighing against what a program actually needs from its low-cost arm.

AgileX Robotics, the manufacturer, also sells mobile bases and quadrupeds, and PIPER shows up frequently bolted onto that hardware in embodied-AI papers and open datasets — the same pattern that puts a manipulator on a legged platform like Boston Dynamics Spot, just with a CAN arm instead of Spot's dedicated arm service — a byproduct of the arm's small footprint (4.2kg) and self-contained CAN interface being easy to integrate into a larger platform's existing bus.

Control interfaces that matter for data collection

PIPER is a 6-DoF arm rated for a 1.5kg payload at up to 626mm reach, with 0.1mm repeatability, communicating exclusively over its built-in CAN module at a 1 Mbps baud rate — there is no Ethernet, Wi-Fi, or USB-serial control path documented for the arm itself.

Two software layers sit on top of that CAN interface:

  • piper_sdk — AgileX's Python package (tested on 3.6, 3.8, and 3.10, installed via pip) that decodes CAN frames into arm state and accepts joint or Cartesian commands. It is the lowest-level supported interface and the one most third-party integrations build on.
  • piper_ros — a ROS driver that wraps piper_sdk and exposes the arm as standard ROS topics and services. AgileX documents both a ROS 1 (Noetic) workspace with MoveIt planning and Gazebo simulation, and ROS 2 support; community-maintained ROS 2 driver packages exist alongside it.

Because everything ultimately funnels through one CAN bus, the practical integration step most teams hit first is getting a USB-to-CAN adapter recognized as a SocketCAN interface on the host machine — a Linux-specific setup detail that is easy to underestimate if your team is used to USB-serial or Ethernet robots.

Teleoperation options

PIPER does not ship a bundled leader arm the way ALOHA-style kits do, so teleoperation is whatever you build on top of piper_ros or piper_sdk. In practice that means one of the same three patterns any bring your own rig integration falls into:

  • A separate leader arm, driving PIPER as the follower with joint targets sent over the ROS/SDK API — viable, but you are responsible for the joint-space mapping since PIPER was not designed as a kinematic match to any specific leader.
  • VR controller or hand-tracking retargeting, mapping an operator's wrist pose to a Cartesian target that piper_sdk converts to joint commands via inverse kinematics — flexible across different rig geometries, at the cost of retargeting error.
  • Space mouse or gamepad, rate-controlling the end effector — coarse but low-setup, useful for early bring-up before a full teleoperation rig exists.

The common thread is that PIPER's low-level interface is arm control, not human-input handling — whatever device you put in the loop, the CAN/SDK layer is only responsible for turning commands into joint motion.

What a clean dataset looks like on this platform

A clean PIPER recording needs the same components any manipulation dataset needs, made explicit because PIPER's CAN interface does not synchronize anything for you: joint state (position, and velocity if your control loop uses it) sampled on a fixed clock, the operator's commanded action on the same clock, and camera streams — since PIPER carries no onboard camera, every viewpoint is externally mounted and has to be explicitly time-aligned with the CAN-sourced joint stream.

Reach
626mm
Payload
1.5kg
Repeatability
0.1mm
Weight
4.2kg

Because piper_ros exposes standard ROS topics, the most common recording path is a ROS 2 bag or MCAP file capturing joint-state topics alongside whatever camera drivers are running — the same pattern documented in choosing a robot data format, with PIPER contributing the arm's half of the topic set.

Common pitfalls

Underestimating CAN adapter setup on Linux. SocketCAN configuration — bringing up the interface, setting bitrate, verifying frames are actually arriving — is a one-time cost that trips up teams moving from USB-serial arms like SO-101, where the equivalent step is nearly invisible.

No native camera means no default synchronization. Because every camera on a PIPER rig is external, there is no built-in guarantee that vision and joint-state streams share a clock unless you build that guarantee yourself — see multi-camera calibration and time synchronization.

Assuming ROS 2 support is as battle-tested as ROS 1. AgileX's most heavily documented driver workspace centers on ROS 1 (Noetic) with MoveIt and Gazebo; ROS 2 support exists through both AgileX and community packages but is worth verifying against your specific distro before committing a data collection program to it.

Skipping a joint-limit sanity check after any SDK or firmware update. Because piper_sdk decodes raw CAN frames rather than working through a higher-level abstraction layer, a version mismatch between the SDK and the arm's onboard firmware is more likely to surface as silently wrong joint values than as an obvious connection error — verify a known reference pose reads correctly after any update, before trusting a new recording session.

Bus contention on mobile-mounted rigs. When PIPER is mounted on a mobile base sharing the same CAN network, verify joint-state rate and latency under the base's actual driving load, not just with the arm powered on standalone.

Relying on a single CAN adapter driver across OS updates. piper_sdk's documented compatibility spans Ubuntu 18.04 through 22.04 and Python 3.6 through 3.10 — a wide but not unlimited range. Pin the combination you validate against, since a host OS or Python upgrade partway through a long data collection program is a real way to silently break the CAN interface.

PIPER's CAN-and-SDK model is a good fit for teams who already have a mobile or multi-device rig and need to add a compact arm to it — and whatever teleoperation interface you build around it, the recording layer described in bring your own rig applies the same way it would to any other manipulator.

KEY FACTS

DOF
6
PAYLOAD / REACH
1.5kg / 626mm
COMMUNICATION
CAN bus, 1 Mbps
SOFTWARE
piper_sdk (Python) + piper_ros (ROS 1/2 driver)

/ QUESTIONS

Frequently asked

Put this into practice.

Tell us what your robots need to learn. We will scope the rig, the operators, the protocol, and the first datasets — usually in one call.