Warning
openpi-basic-control is meant to be a minimal but hackable working example. It is not thoroughly documented or tested, and should not be considered a production-quality solution. We (Physical Intelligence) may not have the bandwidth to maintain this repository, or review any contributions. Feel free to fork it instead!
openpi-basic-control is a minimal C++ robot-control library. Each arm
runs one pi_control_node process that communicates with the main
Python process via ZeroMQ.
| Arm | Follower effector | Leader effector |
|---|---|---|
Yam |
E_Yam |
E_Yam_Handle |
ARX_X5 |
E_ARX |
E_ARX_ENC |
FR3 |
Robotiq |
— |
from openpi_control import ArmConfig, ArmSession, PositionCommand, SocketCanConnection
with ArmSession() as session:
follower = session.add_follower(
ArmConfig(
"right_follower",
"Yam",
SocketCanConnection("can_follower_r"),
effector_model="E_Yam",
follower_gravity_compensation=True,
)
)
session.connect()
follower.command(PositionCommand([0, 0, 0, 0, 0, 0], 1.0))FR3 uses the same ArmSession, FollowerArm, and PositionCommand API. Its
connection selects one of the two real Robotiq Modbus transports:
from openpi_control import FR3Connection, RobotiqConnection
config = ArmConfig(
"follower",
"FR3",
FR3Connection("192.168.1.10"),
effector_model="Robotiq",
effector_connection=RobotiqConnection.rtu("/dev/serial/by-id/usb-robotiq"),
# Or: RobotiqConnection.tcp("192.168.1.11", port=502),
)See docs/fr3.md for firmware, networking, controller, and hardware-validation details.
Building requires CMake and a C++17 compiler. The dependency builder pins and
builds Pinocchio, ZeroMQ, cppzmq, Trossen, libfranka 0.21.3, and libmodbus;
the resulting libfranka and libmodbus archives are linked into
pi_control_node. It has been tested on Ubuntu 22.04 and 24.04.
sudo ./scripts/install_build_deps_ubuntu.sh
./scripts/build_deps.sh
uv build --wheelThe wheel is written to dist/.