Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
74c6285
New option to set pointcloud alpha channel
jlblancoc Aug 27, 2025
50f259d
clang-tidy warning fixes
jlblancoc Aug 27, 2025
0e35337
TEMPORARY package version bump
jlblancoc Sep 4, 2025
40f685c
Define methods enum
jlblancoc Sep 4, 2025
9f59f25
Revert "Define methods enum"
jlblancoc Sep 5, 2025
96f259a
Progress reorganizing deskew
jlblancoc Sep 9, 2025
794fb1e
Add imu preintegration package as dependency
jlblancoc Sep 9, 2025
e18fcb7
cmake files: prefer spaces indentation
jlblancoc Sep 9, 2025
0dde324
Extend velocity buffer with accelerometer and attitude
jlblancoc Sep 9, 2025
dcae424
Implement Linear motion model in the refactored code
jlblancoc Sep 10, 2025
608e9b2
Progress refactoring towards generic deskewing
jlblancoc Sep 11, 2025
253d434
Implement trajectory reconstruction for deskew
jlblancoc Sep 11, 2025
5d833ff
Reorganize deskew methods
jlblancoc Sep 12, 2025
969ca19
code style fixes
jlblancoc Sep 13, 2025
d8fdb42
Finish implementation of higher-order IMU interpolator
jlblancoc Sep 13, 2025
8bbd911
deskew filter: new option 'in_place' to avoid allocating a new cloud …
jlblancoc Sep 13, 2025
f100f97
Fix typo
jlblancoc Sep 13, 2025
309dba7
Add [[nodiscard]] to icp_pipeline_from_yaml()
jlblancoc Sep 13, 2025
835f9f0
add missing acc term
jlblancoc Sep 15, 2025
d9d6228
Update imu bias getter before refactoring
jlblancoc Sep 16, 2025
aa4806a
Move LocalVelocityBuffer to the IMU repository
jlblancoc Sep 16, 2025
999d040
Move code out to the imu preintegration package
jlblancoc Sep 16, 2025
d46aeed
Depend on imu external library
jlblancoc Sep 17, 2025
5d48498
Finished integration of new IMU API package
jlblancoc Sep 17, 2025
a937a3c
Fix clang-tidy warnings
jlblancoc Sep 18, 2025
90f317f
Refactor mp2p_icp_map into mp2p_icp_common for IMU-related parts
jlblancoc Sep 19, 2025
d8c80e2
Add new virtual interface NearestPointWithCovCapable
jlblancoc Sep 19, 2025
0afc13a
clang-format
jlblancoc Sep 19, 2025
ea224d8
New interface 'IcpPrepareCapable'
jlblancoc Sep 19, 2025
e6002c6
Style: public 'params_' rename as 'params'
jlblancoc Sep 19, 2025
5c3fe86
Style fixes
jlblancoc Sep 19, 2025
1be13d4
Remove FilterDecimateVoxelsQuadratic
jlblancoc Sep 19, 2025
c565961
Continue "params_" => "params" update
jlblancoc Sep 19, 2025
524ca44
First version of FPS filter
jlblancoc Sep 19, 2025
1a7a6f8
Use fractionary integers for faster sampling
jlblancoc Sep 19, 2025
370c3fd
BBox filter: fix target layer must be same type than input
jlblancoc Sep 20, 2025
8a0878b
Add [[nodiscard]] to estimate_points_eigen()
jlblancoc Sep 20, 2025
b008b95
Make Matcher_Points_Base::transform_local_to_global() to use TBB, and…
jlblancoc Sep 20, 2025
b255eb7
Implement a new Cov2Cov matcher
jlblancoc Sep 21, 2025
1f35b21
refactor cov2cov matcher
jlblancoc Sep 22, 2025
2b41318
clang-tidy fixes
jlblancoc Sep 22, 2025
f3cd8db
Fix missing cov2cov registration
jlblancoc Sep 22, 2025
26388fd
Add debug print method
jlblancoc Sep 22, 2025
239f782
Style fixes
jlblancoc Sep 22, 2025
5f446d4
First working version of cov2cov optimization (to be debugged)
jlblancoc Sep 22, 2025
ecdd28e
Progress visualizing cov2cov pairings
jlblancoc Sep 23, 2025
8122870
Include sqrt(cov_inv)
jlblancoc Sep 23, 2025
a894600
FilterDecimateAdaptive now exploits parallelization
jlblancoc Sep 23, 2025
0b9c7fc
FilterByRange new parameter: metric_l_infinity
jlblancoc Sep 23, 2025
07e75b9
Render cov2cov pairings
jlblancoc Sep 23, 2025
4d340bc
fix bug in FilterByIntensity params parser
jlblancoc Sep 23, 2025
338babd
Merge branch 'feature/better-lio-wip' into feature/better-lio
jlblancoc Sep 24, 2025
e52d1ae
clang-tidy fixes
jlblancoc Sep 24, 2025
616ec1f
Undo lost changes in git merge
jlblancoc Sep 24, 2025
cd18e1d
Merge branch 'develop' into feature/better-lio
jlblancoc Sep 24, 2025
fd84c03
Fix clang-format
jlblancoc Sep 24, 2025
cfee8f3
Workaround to clang-format apparent bug
jlblancoc Sep 24, 2025
17dcd34
Define virtual API MetricMapMergeCapable
jlblancoc Sep 24, 2025
9ee08c8
icp log viewer: more options for cov2cov visualization
jlblancoc Sep 25, 2025
2710f92
Fix: threshold must be a dynamic parameter
jlblancoc Sep 26, 2025
c3fa6b5
Fix: regression in pt2pt optimization
jlblancoc Sep 29, 2025
794025c
clang-format fix
jlblancoc Sep 30, 2025
5335af8
Update formatter script
jlblancoc Sep 30, 2025
72d5d84
CI: use testing only
jlblancoc Sep 30, 2025
fb418e4
Remove external libpointmatcher
jlblancoc Sep 30, 2025
1d85f88
FIX: sm2mm needs to realize local velocity buffer first
jlblancoc Oct 5, 2025
1beb321
BUGFIX: FilterMerge would lost all point fields except XYZ
jlblancoc Oct 6, 2025
156e304
format fixes
jlblancoc Oct 7, 2025
e887bc2
fix: sm2mm must preserve local ref time
jlblancoc Oct 8, 2025
64f3bd8
mm-viewer: add combo box to select intensity colormap
jlblancoc Oct 8, 2025
213ce64
format
jlblancoc Oct 8, 2025
6ff6bd0
Refactor errorTerm for pt2pt for better reusability
jlblancoc Oct 9, 2025
39dde96
Remove dead code
jlblancoc Oct 9, 2025
1b2c340
clang-tidy fixes
jlblancoc Oct 9, 2025
afbcbd2
format
jlblancoc Oct 10, 2025
c3d2514
Update mola_common to 0.5.1
jlblancoc Oct 10, 2025
5a758e9
Allow building without the IMU library
jlblancoc Oct 10, 2025
b6dfc23
Add 'name' property to all generators and filters for disaggregated s…
jlblancoc Oct 10, 2025
94a4ebd
Add unit test for cov2cov optimizer
jlblancoc Oct 10, 2025
2d7693e
Progress with deskew unit test
jlblancoc Oct 10, 2025
2abd82b
FIX: potential crash in FilterDeskew
jlblancoc Oct 10, 2025
6c2ec96
progress with deskew test
jlblancoc Oct 11, 2025
6ca5450
include centripetal force
jlblancoc Oct 11, 2025
30c078a
Correct unit test (error in GT)
jlblancoc Oct 11, 2025
d9d6d4a
CI: add running unit tests
jlblancoc Oct 11, 2025
93d4011
FIX: bug in non-TBB serial implementation of GN optimizer
jlblancoc Oct 12, 2025
f4eb6c5
CI: Add another pipeline without TBB
jlblancoc Oct 12, 2025
18619f1
unit test: second test case using sm2mm()
jlblancoc Oct 12, 2025
f318352
fix warning
jlblancoc Oct 12, 2025
07d9d6f
refactor for clarity
jlblancoc Oct 12, 2025
b41235b
unit test: trajectories with smooth profiles
jlblancoc Oct 12, 2025
5718a1b
format
jlblancoc Oct 12, 2025
fb6b393
demo sm2mm pipelines: add deskew method entry
jlblancoc Oct 12, 2025
517f73a
Finally, fixed wrong deskew in sm2mm
jlblancoc Oct 12, 2025
52c62fc
sm2mm cli app: add --profiler flag
jlblancoc Oct 12, 2025
cf29acf
Implement parsing missing IMU params
jlblancoc Oct 12, 2025
bdac0a6
Fix TO-DO note
jlblancoc Oct 12, 2025
bcba7a7
Solve another TO-DO note
jlblancoc Oct 12, 2025
941ff8b
revert package.xml version
jlblancoc Oct 12, 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
12 changes: 6 additions & 6 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
version: 2
jobs:
gcc-u22.04-mrpt-dev:
gcc-u2204-mrpt-dev:
docker:
- image: mrpt/mrpt-build-env:full-jammy
steps:
Expand All @@ -25,7 +25,7 @@ jobs:
# - run: make gcov -C build
# - run: make -C build
# - run: bash <(curl -s https://codecov.io/bash) -X gcov -y .codecov.yml -s build
gcc-u22.04-mrpt-stable:
gcc-u2204-mrpt-stable:
docker:
- image: mrpt/mrpt-build-env:full-jammy
steps:
Expand All @@ -47,7 +47,7 @@ jobs:
command: cmake -H. -Bbuild
- run: make -C build
- run: make CTEST_OUTPUT_ON_FAILURE=1 test -C build
clang-u22.04-mrpt-dev:
clang-u2204-mrpt-dev:
docker:
- image: mrpt/mrpt-build-env:full-jammy
steps:
Expand Down Expand Up @@ -76,6 +76,6 @@ workflows:
version: 2
build:
jobs:
- gcc-u22.04-mrpt-dev
- gcc-u22.04-mrpt-stable
- clang-u22.04-mrpt-dev
- gcc-u2204-mrpt-dev
- gcc-u2204-mrpt-stable
- clang-u2204-mrpt-dev
1 change: 1 addition & 0 deletions .clang-tidy
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
Checks: >
-*,
bugprone-*,
-bugprone-easily-swappable-parameters,
readability-braces-around-statements,
readability-else-after-return,
cppcoreguidelines-interfaces-global-init,
Expand Down
39 changes: 31 additions & 8 deletions .github/workflows/ros-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,31 +20,37 @@ jobs:
# https://ros.org/reps/rep-2000.html
include:
# Humble Hawksbill (May 2022 - May 2027)
- docker_image: ubuntu:jammy
ros_distribution: humble
use_ros_testing: false
#- docker_image: ubuntu:jammy
# ros_distribution: humble
# use_ros_testing: false

- docker_image: ubuntu:jammy
ros_distribution: humble
use_ros_testing: true

# Jazzy (2024 - ??)
- docker_image: ubuntu:noble
ros_distribution: jazzy
use_ros_testing: false
#- docker_image: ubuntu:noble
# ros_distribution: jazzy
# use_ros_testing: false

- docker_image: ubuntu:noble
ros_distribution: jazzy
use_ros_testing: true

# Rolling Ridley (No End-Of-Life)
#- docker_image: ubuntu:noble
# ros_distribution: rolling
# use_ros_testing: false

- docker_image: ubuntu:noble
ros_distribution: rolling
use_ros_testing: false
use_ros_testing: true

# Same as above, but disable TBB
- docker_image: ubuntu:noble
ros_distribution: rolling
use_ros_testing: true
disable_tbb: true

container:
image: ${{ matrix.docker_image }}
Expand Down Expand Up @@ -74,5 +80,22 @@ jobs:
- name: Build with colcon
run: |
. /opt/ros/*/setup.sh
# If disable_tbb is true, add the CMake flag to disable TBB
if [ "${{ matrix.disable_tbb }}" = "true" ]; then
echo "Disabling TBB..."
EXTRA_CMAKE_ARGS="-DMP2PICP_USE_TBB=OFF"
else
EXTRA_CMAKE_ARGS=""
fi
env
MAKEFLAGS="-j2" colcon build --symlink-install --parallel-workers 2 --event-handlers console_direct+
MAKEFLAGS="-j2" colcon build \
--symlink-install \
--parallel-workers 2 \
--event-handlers console_direct+ \
--cmake-args $EXTRA_CMAKE_ARGS

- name: Run unit tests
run: |
. /opt/ros/*/setup.sh
colcon test --event-handlers console_direct+
colcon test-result --verbose
6 changes: 0 additions & 6 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
[submodule "3rdparty/libpointmatcher"]
path = 3rdparty/libpointmatcher
url = https://github.com/ethz-asl/libpointmatcher.git
[submodule "3rdparty/libnabo"]
path = 3rdparty/libnabo
url = https://github.com/ethz-asl/libnabo.git
[submodule "3rdparty/mola_common"]
path = 3rdparty/mola_common
url = https://github.com/MOLAorg/mola_common.git
Expand Down
8 changes: 7 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,16 @@
},
"ros.distro": "humble",
"cSpell.words": [
"deskewed",
"eigen",
"linearization",
"recolorize",
"relinearization",
"reproject",
"tfest",
"unrealize",
"voxelmaps"
"voxelizes",
"voxelmaps",
"XYZIRT"
]
}
35 changes: 0 additions & 35 deletions 3rdparty/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,39 +1,4 @@

set(MP2PICP_BUILD_POINTMATCHER OFF CACHE BOOL "Build libpointmatcher modules")

if (MP2PICP_BUILD_POINTMATCHER)
# Check if we have the dependencies of pointmatcher, and silently skip it if we don't have:
find_package(Boost COMPONENTS thread filesystem system program_options date_time QUIET)
if (NOT Boost_FOUND)
message(STATUS "mp2p_icp: Boost not found: building without libpointmatcher")
set(MP2PICP_BUILD_POINTMATCHER OFF CACHE BOOL "Build libpointmatcher modules" FORCE)
endif()
endif()

if (MP2PICP_BUILD_POINTMATCHER)
# libnabo
# ---------------
option(LIBNABO_BUILD_EXAMPLES "Build libnabo examples" OFF)
option(LIBNABO_BUILD_TESTS "Build libnabo tests" OFF)
option(LIBNABO_BUILD_PYTHON "Build libnabo python" OFF)
option(LIBNABO_BUILD_DOXYGEN "Build libnabo doxygen documentation" OFF)
mark_as_advanced(LIBNABO_BUILD_EXAMPLES)
mark_as_advanced(LIBNABO_BUILD_TESTS)
mark_as_advanced(LIBNABO_BUILD_PYTHON)
mark_as_advanced(LIBNABO_BUILD_DOXYGEN)

add_subdirectory(libnabo)

# libpointmatcher:
# ---------------
option(POINTMATCHER_BUILD_EXAMPLES "Build libpointmatcher examples" OFF)
option(POINTMATCHER_BUILD_EVALUATIONS "Build libpointmatcher evaluations" OFF)
mark_as_advanced(POINTMATCHER_BUILD_EXAMPLES)
mark_as_advanced(POINTMATCHER_BUILD_EVALUATIONS)

add_subdirectory(libpointmatcher)
endif()

# ================================
# robin-map
# ================================
Expand Down
1 change: 0 additions & 1 deletion 3rdparty/libnabo
Submodule libnabo deleted from 37d7a7
1 change: 0 additions & 1 deletion 3rdparty/libpointmatcher
Submodule libpointmatcher deleted from 8ce073
2 changes: 1 addition & 1 deletion 3rdparty/mola_common
89 changes: 48 additions & 41 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,58 +10,62 @@
cmake_minimum_required(VERSION 3.5)

if("$ENV{ROS_VERSION}" STREQUAL "2")
set(DETECTED_ROS2 TRUE)
set(DETECTED_ROS2 TRUE)
elseif("$ENV{ROS_VERSION}" STREQUAL "1")
set(DETECTED_ROS1 TRUE)
set(DETECTED_ROS1 TRUE)
endif()

if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(default_build_type "Release")
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE)
set(default_build_type "Release")
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE)
endif()
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo" "SanitizeAddress" "SanitizeThread")


# Tell CMake we'll use C++ for use in its tests/flags
project(mp2p_icp LANGUAGES CXX)

# MOLA CMake scripts: "mola_xxx()"
# to allow stand-along builds outside of MOLA, use local copy instead:
find_package(mola_common QUIET)
if(NOT mola_common_FOUND)
message(STATUS "Standalone ${PROJECT_NAME} build: using mola_common from submodule.")
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/mola_common-build")
execute_process(COMMAND
${CMAKE_COMMAND} ${PROJECT_SOURCE_DIR}/3rdparty/mola_common -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/mola_common-install
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mola_common-build
)
execute_process(COMMAND
${CMAKE_COMMAND} --build . --target install
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mola_common-build
)
# 2nd attempt:
set(mola_common_DIR ${CMAKE_CURRENT_BINARY_DIR}/mola_common-install/share/mola_common/cmake/)
find_package(mola_common REQUIRED)
message(STATUS "Standalone ${PROJECT_NAME} build: using mola_common from submodule.")
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/mola_common-build")
execute_process(COMMAND
${CMAKE_COMMAND} ${PROJECT_SOURCE_DIR}/3rdparty/mola_common -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/mola_common-install
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mola_common-build
)
execute_process(COMMAND
${CMAKE_COMMAND} --build . --target install
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mola_common-build
)
# 2nd attempt:
set(mola_common_DIR ${CMAKE_CURRENT_BINARY_DIR}/mola_common-install/share/mola_common/cmake/)
find_package(mola_common REQUIRED)
endif()

# 3rd party:
add_subdirectory(3rdparty)

# find dependencies:
find_package(MRPT 2.11.5 REQUIRED COMPONENTS
containers
tfest
maps
gui
topography
containers
tfest
maps
gui
topography
)
find_package(Threads REQUIRED)
find_package(TBB) # optional

if(TBB_FOUND)
option(MP2PICP_USE_TBB "If found TBB, this option controls whether to use it or not" ON)
option(MP2PICP_USE_TBB "If found TBB, this option controls whether to use it or not" ON)
endif()

find_package(mola_imu_preintegration) # Used for advanced deskew methods in FilterDeskew
if (NOT mola_imu_preintegration_FOUND)
message(WARNING "mola_imu_preintegration not found: advanced deskew will not be available")
endif()

#----
Expand All @@ -82,6 +86,9 @@ set(MP2P_ICP_PATCH_VERSION ${CMAKE_MATCH_3})
# define library targets:
# -----------------------

# Helper parameter source library:
add_subdirectory(mp2p_icp_common)

# Metric map container library:
add_subdirectory(mp2p_icp_map)

Expand Down Expand Up @@ -109,20 +116,20 @@ if(MP2PICP_BUILD_APPLICATIONS)
endif()

if(DETECTED_ROS1)
# Find catkin macros and libraries
# if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
# is used, also find other catkin packages
find_package(catkin
REQUIRED
#COMPONENTS
#roscpp tf2 dynamic_reconfigure std_msgs nav_msgs sensor_msgs visualization_msgs
#tf2_geometry_msgs
)

catkin_package(
#CATKIN_DEPENDS tf2 tf2_geometry_msgs
# INCLUDE_DIRS include
# LIBRARIES mrpt_localization
# DEPENDS mrpt
)
# Find catkin macros and libraries
# if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
# is used, also find other catkin packages
find_package(catkin
REQUIRED
#COMPONENTS
#roscpp tf2 dynamic_reconfigure std_msgs nav_msgs sensor_msgs visualization_msgs
#tf2_geometry_msgs
)

catkin_package(
#CATKIN_DEPENDS tf2 tf2_geometry_msgs
# INCLUDE_DIRS include
# LIBRARIES mrpt_localization
# DEPENDS mrpt
)
endif()
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ C++ libraries for multi primitive-to-primitive (MP2P) ICP algorithms and flexibl

The project provides these C++ libraries:
* `mp2p_icp_map`: Provides the [`mp2p_icp::metric_map_t`](https://docs.mola-slam.org/latest/class_mp2p_icp_metric_map_t.html#doxid-classmp2p-icp-1-1metric-map-t) generic metric map container. Metric map files with extension `*.mm` are serializations of instances of this class.
* `mp2p_icp_common`: Provides utility classes like `ParameterSources` and IMU-based velocity buffers.
* `mp2p_icp`: With ICP algorithms. It depends on `mp2p_icp_map`.
* `mp2p_icp_filters`: With point cloud filtering and manipulation algorithms. It depends on `mp2p_icp_map`.

Expand Down
Loading
Loading