Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,7 @@ data
# for building
compile_commands.json

# cloned pipelines
cpp/bindings/pipelines-src
evalio_data/
build/
dist/
results/
66 changes: 44 additions & 22 deletions cpp/bindings/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,19 +38,30 @@ endfunction(subproject_version)

# iterates over pipeline folders to find them
function(find_pipeline SRC_DIR TARGET_NAME DEF_NAME)
if(EXISTS "${PIPELINES_SRC}/${SRC_DIR}/")
if(EXISTS "${PIPELINES_SRC}/${SRC_DIR}/CMakeLists.txt")
message(
"----------------------- Adding ${SRC_DIR} -----------------------"
)
add_subdirectory(${PIPELINES_SRC}/${SRC_DIR})
set(LIBS ${LIBS} ${TARGET_NAME} PARENT_SCOPE)
subproject_version(${SRC_DIR} ${DEF_NAME}_version)
set(DEF ${DEF} ${DEF_NAME}=${${DEF_NAME}_version} PARENT_SCOPE)
set(RESULTS
${RESULTS}
"-- ✓ ${DEF_NAME} ${${DEF_NAME}_version}\n"
PARENT_SCOPE
)
set(VERSION_VAR_NAME "${DEF_NAME}_version")
subproject_version(${SRC_DIR} ${VERSION_VAR_NAME})
set(VERSION_VAL "${${VERSION_VAR_NAME}}")
if(VERSION_VAL)
set(DEF ${DEF} ${DEF_NAME}=${VERSION_VAL} PARENT_SCOPE)
set(RESULTS
${RESULTS}
"-- ✓ ${DEF_NAME} ${VERSION_VAL}\n"
PARENT_SCOPE
)
else()
set(DEF ${DEF} ${DEF_NAME}=1.0.0 PARENT_SCOPE)
set(RESULTS
${RESULTS}
"-- ✓ ${DEF_NAME} 1.0.0\n"
PARENT_SCOPE
)
endif()
message(
"----------------------- Finished ${SRC_DIR} -----------------------"
)
Expand All @@ -59,25 +70,36 @@ function(find_pipeline SRC_DIR TARGET_NAME DEF_NAME)
endif()
endfunction()

function(find_pipeline_optional SRC_DIR TARGET_NAME DEF_NAME)
if(EXISTS "${PIPELINES_SRC}/${SRC_DIR}/CMakeLists.txt")
set(SKIP_PIPELINE FALSE)
if("${SRC_DIR}" STREQUAL "loam" OR "${SRC_DIR}" STREQUAL "LIO-SAM" OR "${SRC_DIR}" STREQUAL "ct_icp" OR "${SRC_DIR}" STREQUAL "genz-icp" OR "${SRC_DIR}" STREQUAL "mad-icp")
set(SKIP_PIPELINE TRUE)
endif()
if(NOT SKIP_PIPELINE)
find_pipeline(${SRC_DIR} ${TARGET_NAME} ${DEF_NAME})
else()
set(RESULTS ${RESULTS} "-- x ${DEF_NAME} (skipped)\n" PARENT_SCOPE)
endif()
else()
set(RESULTS ${RESULTS} "-- x ${DEF_NAME}\n" PARENT_SCOPE)
endif()
endfunction()

# ------------------------- Import all pipelines ------------------------- #
set(LIBS evalio Eigen3::Eigen) # targets to link to
set(DEF "") # definitions to pass to the python module
set(RESULTS "") # for printing results

message("################### Searching for pipelines ###################")
# find_pipeline(directory target_name definition_name)
find_pipeline(kiss-icp/cpp/kiss_icp kiss_icp_pipeline EVALIO_KISS_ICP)
find_pipeline(LIO-SAM lio_sam EVALIO_LIO_SAM)
find_pipeline(loam loam EVALIO_LOAM)
find_pipeline(genz-icp/cpp/genz_icp genz_icp::pipeline EVALIO_GENZ_ICP)
find_pipeline(mad-icp/mad_icp mad_odometry EVALIO_MAD_ICP)
find_pipeline(ct_icp CT_ICP EVALIO_CT_ICP)
message("################### Pipeline Results ###################")
if(NOT "${RESULTS}" STREQUAL "")
string(STRIP "${RESULTS}" RESULTS)
message(${RESULTS})
endif()
message("###############################################################")
find_pipeline(kiss-icp kiss_icp KISS_ICP)
find_pipeline_optional(LIO-SAM lio_sam LIO_SAM)
find_pipeline_optional(loam loam LOAM)
find_pipeline_optional(genz-icp genz_icp GENZ_ICP)
find_pipeline_optional(mad-icp mad_icp MAD_ICP)
find_pipeline_optional(ct_icp ct_icp CT_ICP)
find_pipeline(direct_lidar_inertial_odometry dlio EVALIO_DLIO)
find_pipeline_optional(FAST_LIO fast_lio2 EVALIO_FAST_LIO2)
list(APPEND DEF EVALIO_FAST_LIO2=1.0.0)

# ------------------------- Make Python Bindings ------------------------- #
find_package(
Expand Down
1 change: 1 addition & 0 deletions cpp/bindings/pipelines-src/FAST_LIO.disabled
Submodule FAST_LIO.disabled added at 7cc417
1 change: 1 addition & 0 deletions cpp/bindings/pipelines-src/LIO-SAM.disabled
Submodule LIO-SAM.disabled added at a2be89
1 change: 1 addition & 0 deletions cpp/bindings/pipelines-src/ct_icp.disabled
Submodule ct_icp.disabled added at 70cea3
1 change: 1 addition & 0 deletions cpp/bindings/pipelines-src/direct_lidar_inertial_odometry
Submodule direct_lidar_inertial_odometry added at 044f84
1 change: 1 addition & 0 deletions cpp/bindings/pipelines-src/genz-icp
Submodule genz-icp added at 4113fd
1 change: 1 addition & 0 deletions cpp/bindings/pipelines-src/kiss-icp
Submodule kiss-icp added at 07c893
1 change: 1 addition & 0 deletions cpp/bindings/pipelines-src/loam.disabled
Submodule loam.disabled added at 48fc3a
1 change: 1 addition & 0 deletions cpp/bindings/pipelines-src/mad-icp
Submodule mad-icp added at cc6255
32 changes: 32 additions & 0 deletions cpp/bindings/pipelines/bindings.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,27 @@ using namespace nb::literals;
#include "bindings/pipelines/ct_icp.h"
#endif

#ifdef EVALIO_DLIO
#include "bindings/pipelines/dlio.h"
#endif

#ifdef EVALIO_FAST_LIO2
#include "bindings/pipelines/fast_lio2.h"
#endif

namespace evalio {
inline void makePipelines(nb::module_& m) {
// List all the pipelines here
#ifdef EVALIO_FAST_LIO2
nb::class_<FastLIO2, evalio::Pipeline>(m, "FastLIO2")
.def(nb::init<>())
.def_static("name", &FastLIO2::name)
.def_static("default_params", &FastLIO2::default_params)
.def_static("url", &FastLIO2::url)
.def_static("version", &FastLIO2::version)
.doc() =
"FastLIO2: Fast LiDAR-Inertial Odometry pipeline. Placeholder C++ integration for evalio.";
#endif
#ifdef EVALIO_KISS_ICP
nb::class_<KissICP, evalio::Pipeline>(m, "KissICP")
.def(nb::init<>())
Expand Down Expand Up @@ -112,5 +130,19 @@ inline void makePipelines(nb::module_& m) {
"a small window of scans to perform more accurate dewarping performance. "
"This is the version based on the 2022-ICRA paper.";
#endif

#ifdef EVALIO_DLIO
nb::class_<DLIO, evalio::Pipeline>(m, "DLIO")
.def(nb::init<>())
.def_static("name", &DLIO::name)
.def_static("default_params", &DLIO::default_params)
.def_static("url", &DLIO::url)
.def_static("version", &DLIO::version)
.doc() =
"Direct LiDAR-Inertial Odometry (DLIO) pipeline with continuous-time "
"motion correction. DLIO is a lightweight LIO algorithm that fuses "
"LiDAR and IMU data using a novel coarse-to-fine approach for precise "
"motion correction and robust odometry estimation.";
#endif
}
} // namespace evalio
Loading