franka-rs
Project home · Documentation
Send targets from your program. Let Rust handle the realtime control.
franka-rs controls a Franka FR3 or Panda directly from Rust or Python, without
libfranka or C++. Your application can send goals at its own rate while the library
runs the 1 kHz loop, or you can write your own controller.
Want to try the API before installing anything? Launch the interactive Binder notebook to move a simulated FR3, edit Python targets and explore motion limits in your browser. The guided simulation lab starts with small examples and builds up to longer experiments. Binder sessions are temporary, so download any edits you want to keep.
See the architecture: what runs where, how a Python goal becomes motion, and which components you actually need.
Start with your setup
| I want to… | Start here |
|---|---|
| Use Rust or Python on the machine connected to the arm | Install the library, then prepare the realtime machine |
| Keep control on a Raspberry Pi 5 and use my laptop for the application | Set up the Pi and remote Python client |
| Try it without hardware | Try the online notebook or run the simulator |
| Add cameras, a gripper, or recordings | Peripherals and recording |
| Drive a node-served arm from a Meta Quest controller | Teleoperate with a Quest |
Not sure? Choose your setup explains what goes on each machine and which pieces you need.
Where the pieces fit
The library is the core. franka-rs communicates with the robot, evaluates the
model, and turns targets into continuous commands within velocity, acceleration, and
jerk limits. Its default target controller computes impedance torques; an alternative
uses the robot’s own controller. Target control explains both.
The node is optional. franka-node wraps the library so another machine can send
targets over Zenoh. A Pi 5 can run the trajectory generation and impedance controller
beside the arm; your laptop runs the application. Zenoh carries messages between them.
A direct connection needs no separate router.
Peripherals are optional too. Add the Franka Hand, camera streams with franka-cam,
or recordings with Rerun when your application needs them. They are not prerequisites
for the library.
The plot illustrates the trajectory generator under a 0.25 m/s, 0.5 m/s², 20 m/s³ budget. A policy, script, or teleoperation application supplies the targets; this repository does not supply a trained policy.
Go deeper when you need to
- First program and Python.
- How the FCI works and realtime requirements.
- Node configuration, recording, and tuning a running controller from the browser panel.
- Benchmarks, API reference, and contributing.
Status and scope
The changelog separates released features from development work. Published packages may trail this checkout.
The node docs report Pi 5 runs with one or two arms. Hardware validation is specific to
each path: the core impedance reference still carries an FR3 validation caveat; the
node’s gripper path is simulator-tested, and camera recording is tested with synthetic
input. Live tuning is tested against the simulator and against a mock owner, and is not yet
exercised on an arm; beyond that, no velocity-feedforward setting reachable through live
tuning has been validated on hardware. The Quest stack is verified on a Quest 3, with motion
scales and an axis mapping measured for one operator and one workspace; other headsets and
room layouts are not verified. See peripheral status, the
impedance reference, and the status sections of
live tuning and Quest teleoperation. A ros2_control hardware interface,
vacuum gripper, and published Panda simulator image are not available.
This is an unofficial Apache-2.0 project, not affiliated with or endorsed by Franka Robotics GmbH. Franka, Franka Emika, Panda, and FR3 identify the supported hardware.