Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
53c2821
Begin adding documentation
contagon Apr 18, 2025
98070b8
Added tables for included pipelines and datasets
contagon Apr 18, 2025
0bff890
Remove toc on table pages
contagon Apr 18, 2025
88ca375
Add more documentation
contagon Apr 19, 2025
321a4bf
Merge branch 'master' into mkdocs
contagon Apr 27, 2025
e8030c7
Added in a bunch of documentation
contagon Apr 27, 2025
c98926e
Just about finalized the api reference stuff
contagon Apr 29, 2025
44e2586
Add length option to cli stats
contagon Apr 29, 2025
64ef164
Finalize all dataset documentation
contagon Apr 30, 2025
bd2edea
Add in cli reference page
contagon Apr 30, 2025
beb53d2
Hardcode lengths everywhere
contagon Apr 30, 2025
0bec625
Bump rerun version
contagon May 1, 2025
b9f0603
Add quick_len method
contagon May 1, 2025
2a7d2a9
Bump typer with path fixes
contagon May 1, 2025
38968b9
Reorganized docs, renamed some methods in trajectory
contagon May 2, 2025
8979228
Fill out more pages
contagon May 2, 2025
66ee2dd
Move some of stats to public interface
contagon May 4, 2025
d4a1824
Move more stuff from stats to Trajectory
contagon May 4, 2025
8f9550f
Make separate stats module
contagon May 5, 2025
310f525
Update odometry example
contagon May 5, 2025
8ade5b1
Quick fixes
contagon May 7, 2025
237512c
More documentation written up. Autodeploy and custom stuff left
contagon May 7, 2025
71a2537
Fill out custom dataset tutorial
contagon May 9, 2025
621292a
Add in pipeline example
contagon May 9, 2025
ff800ed
Add mike, add docs deployment to ci
contagon May 9, 2025
825ae00
Update docs/ref/datasets.md
contagon May 9, 2025
a528589
Update cpp/bindings/types.h
contagon May 9, 2025
0d8153e
Fix a couple of typos and missing lines
contagon May 9, 2025
c648a38
Fix missing length param in stats
contagon May 27, 2025
fbee1c9
Small cleanups inline
contagon May 27, 2025
38d8aec
Tweaks to clarify CLI and visualizations
contagon May 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: CI

on:
push:
branches: [ "master", "dev" ]
branches: [ "master" ]
pull_request:
branches: [ "master", "dev" ]
branches: [ "master" ]

jobs:
# check python formatting
Expand All @@ -27,6 +27,20 @@ jobs:
with:
clang-format-version: '20'

# if it was a push to master, update latest
docs:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'push' }}
steps:
- uses: actions/checkout@v4
name: Checkout
- name: Install uv
uses: astral-sh/setup-uv@v5
- name: Install the project
run: uv sync --dev --verbose
- name: Deploy docs
run: mike deploy -p -u latest

# run tests on both mac and ubuntu, across all python versions
test:
runs-on: ${{ matrix.os }}
Expand Down
54 changes: 42 additions & 12 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ on:
jobs:
build_wheels:
runs-on: ${{ matrix.os }}
env:
VCPKG_DEFAULT_BINARY_CACHE: "${{ github.workspace }}/.vcpkg_cache"
strategy:
matrix:
os: [ubuntu-latest, macos-13, macos-14]
Expand All @@ -17,12 +19,14 @@ jobs:
name: Checkout

# Let vcpkg store caches in github actions
- name: Export GitHub Actions cache environment variables
uses: actions/github-script@v7
- name: Restore vcpkg cache
id: cache
uses: actions/cache/restore@v4
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
path: "${{ env.VCPKG_DEFAULT_BINARY_CACHE }}"
key: vcpkg-${{ matrix.os }}
- name: Ensure vcpkg cache directory exists
run: mkdir -p "${{ env.VCPKG_DEFAULT_BINARY_CACHE }}"

# Do all the building
- run: ./cpp/setup_pipelines.sh
Expand All @@ -31,12 +35,24 @@ jobs:
name: Build wheel
env:
# for vcpkg caches
CIBW_ENVIRONMENT: >
VCPKG_BINARY_SOURCES="clear;x-gha,readwrite"
ACTIONS_CACHE_URL="$ACTIONS_CACHE_URL"
ACTIONS_RUNTIME_TOKEN="$ACTIONS_RUNTIME_TOKEN"
MACOSX_DEPLOYMENT_TARGET="11"
CIBW_ENVIRONMENT_PASS_LINUX: VCPKG_BINARY_SOURCES ACTIONS_CACHE_URL ACTIONS_RUNTIME_TOKEN
CIBW_ENVIRONMENT_LINUX : VCPKG_DEFAULT_BINARY_CACHE="/host${{ env.VCPKG_DEFAULT_BINARY_CACHE }}"

# Delete the old cache on hit to emulate a cache update. See
# https://github.com/actions/cache/issues/342.
- name: Delete old cache
env:
GH_TOKEN: ${{ github.token }}
if: steps.cache.outputs.cache-hit
# Using `--repo` makes it so that this step doesn't require checking out the repo first.
run: gh cache delete --repo ${{ github.repository }} ${{ steps.cache.outputs.cache-primary-key }}

# cache vcpkg
- name: Save vcpkg cache
if: always()
uses: actions/cache/save@v4
with:
path: "${{ env.VCPKG_DEFAULT_BINARY_CACHE }}"
key: vcpkg-${{ matrix.os }}

# upload to use in other jobs
- uses: actions/upload-artifact@v4
Expand Down Expand Up @@ -80,4 +96,18 @@ jobs:
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
files: dist/*
files: dist/*

docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
name: Checkout
- name: Install uv
uses: astral-sh/setup-uv@v5
- name: Install the project
run: uv sync --dev --verbose
- name: Get version
run: echo "EVALIO_VERSION=$(python -c 'import evalio; print(evalio.__version__)')" >> $GITHUB_ENV
- name: Deploy docs
run: mike deploy -p -u ${{ env.EVALIO_VERSION }} stable
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ wheelhouse
.vcpkg_installed
.vcpkg
.vcpkg_cache
site

# other caches
.mypy_cache
.ruff_cache
.pytest_cache
.vscode
.venv
__pycache__
Expand Down
43 changes: 29 additions & 14 deletions cpp/bindings/pipeline.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,20 +50,35 @@ class PyPipeline : public evalio::Pipeline {

inline void makeBasePipeline(nb::module_ &m) {
nb::class_<evalio::Pipeline, PyPipeline>(m, "Pipeline")
.def(nb::init<>())
.def_static("name", &evalio::Pipeline::name)
.def_static("default_params", &evalio::Pipeline::default_params)
.def_static("url", &evalio::Pipeline::url)
.def_static("version", &evalio::Pipeline::version)
.def("pose", &evalio::Pipeline::pose)
.def("map", &evalio::Pipeline::map)
.def("initialize", &evalio::Pipeline::initialize)
.def("add_imu", &evalio::Pipeline::add_imu, "mm"_a)
.def("add_lidar", &evalio::Pipeline::add_lidar, "mm"_a)
.def("set_params", &evalio::Pipeline::set_params, "params"_a)
.def("set_imu_params", &evalio::Pipeline::set_imu_params, "params"_a)
.def("set_lidar_params", &evalio::Pipeline::set_lidar_params, "params"_a)
.def("set_imu_T_lidar", &evalio::Pipeline::set_imu_T_lidar, "T"_a);
.def(nb::init<>(), "Construct a new pipeline.")
.def_static("name", &evalio::Pipeline::name, "Name of the pipeline.")
.def_static("default_params", &evalio::Pipeline::default_params,
"Default parameters for the pipeline.")
.def_static("url", &evalio::Pipeline::url,
"URL for more information about the pipeline.")
.def_static("version", &evalio::Pipeline::version,
"Version of the pipeline.")
.def("pose", &evalio::Pipeline::pose, "Most recent pose estimate.")
.def("map", &evalio::Pipeline::map, "Map of the environment.")
.def("initialize", &evalio::Pipeline::initialize,
"Initialize the pipeline. Must be called after constructing the "
"object and before setting parameters.")
.def("add_imu", &evalio::Pipeline::add_imu, "mm"_a,
"Register an IMU measurement.")
.def("add_lidar", &evalio::Pipeline::add_lidar, "mm"_a,
"Register a LiDAR measurement.")
.def("set_params", &evalio::Pipeline::set_params, "params"_a,
"Set parameters for the pipeline. This will override any default "
"parameters.")
.def("set_imu_params", &evalio::Pipeline::set_imu_params, "params"_a,
"Set IMU parameters for the pipeline.")
.def("set_lidar_params", &evalio::Pipeline::set_lidar_params, "params"_a,
"Set LiDAR parameters for the pipeline.")
.def("set_imu_T_lidar", &evalio::Pipeline::set_imu_T_lidar, "T"_a,
"Set the transformation from IMU to LiDAR frame.")
.doc() = "Base class for all pipelines. This class defines the interface "
"for interacting with pipelines, and is intended to be "
"subclassed by specific implementations.";
}

} // namespace evalio
13 changes: 10 additions & 3 deletions cpp/bindings/pipelines/bindings.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,11 @@ inline void makePipelines(nb::module_ &m) {
.def_static("name", &KissICP::name)
.def_static("default_params", &KissICP::default_params)
.def_static("url", &KissICP::url)
.def_static("version", &KissICP::version);

.def_static("version", &KissICP::version)
.doc() =
"KissICP LiDAR-only pipeline for point cloud registration. KissICP is "
"designed to be simple and easy to use, while still providing good "
"performance with minimal parameter tuning required across datasets.";
#endif

#ifdef EVALIO_LIO_SAM
Expand All @@ -34,7 +37,11 @@ inline void makePipelines(nb::module_ &m) {
.def_static("name", &LioSam::name)
.def_static("default_params", &LioSam::default_params)
.def_static("url", &LioSam::url)
.def_static("version", &LioSam::version);
.def_static("version", &LioSam::version)
.doc() =
"Lidar-Inertial Smoothing and Mapping (LioSAM) pipeline. LioSAM is an "
"extension of LOAM (=> uses planar and edge features) that additionally "
"utilizes an IMU for initializing ICP steps and for dewarping points";
#endif
}
} // namespace evalio
Loading
Loading