Skip to main content

Pelorus - High Efficient Lidar Inertial Odometry

Project description

Pelorus Python Bindings

Python bindings for Pelorus - a LiDAR-Inertial Odometry system.

Installation

From source (requires Rust toolchain)

cd pelorus_py
pip install maturin
maturin develop --release

Or build a wheel:

maturin build --release
pip install target/wheels/pelorus-*.whl

Usage

Basic API

import pelorus
import numpy as np

# Create Pelorus instance
lio = pelorus.Handle()  # Uses embedded default config

# Or with custom config:
# lio = pelorus.Handle("path/to/config.rl")
#
# If you want to control PointCloud2 parsing (like `pelorus_create_with_options` in C):
# - device_specific_pointcloud2=True  (default)
# - device_specific_pointcloud2=False (generic parsing path)
# lio = pelorus.Handle("path/to/config.rl", device_specific_pointcloud2=False)

# Add IMU data
lio.add_imu(
    timestamp_sec=1000,
    timestamp_nanosec=0,
    orientation=[1.0, 0.0, 0.0, 0.0],  # w, x, y, z
    orientation_covariance=[0.01] + [0.0]*8,
    angular_velocity=[0.0, 0.0, 0.0],
    angular_velocity_covariance=[0.001] + [0.0]*8,
    linear_acceleration=[0.0, 0.0, 9.81],
    linear_acceleration_covariance=[0.01] + [0.0]*8,
)

# Add point cloud (recommended):
# - If you already have ROS2 messages, pass them directly:
#   lio.add_pointcloud2_ros(cloud_msg)
#
# - For non-ROS point sources, use numpy/list inputs:
# - Nx3: [x,y,z] (no per-point timing)
# - Nx4: [x,y,z,t] where t is uint32 nanosecond offset
# - Nx5: [x,y,z,intensity,t]
# For numpy/list inputs, you must also provide the scan header timestamp:
# lio.add_pointcloud(points_np, timestamp_sec=..., timestamp_nanosec=...)

# Try to receive odometry (non-blocking)
odom = lio.try_recv()
if odom:
    print(f"Position: {odom['position']}")
    print(f"Orientation: {odom['orientation']}")
    print(f"Linear velocity: {odom['linear_velocity']}")
    print(f"Points: {len(odom['points'])}")

# Or block until odometry is available
odom = lio.recv()


# Or receive odometry asynchronously via callback (like pelorus_c)
def on_odom(odom: dict) -> None:
    print("Odom:", odom["timestamp_sec"], odom["timestamp_nanosec"], odom["position"])

lio.set_callback(on_odom)
# ... feed IMU / pointclouds ...
lio.clear_callback()  # equivalent to lio.set_callback(None)

Using with MCAP Bagfiles

See examples/bagfile_example.py for a complete example using real sensor data from an MCAP bagfile.

python -m pip install mcap mcap-ros2-support

API Reference

Handle

Main interface to the Pelorus system.

Constructor

  • Handle(config_path: str | None = None, device_specific_pointcloud2: bool = True): Create a new Pelorus instance

    device_specific_pointcloud2=False selects the generic parsing path for PointCloud2 inputs.

Methods

  • add_imu(...): Add an IMU measurement
  • add_odom(...): Add an odometry measurement
  • add_pointcloud(cloud_dict): Add a point cloud (PointCloud2 format)
  • add_pointcloud(cloud_np, timestamp_sec=..., timestamp_nanosec=...): Add a point cloud from numpy
  • add_pointcloud2_ros(cloud_msg): Add a ROS2 sensor_msgs/msg/PointCloud2 message directly
  • try_recv(): Try to receive odometry (non-blocking), returns None if no data
  • recv(): Receive odometry (blocks until available)
  • set_callback(callback): Deliver odometry via callback from a background thread; disables try_recv()/recv() queuing while enabled
  • clear_callback(): Disable callback delivery (equivalent to set_callback(None))
  • version(): Get library version (static method)

Timestamp semantics

Pelorus uses two timestamp levels:

  1. IMU/Odom timestamps (timestamp_sec + timestamp_nanosec)

    • Absolute timestamps (typically epoch / ROS time) used for synchronization.
  2. LiDAR timestamps

    • Scan header timestamp: absolute (sec/nanosec)
    • Per-point t field (if provided): uint32 nanoseconds offset, non-negative and forward in time relative to the scan header time.

The effective point time is:

point_time_abs = header_time_abs + (t * 1e-9)

Odometry outputs include timestamp_sec/timestamp_nanosec (and timestamp as float for convenience).

Development

# Install development dependencies
pip install maturin pytest black ruff

# Build and test
maturin develop
pytest

# Format code
black .
ruff check .

License

Dual-licensed under MIT or Apache-2.0, consistent with the Pelorus project.

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.

pelorus-0.0.1-cp38-abi3-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ x86-64

pelorus-0.0.1-cp38-abi3-musllinux_1_2_armv7l.whl (1.4 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ ARMv7l

pelorus-0.0.1-cp38-abi3-musllinux_1_2_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ ARM64

pelorus-0.0.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

pelorus-0.0.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

pelorus-0.0.1-cp38-abi3-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

pelorus-0.0.1-cp38-abi3-macosx_10_12_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

File details

Details for the file pelorus-0.0.1-cp38-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pelorus-0.0.1-cp38-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e6b577d2c30186bc6d237972e38259cf9a1df5be20b7b7c6169a944677550060
MD5 395db29c03fe751b8332abb8e5d274b0
BLAKE2b-256 9beffc03055a9544a40ae480cee164ee8b5d52ea58471f0bf1ac095fb1223a57

See more details on using hashes here.

File details

Details for the file pelorus-0.0.1-cp38-abi3-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for pelorus-0.0.1-cp38-abi3-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 cc232425c19bc4f606fa98847e56d4e8e51d9d10a762ee4c985c964e18322372
MD5 775f11ef6b817738a1bd91b0ae3226d0
BLAKE2b-256 006d156bff1ad054a72d17885ed816ab64914df1fa184e7fb9e86fb26c1bf148

See more details on using hashes here.

File details

Details for the file pelorus-0.0.1-cp38-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pelorus-0.0.1-cp38-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 eb96383560df9a0c146022e2eed3c09c523152f60d0341e17aa07d299e32a884
MD5 fe1154a18795f30440cd84e51b7c6a70
BLAKE2b-256 572109533c67f059cb67701ca4198d7fd84c23a75714f68d15fb6a1991b3b157

See more details on using hashes here.

File details

Details for the file pelorus-0.0.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pelorus-0.0.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8cf463f71ea5eef9f996b560bb20265bb04299681d902408efeaba95c21ac343
MD5 6799ae61b237b4194479beb6917b8b98
BLAKE2b-256 6f6d3df9987f7b8234dbe753f1ab74f16bb33c32ccb51b386712c2379b826294

See more details on using hashes here.

File details

Details for the file pelorus-0.0.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pelorus-0.0.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ccea9b8eed635736e4a4b1d62bbe71e5cdbdbddfffca21b325cf9301e5ee85d0
MD5 8df7ecd889e799da4b5c860da2781af5
BLAKE2b-256 c93c1aba5c120d0217ff93ccec37abf5d5b3dec2229a3eb9a3a182784f8de7b5

See more details on using hashes here.

File details

Details for the file pelorus-0.0.1-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pelorus-0.0.1-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ee62c559a6016cde57169e3c374ddf79b01062e217d9dcd5195496f64121c271
MD5 b612c849a3c8faeded4ec9e8e57fc44c
BLAKE2b-256 3ccb19180ec1c35fb4a020829cd3c25311e82e2d3ff5d75e7f6a840728058fae

See more details on using hashes here.

File details

Details for the file pelorus-0.0.1-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pelorus-0.0.1-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 22da472b4820d944d1b0c011ae3f67e95bfbff43d30b39480622aa87c3f3863a
MD5 f419b4e3911d07cd6444526069b5d3b7
BLAKE2b-256 820a9e7a88afd86d3c2b8bf7b46387f06369d446f9926db61ef118a92545b21e

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