Skip to content

About

ROS-free 2.5D elevation mapping with a CUDA/CuPy backend for quadrupeds and humanoids

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

1 watching

Forks

Repository files navigation

PICO-elevationmap

English | 简体中文

CI License: MIT Python 3.12

PICO-elevationmap is a ROS-free 2.5D elevation mapping library for PICO quadrupeds and humanoids. Poses come from a timestamped SE3 pose buffer instead of tf; sensor noise and the plugin chain are YAML-driven; maps can be replayed offline from npz sequences or rosbags without a ROS graph.

Status

Public source alpha, GitHub-only release, MIT licensed. Not production-ready. Full release status and known limitations: docs/open-source-readiness.md.

Area Status
Platform x86_64 Linux, NVIDIA GPU, CUDA 12.x headers
Python 3.12 (CI target)
ROS2 bridge Optional; sourced ROS2 required; no ament package
RealSense / LiDAR Optional; D435i and RoboSense Airy paths are prototype quality
Four-camera D435i rig Config + single-camera subset tested; four-device hardware unverified
torch backend / bench Deferred (Phase 3)

Install

git clone https://github.com/PICO4robot/PICO-elevationmap.git
cd PICO-elevationmap
bash scripts/setup_env.sh

setup_env.sh syncs from source with the CUDA and RealSense extras, verifies NVRTC and the RealSense SDK, and runs pytest. Add --ros for a ROS-visible .venv-ros, --skip-tests to skip pytest, or --dry-run to preview. The wheel's elevation-mapping-cupy-core dependency is git-only, so plain pip install dist/*.whl needs --no-deps; source install is the supported path.

Quickstart

# Synthetic scene: flat ground + box + steps, circular trajectory
uv run pico-elevationmap run --config src/pico_elevationmap/configs/run_sim.yaml \
    --save maps/map.npz --save-frames maps/frames.npz

# Offline replay: npz frames / frame dirs / rosbag (.bag/.db3/.mcap, no ROS install)
uv run pico-elevationmap replay --config src/pico_elevationmap/configs/run_sim.yaml \
    --input maps/frames.npz --save maps/replay_map.npz --export-ply maps/map.ply

# Export a saved map: PLY / PGM (16-bit elevation) / CSV
uv run pico-elevationmap export --input maps/replay_map.npz --layers elevation --output maps/elevation.pgm

Documentation

Optional live paths (details in the docs above):

  • D435i live: uv run python -m pico_elevationmap.live.realsense_live --config src/pico_elevationmap/configs/realsense_live.yaml --view --voxel-view --frames 0
  • D435i + RoboSense Airy: see §5.2 and realsense_lidar.yaml
  • Four-camera D435i: see §5.5 and quad_camera.yaml
  • ROS2 launch / Foxglove bridge: see §5.3 / §5.4

D435i live elevation, traversability and probability voxel view

Prototype-quality output from a static D435i; not a calibrated deployment.

Development

env -u PYTHONPATH uv run pytest -q
uv run ruff check .
uv run ruff format --check .
bash -n scripts/setup_env.sh

License

MIT — see LICENSE and THIRD_PARTY_NOTICES.md for the upstream notices.

About

ROS-free 2.5D elevation mapping with a CUDA/CuPy backend for quadrupeds and humanoids

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages