Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 armInstall the library, then prepare the realtime machine
Keep control on a Raspberry Pi 5 and use my laptop for the applicationSet up the Pi and remote Python client
Try it without hardwareTry the online notebook or run the simulator
Add cameras, a gripper, or recordingsPeripherals and recording
Drive a node-served arm from a Meta Quest controllerTeleoperate 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

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.