Skip to main content

Python-native robotics framework built on ROS2

Project description

ReachPy 🚀

ReachPy is a modern Python framework built to dramatically improve the Developer Experience (DX) for robotics engineers using ROS 2.

Building robotics applications in ROS 2 shouldn't mean wrestling with boilerplate, complex build pipelines, or rigid message compilation. ReachPy aims to provide a more Pythonic, intuitive, and dynamic interface to the ROS 2 ecosystem, letting you focus on writing robot logic rather than fighting the middleware.

✨ Why ReachPy?

While rclpy provides the standard bindings for ROS 2, the workflow often requires dropping down to C++ build tools (colcon, CMake) just to define custom data structures. ReachPy is being built to bridge this gap, offering dynamic runtime features powered by a high-performance Rust backend.

📦 Core Components

Dynamic Messaging (reachpy_messages)

At the core of ReachPy is our custom message serialization engine, written in Rust (via PyO3).

Instead of writing .msg files, recompiling your workspace, and sourcing environments just to add a new field to a message, reachpy_messages allows you to define, serialize, and deserialize native ROS 2 Common Data Representation (CDR) bytes on the fly.

  • Dynamic Schema Registry: Register complex nested types, arrays, and primitives entirely at runtime.
  • Native CDR Support: Outputs perfectly aligned Little-Endian bytes that are 100% compatible with standard ROS 2 nodes.
  • Blazing Fast: Offloads the heavy lifting of byte-packing to Rust, ensuring your Python nodes stay performant.

🚀 Quick Start (Preview)

Note: ReachPy is currently in active development.

import reachpy
from reachpy.messages import MessageSchema, FieldSchema, FieldType

# 1. Define a ROS 2 compatible message entirely in Python
schema = MessageSchema(
    name="RobotWaypoint",
    fields=[
        FieldSchema("x", FieldType.Float64),
        FieldSchema("y", FieldType.Float64),
        FieldSchema("is_active", FieldType.Bool)
    ]
)

# 2. Register it dynamically (no CMake or colcon build required!)
reachpy.messages.register_schema("RobotWaypoint", schema)

# 3. Serialize directly to ROS 2 CDR bytes to send over the wire
cdr_payload = reachpy.messages.serialize("RobotWaypoint", [15.2, -7.8, True])

🛠️ Building from Source

ReachPy uses Rust for its performance-critical extensions. You will need Rust and Python 3.8+ installed.

# Build and install the Rust extension locally
maturin develop --release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

reachpy-0.1.2a2-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl (291.1 kB view details)

Uploaded PyPymanylinux: glibc 2.28+ x86-64

reachpy-0.1.2a2-cp315-cp315-manylinux_2_28_x86_64.whl (284.6 kB view details)

Uploaded CPython 3.15manylinux: glibc 2.28+ x86-64

reachpy-0.1.2a2-cp314-cp314-manylinux_2_28_x86_64.whl (284.6 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

reachpy-0.1.2a2-cp313-cp313-manylinux_2_28_x86_64.whl (284.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

reachpy-0.1.2a2-cp312-cp312-manylinux_2_28_x86_64.whl (285.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

reachpy-0.1.2a2-cp311-cp311-manylinux_2_28_x86_64.whl (288.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

reachpy-0.1.2a2-cp310-cp310-manylinux_2_28_x86_64.whl (287.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

File details

Details for the file reachpy-0.1.2a2-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for reachpy-0.1.2a2-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e410f8ce66bda64daeeb72b49791ef7353b2377c7d18f37f5826a960875f49b5
MD5 b284dfb25b2103b2dfbe79e2190c7a27
BLAKE2b-256 0d41fe21d17903265473250a47f9194989a9eef818fe296aca784a2b6b10e0f2

See more details on using hashes here.

File details

Details for the file reachpy-0.1.2a2-cp315-cp315-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for reachpy-0.1.2a2-cp315-cp315-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5b297d6b3cf105edcecaf6d9252f524eb36003c3b810c415e6bf8a617062b57c
MD5 939d46e5778723d4e79fa4d7abf572f1
BLAKE2b-256 3428c388b658b1c7d00c238f76fffda9e08ac7f198d05f15887b22277429a342

See more details on using hashes here.

File details

Details for the file reachpy-0.1.2a2-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for reachpy-0.1.2a2-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ebb70ac89468cd46ef1da26a37bb700db95cff62c559bc31486ae2efb1517083
MD5 70ee187edfd8cfba815d391cdbfa67c4
BLAKE2b-256 2224d2da55342108124ef4462ae1e305c5269b6087d0e3b73ba2d6788b7a6990

See more details on using hashes here.

File details

Details for the file reachpy-0.1.2a2-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for reachpy-0.1.2a2-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2af01cb0c079065ed7572f4034b64901fedef983c6e6d31dffb8dffdbc64c32e
MD5 17fcc015d7140519b7179e2fc4409f57
BLAKE2b-256 d1fee35cf61511cf5294af3b49e63f04632924649a98e4d2919a6d10b0dce3ad

See more details on using hashes here.

File details

Details for the file reachpy-0.1.2a2-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for reachpy-0.1.2a2-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7053e4d37cfc9a859d8f6224cfc3bea94bf37e14c6906b29fe0d810c49bbaa8b
MD5 a56a86354939dc6ca9208e32c55bfa58
BLAKE2b-256 a254a874cec09003d6d130cc9b43b8bb4543b80fbe98223a530c3c304670762f

See more details on using hashes here.

File details

Details for the file reachpy-0.1.2a2-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for reachpy-0.1.2a2-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f931d94f24b2c94b66b975658f5826a4e56583570744b16598e8cd3b123a9340
MD5 8082d7a46ce772b2b1e8c48bdec01290
BLAKE2b-256 27410dbba11eac55ac954285d54e4054969f48787f3a382156c0c1f5469a8a08

See more details on using hashes here.

File details

Details for the file reachpy-0.1.2a2-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for reachpy-0.1.2a2-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6f48858cc1c608ea570f7272557203853c991ef7be9e17493e5f6e1da122ef42
MD5 c9c0737c49abda787c39dcf67fb66ef9
BLAKE2b-256 0b01331a6b88d1a319650d63e096d768acbb6e239a54b5fdd46448576212e48d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page