Skip to main content

frame-transforms

frame-transforms is a lightweight, thread-safe, Python-native package to simplify frame transforms in robotics. With it, you can manage and translate between coordinate frames with ease. It features:

  1. Automatic computation of transitive transforms.
  2. Registration and update of relative coordinate frames.
  3. An intuitive, object-oriented API.

Though in beta, the library is extensively tested.

This package was inspired by the interface of posetree and shares much of its functionality but offers a more batteries-included experience. Similarly to posetree's nomenclature, Pose is a location and orientation in space, whereas Transform is an action that describes the change in position and orientation to get from one Pose to another.

Installation

pip install frame-transforms

Application

Consider a simple robot consisting of a mobile base and a camera mounted on a gimbal.

The camera detects an object in its coordinate frame. Where is it in world frame?

# Setup
registry.update(Frame.WORLD, Frame.BASE, base_transform)
registry.update(Frame.BASE, Frame.CAMERA, camera_transform)

# Define the Pose
object_pose = Pose(
    Transform(
        np.array([1, 0, 0]),
        Rotation.from_euler("xyz", [0, 0, 0], degrees=True),
    ),
    parent_frame=Frame.CAMERA,
    registry=registry,
)

# Get the position and orientation of the object in world frame
position_in_world = object_pose.get_position(Frame.WORLD)
orientation_in_world = object_pose.get_orientation(Frame.WORLD)

ROS Integration

Simply wrap the Register in a ROS node, subscribing to pose updates and publishing/service-calling the poses. The Register is thread-safe, so callbacks are simple.

Alternatives

  • tf2: Heavyweight, requires ROS.
  • posetree: Requires PoseTree subclass implementation.

Examples

Development Setup

  • Clone and cd into this repository.
  • Set up virtual environment.
    • python -m venv venv
    • source venv/bin/activate (Linux/Mac) or venv\Scripts\activate (Windows)
  • Install package with dev and test dependencies
    • pip install -e '.[dev,test]'

Implementation Details

  • Transforms are stored as a tree starting from the world frame (provided at Registry initialization).
  • To optimize run-time performance, the paths between all pairs of frames are eagerly precomputed and stored when a frame is added.
    • Therefore, the runtime complexity on request is proportional to the shortest path, instead of all frames in the case of a full graph search.
  • Transitive transforms themselves are only computed on-demand because an intermediate transform can change.
    • This is preferred because poses often change more often than they are requested.

Metadata

Release files for frame-transforms 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for frame-transforms 0.3.1
File Size Uploaded
frame_transforms-0.3.1.tar.gz 17.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for frame-transforms 0.3.1
File Interpreter ABI Platform
frame_transforms-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 24.5 kB

Release files / frame_transforms-0.3.1.tar.gz

Download URL frame_transforms-0.3.1.tar.gz
Size 17.6 kB
Tags Source
SHA-256 checksum
How to use checksums
9c8952c8bb95e109aa0eb0449a57bff7074cfd1fb200983c3125123685865941
BLAKE2b-256 checksum
How to use checksums
570e26f01ace1c79183085664775507345671eaa739df233f4a21e0bf35efa1c
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 23, 2025.

Transparency log

Release files / frame_transforms-0.3.1-py3-none-any.whl

Download URL frame_transforms-0.3.1-py3-none-any.whl
Size 6.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c2e95ffb8500422d9f277bffc5fd1b6ea6d49aa63b8f5f5c38d4fd7f363917ca
BLAKE2b-256 checksum
How to use checksums
feead0a08b78102cfb0f055cdcfab1b234ee6774bd7783a49715d2ddfc093321
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 23, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page