Metadata-Version: 2.2
Name: frankz
Version: 0.19.0.5
Summary: Frankz - Python wrapper for libfranka Franka robot control library
Requires-Python: <3.13,>=3.9
Provides-Extra: typing
Requires-Dist: numpy>=1.21.0; extra == "typing"
Description-Content-Type: text/markdown

# Frankz

Modern Python wrapper for Franka Research 3 robot control library.

## Features

- **Joint Motion**: Move robot to specific joint configurations with smooth trajectories
- **Trajectory Execution**: Execute waypoint-based joint trajectories
- **Cartesian Control**: Move end-effector to target poses in Cartesian space
- **Real-time Feedback**: Monitor robot state and hardware status

## Installation

```bash
pip install frankz
```

**Requirements**: Ubuntu 22.04/24.04, Python 3.9-3.12

## Quick Start

Connect to your robot and move to a target pose:

```python
import frankz
import numpy as np

# Your robot IP
robot_ip = "172.16.0.3"

# Check hardware status: is it realtime kernel? your ethernet is fast enough? (it will move)
if frankz.is_good_hardware(robot_ip):
    print("Robot ready for operation")

# Get current end-effector pose
pose = frankz.get_current_ee_pose(robot_ip)
print(f"Current position: {pose[:3, 3]}")

# Move to target joint configuration
target_joints = np.array([0.0, -0.785, 0.0, -2.356, 0.0, 1.571, 0.785])
frankz.move_to_joint(target_joints, robot_ip, max_velocity_factor=0.5)


```

## Motion Examples

### Joint Space Motion

```python
# Simple joint move with custom speed
frankz.move_to_joint(
    target_joints,
    robot_ip,
    max_velocity_factor=0.3,      # 30% of max velocity
    max_acceleration_factor=0.3,   # 30% of max acceleration
    max_jerk_factor=0.3            # 30% of max jerk
)
```

### Trajectory Following

```python
# Execute multi-waypoint trajectory
waypoints = [
    np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
    np.array([0.5, -0.5, 0.5, -0.5, 0.5, -0.5, 0.5]),
    np.array([0.0, -0.785, 0.0, -2.356, 0.0, 1.571, 0.785]),
]

frankz.move_joints_through_trajectory(waypoints, robot_ip)
```

### Cartesian Motion

```python
# Move end-effector to target pose
target_pose = np.eye(4)
target_pose[:3, 3] = [0.3, 0.0, 0.5]  # Set target position

frankz.move_ee_to(
    target_pose, robot_ip,
    max_trans_velocity_factor=0.5,   # Translation limits
    max_trans_acceleration_factor=0.5,
    max_trans_jerk_factor=0.5,
    max_rot_velocity_factor=0.5,     # Rotation limits
    max_rot_acceleration_factor=0.5,
    max_rot_jerk_factor=0.5
)
```

## Version Compatibility

Frankz version follows libfranka versioning:
- `0.19.0.X` corresponds to libfranka 0.19.0
- `0.20.0.X` corresponds to libfranka 0.20.0

The fourth digit represents the frankz patch level for that libfranka version.

## License

Apache 2.0
