Skip to content

Software

franky

From github.com/TimSchneider42/franky (opens in a new tab)

  • Robot arms and industry
  • Library
  • MIT

A Python and C++ high-level control library for Franka robots that replans motions in real time, without needing ROS or hard real-time programming.

Facts

GitHub stars
379read on 6 Nov 2026
Last update
28 Aug 2026Newest commit on master
Maintenance
Activea commit in the last 90 days
Difficulty
Intermediate

Checked on GitHub on 6 Nov 2026.

Licenses

Code
MIT (opens in a new tab)

Read by Robotheca from LICENSE (opens in a new tab) (MIT) at commit f88f0e9 (opens in a new tab), on 16 Oct 2026.

Commercial use
Yes

Overview

What it does: Robotheca's summary

  • Offers Cartesian and joint position and velocity trajectory control, planned time-optimally with Ruckig under velocity, acceleration and jerk limits.
  • Supports direct joint torque control and built-in Cartesian and joint impedance controllers.
  • Motions can be preempted at any moment, and trajectories are replanned on the fly.
  • Reactions let a running motion change course when unexpected events such as contact occur.
  • Callbacks for motions and reactions run without blocking the control thread, useful for logging and debugging.
  • Exposes most non-real-time libfranka functionality, including gripper control, directly in Python.

Written by Robotheca from the project's README (opens in a new tab) at commit f88f0e9, not by its creator.

The README

The creator's own README, copied as written: README.md by @TimSchneider42, at commit f88f0e9, under MIT (opens in a new tab). The original on GitHub (opens in a new tab).

Read the README here

Image (opens in a new tab)

High-Level Control Library for Franka Robots with Python and C++ Support

(opens in a new tab)

(opens in a new tab)

(opens in a new tab)

(opens in a new tab)

franky is a high-level control library for Franka robots, offering Python and C++ support. By providing a high-level control interface, franky eliminates the need for strict real-time programming at 1 kHz, making control from non-real-time environments, such as Python programs, feasible. Instead of relying on low-level control commands, franky expects high-level position or velocity targets and uses Ruckig (opens in a new tab) to plan time-optimal trajectories in real-time.

Although Python does not provide real-time guarantees, franky strives to maintain as much real-time control as possible. Motions can be preempted at any moment, prompting franky to re-plan trajectories on the fly. To handle unforeseen situations—such as unexpected contact with the environment — franky includes a reaction system that allows for updating motion commands dynamically. Furthermore, most non-real-time functionality of libfranka (opens in a new tab), such as Gripper control is made directly available in Python.

Check out the documentation (opens in a new tab) and the examples (opens in a new tab) for an introduction.

If you do not have a robot at hand, you can also try the simulation (opens in a new tab) first.

🚀 Features
📖 Python Quickstart Guide

Real-time kernel already installed and real-time permissions granted? Just install franky via

pip install franky-control

Otherwise, follow the installation instructions (opens in a new tab) first.

We also provide development builds of the latest master (stable) and dev (unstable) branches:

# Replace 10 with your robot server version
# Development (stable): latest master branch
pip install --pre franky-control --extra-index-url "https://timschneider42.github.io/franky/whl/by-robot-server-version/10/"
# Development (unstable): latest dev branch
pip install --pre franky-control --extra-index-url "https://timschneider42.github.io/franky/branches/dev/whl/by-robot-server-version/10/"

Now we are already ready to go! Unlock the brakes in the web interface, activate FCI, and start coding:

from franky import *

robot = Robot("10.90.90.1")  # Replace this with your robot's IP

# Let's start slow (this lets the robot use a maximum of 5% of its velocity, acceleration, and jerk limits)
robot.relative_dynamics_factor = 0.05

# Move the robot 20cm along the relative X-axis of its end-effector
motion = CartesianMotion(Affine([0.2, 0.0, 0.0]), ReferenceType.Relative)
robot.move(motion)

If you are seeing server version mismatch errors, your robot is likely running an older firmware or is an older Franka Panda model — see the FAQ (opens in a new tab) for how to install matching wheels.

📚 Documentation

The full documentation is available at https://timschneider42.github.io/franky/ (opens in a new tab).

📜 License

Starting with version 2.0.0, franky is licensed under the MIT License (opens in a new tab). Versions prior to 2.0.0 were released under the LGPL v3.0 and remain available under that license.

The Python docstrings of the franka.* entities (python/docstrings.hpp (opens in a new tab)) are extracted from the headers of libfranka (opens in a new tab), Copyright (c) Franka Robotics GmbH, which is licensed under the Apache License 2.0 (opens in a new tab).

Contributing

If you wish to contribute to this project, you are welcome to create a pull request. Please check out the contributing guidelines (opens in a new tab) first.

Files and versions

Facts read at commit f88f0e9

Robotheca never hosts the code: each link goes to the creator's own page.

Use it

How to install it, in the creator's words: The project's website (opens in a new tab)

Robotheca doesn't review code. Read it before running it.

Robotheca lists software as a reference: nothing is hosted or run here, and every fact links to where it was read.