libfrankapy
libfrankapy is a Python binding project for the libfranka library, designed to provide high-level Python interfaces for Franka robotic arms while maintaining the performance advantages of low-level C++ real-time control.
✨ Features
- 🚀 Real-time Performance Guarantee: C++ control loop maintains 1kHz real-time performance, Python does not participate in real-time loops
- 🐍 Python Friendly: Provides intuitive Python API with complete type hints
- ⚡ Efficient Communication: Uses shared memory and atomic operations for Python-C++ data exchange
- 🛡️ Safety Control: Complete safety limits, error handling, and emergency stop functionality
📋 System Requirements
Hardware Requirements:
- Franka Robotics robotic arm (with FCI functionality)
- Computer with PREEMPT_RT real-time kernel
Software Requirements:
- Operating System: Ubuntu 22.04+ with PREEMPT_RT real-time kernel
- Python: 3.9+
- C++ Compiler: GCC 7+ or Clang 6+
- CMake: 3.16+
🚀 Installation
Before installing libfrankapy, make sure you have installed libfranka following the libfranka repository.
Install from source
First, clone the repository:
git clone https://github.com/han-xudong/libfrankapy.git
cd libfrankapy
It's recommended to create a virtual environment (venv or conda):
python -m venv venv
source venv/bin/activate
Next, build and install the package:
pip install -e .
Install from PyPI
pip install libfrankapy
🎯 Quick Start
Here is a brief example to get you started:
import libfrankapy as fp
import numpy as np
# Connect to robot
robot = fp.FrankaRobot("192.168.1.100") # Replace with your robot IP
robot.connect()
robot.start_control()
try:
# Get current state
state = robot.get_robot_state()
print(f"Current joint positions: {state.joint_state.positions}")
print(f"Current end-effector pose: {state.cartesian_pose.position}")
# Joint space motion
target_joints = [0.0, -0.785, 0.0, -2.356, 0.0, 1.571, 0.785]
robot.move_to_joint(target_joints, speed_factor=0.1)
# Cartesian space motion
target_pose = [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 1.0] # [x, y, z, qx, qy, qz, qw]
robot.move_to_pose(target_pose, speed_factor=0.1)
finally:
# Disconnect
robot.disconnect()
See the examples/ directory for more usage examples:
basic_control.py- Basic control exampletrajectory_control.py- Trajectory control examplestate_monitoring.py- Real-time state monitoring example
Note: When using this library to control robotic arms, please ensure you follow all safety protocols and test in a controlled environment.
🏗️ Architecture Design
libfrankapy adopts a hybrid architecture of C++ real-time environment + Python high-level interface:
graph TD
A[Python Application Layer] --> B[libfrankapy Python API]
B --> C[Pybind11 Binding Layer]
C --> D[C++ Control Manager]
D --> E[Shared Memory Communication]
E --> F[Real-time Control Thread]
F --> G[LibFranka C++ Library]
G --> H[Franka Robotic Arm Hardware]
E --> I[Shared Memory Reader]
I --> B
J[RealtimeConfig] --> D
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#fff3e0
style D fill:#e8f5e8
style E fill:#fff9c4
style F fill:#ffebee
style G fill:#f1f8e9
style H fill:#fce4ec
style I fill:#e8eaf6
style J fill:#f3e5f5
🤝 Contributing
We welcome community contributions! Please see CONTRIBUTING.md for details on how to participate in project development.
Development Environment Setup
# Clone repository
git clone https://github.com/han-xudong/libfrankapy.git
cd libfrankapy
# Create development environment
python3 -m venv venv
source venv/bin/activate
# Install development dependencies
pip install -e ".[dev]"
# Install pre-commit hooks
pre-commit install
📄 License
This project is licensed under the Apache License 2.0.
🙏 Acknowledgments
- Franka Robotics for providing excellent robotic arm hardware and the libfranka library
- pybind11 for providing excellent Python-C++ binding tools
- All developers who have contributed to this project
📞 Support
🔗 Related Links
Metadata
Release files for libfrankapy 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| libfrankapy-0.1.1.tar.gz | 119.8 kB | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| libfrankapy-0.1.1-cp311-cp311-manylinux1_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.5+ x86-64 | Details |
| libfrankapy-0.1.1-cp310-cp310-manylinux1_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.5+ x86-64 | Details |
| libfrankapy-0.1.1-cp39-cp39-manylinux1_x86_64.whl | CPython 3.9 | CPython 3.9 | Linux glibc 2.5+ x86-64 | Details |
Total release size: 660.9 kB
Release files / libfrankapy-0.1.1.tar.gz
| Download URL | libfrankapy-0.1.1.tar.gz |
|---|---|
| Size | 119.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cbcb502f30451aecd32ecc0a2bb6d9949e1c9fa778af2e2b091fc0a0aa5c8eed
|
|
BLAKE2b-256 checksum How to use checksums |
b1423ead3a957f50ca06d0b357c3bcce9b051f7ca72bf333411951468c10fb33
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 27, 2025.
Transparency logRelease files / libfrankapy-0.1.1-cp311-cp311-manylinux1_x86_64.whl
| Download URL | libfrankapy-0.1.1-cp311-cp311-manylinux1_x86_64.whl |
|---|---|
| Size | 180.2 kB |
| Tags | CPython 3.11 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
95366504e13341b66999b81a4b0ef1c7462954594161ea25f91dd772383a072a
|
|
BLAKE2b-256 checksum How to use checksums |
08652cc9efaf8fdb30547c3fa5dd1e01b7bfb381abf7440eb2fbc834d98d5ec1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 27, 2025.
Transparency logRelease files / libfrankapy-0.1.1-cp310-cp310-manylinux1_x86_64.whl
| Download URL | libfrankapy-0.1.1-cp310-cp310-manylinux1_x86_64.whl |
|---|---|
| Size | 178.6 kB |
| Tags | CPython 3.10 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
d500773d889dd0ffe7f0375f6654c63e8c4d6795c36980f8c2273e25f6f3447c
|
|
BLAKE2b-256 checksum How to use checksums |
f654695904c7eac596c7da9c6a6b1c20f2d0e4467c5a098a5fb1089919b91124
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 27, 2025.
Transparency logRelease files / libfrankapy-0.1.1-cp39-cp39-manylinux1_x86_64.whl
| Download URL | libfrankapy-0.1.1-cp39-cp39-manylinux1_x86_64.whl |
|---|---|
| Size | 182.3 kB |
| Tags | CPython 3.9 Linux glibc 2.5+ x86-64 |
|
SHA-256 checksum How to use checksums |
0a18ad6b5ded74c8e9241ae9412a897f0d7a6981f5ad5bf192b522711f9c08c1
|
|
BLAKE2b-256 checksum How to use checksums |
652c44ba46104d0adc852cae12384ca4bf2833587edc300ea7bb5c8bbad13d81
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 27, 2025.
Transparency log