CHANGELOG
Changelog for package mola_lidar_odometry
2.1.0 (2026-04-29)
FIX: show_localmap was not loaded from YAML file; expose more pipeline env vars
Merge pull request #70 from MOLAorg/feat/multiple-scans-per-volume simple estimator params file: expose all hardcoded values as env vars
simple estimator params file: expose all hardcoded values as env vars
Merge pull request #69 from MOLAorg/feat/multiple-scans-per-volume feat: new option to include multiple scans per space volume
feat: new option to include multiple scans per space volume
feat: Add IMU & LiDAR configurable QoS (requires latest mola_bridge_ros2)
Merge pull request #67 from Zeal-Robotics/fix/pose-timestamp-after-deskew fix: stamp published pose with deskew reference time, not raw obs stamp
fix: stamp published pose with deskew reference time, not raw obs stamp The ICP-derived pose corresponds to the vehicle at t=0 of the deskewed cloud. With the default FilterAdjustTimestamps: MiddleIsZero, t=0 is the middle of the scan, while obs->timestamp (taken from the LiDAR driver header) is the start of the scan. The published LocalizationUpdate.timestamp and the timestamp fed back into navstate_fuse->fuse_pose() were both using obs->timestamp, so downstream consumers (and the internal fuser) saw a pose tagged with a time roughly half a scan period (~50 ms at 10 Hz) before the moment the pose actually holds. The absolute reference time is already tracked inside ParameterSource::localVelocityBuffer.get_reference_zero_time(): - Generator seeds it with obs->timestamp - FilterAdjustTimestamps shifts it by the same offset it applies to per-point timestamps - FilterAbsoluteTimestamp already uses it as the absolute reference for per-point timestamps This commit reads it back after the observation pipeline runs and threads it through every pose-time use site: - ICP initial-guess query (estimated_navstate) - ICP result fusion (fuse_pose) - estimated_trajectory insertion - past_simplemaps_observations keyframe key - Published LocalizationUpdate, map, deskewed-scan, debug-trace timestamps Sensor-cadence uses (rate stats, drop-too-close logic, debug log context, last_obs_timestamp, per-label staleness tracking) keep the raw obs->timestamp since they are about when the observation arrived, not when the pose holds. If FilterAdjustTimestamps is not configured the buffer’s reference equals obs->timestamp and behavior is unchanged. There is a fallback to obs->timestamp for safety if the buffer was never seeded.
Merge pull request #66 from MOLAorg/better-grav-aligner-tests review: address gravity-aligner / rebaker review comments
review: address gravity-aligner / rebaker review comments - Fix stale Doxygen on onNewKeyframe (window param) and computePublishResidual (drop tail_kf_id reference, document unconditional residual contract). - TrajectoryRebaker::rebake: slide anchor forward to lower_bound when no KF >= anchor_id exists, so corrected_poses and reported anchor_id stay consistent. - Remove redundant empty-input guard in two-arg rebake overload. - Replace composePoint+subtraction delta computation with rotateVector in TrajectoryRebaker and the test helper. - Extract kDefaultAxisEps single source of truth used by Params and rotationFromGravity. - Fix sign in test bodyGravity comment (a_body.z = +g*cos), clarify accelerometer convention. - Wire maxGravityErrorDeg into KnownPitchTilt_converges as a sanity check. - Clarify LinearDrift_recoversHorizontalPath comment that R_grav per-KF exactly cancels T_odom.R (scenario justifying the 5cm Z tolerance).
Merge pull request #65 from MOLAorg/feat/better-gravity-align feat: add GravityMapAligner with per-KF IMU pool and robust gravity estimation
fix minimum accelerometer noise
feat: add TrajectoryRebaker for per-KF gravity-aware pose chain re-integration
feat: add GravityMapAligner with per-KF IMU pool and robust gravity estimation New class GravityMapAligner stores one time-averaged body-frame accelerometer sample per keyframe and provides: - estimateGravityVector / estimatePerKFCorrection: IRLS/Huber-robust weighted mean of R_i·a_body_i to estimate gravity direction in the odom frame, with per-window support for the per-KF rebake path. - rotationFromGravity: pitch/roll-only correction (zero yaw by construction) that sends the estimated gravity vector to +Z. - onNewKeyframe / onKeyframeDropped for pool lifecycle management. Unit tests cover: nullopt below threshold, zero-tilt identity correction, 2° pitch convergence (<0.1°), Huber robustness with 20% outlier KFs, pool eviction, yaw-free output, and per-KF windowed estimation. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Merge pull request #64 from MOLAorg/fix/more-rational-use-mutexes FIX: More rational use of mutexes and shared opengl objects
FIX: More rational use of mutexes and shared opengl objects
Merge pull request #63 from MOLAorg/fix/deadlock-load-map FIX: potential dead locks/long waits requesting relocalization
FIX: potential dead locks/long waits requesting relocalization
Merge pull request #60 from Zeal-Robotics/fix/sensor-frame-max-range-and-filter-anchors fix(mola_lidar_odometry): anchor ESTIMATED_SENSOR_MAX_RANGE and FilterByRange at the sensor
Rename pipeline _sensor_ names to _observation_radius_, document base_link-anchored deadzone The pipeline variables and YAML param keys historically called _SENSOR_MAX_RANGE / *_sensor_range_ are actually the bounding-radius of the latest observation cloud measured from base_link, not anything sensor-anchored. This caused real-world confusion: users reading the name expected sensor-frame semantics and were puzzled when the canonical FilterByRange deadzone removed points around base_link instead of around the sensor. Rename to make the semantics self-documenting: - Dynamic vars (parameter source): ESTIMATED_SENSOR_MAX_RANGE -> ESTIMATED_OBSERVATION_RADIUS INSTANTANEOUS_SENSOR_MAX_RANGE -> INSTANTANEOUS_OBSERVATION_RADIUS - YAML param keys: max_sensor_range_filter_coefficient -> observation_radius_filter_coefficient absolute_minimum_sensor_range -> absolute_minimum_observation_radius - Mirroring C++ symbol renames in state_, params_, and methods (doInitializeEstimatedObservationRadius etc.). GUI label tweaked. All legacy names remain working as deprecated aliases (dynamic vars are double-published; YAML keys fall back via cfg.getOrDefault). A one-shot warning is emitted at init when the loaded YAML still references any legacy name; aliases can be removed in a future release. The user-facing env var MOLA_ABS_MIN_SENSOR_RANGE is intentionally kept unchanged: the YAML ${VAR|default} substitution is single-pass, so the elegant chained-default pattern doesn’t aliasing it cleanly, and a setenv shim has caveats for callers that load pipelines outside of the canonical entry points. The misnomer survives at the env-var name only; docs already point to the renamed concept. Also clarify in lidar3d-gicp.yaml that the Lu221E cube deadzone is intentionally vehicle-anchored (centered at base_link, not at the sensor) so it covers the vehicle body and a person standing next to the robot regardless of where the sensor is mounted. Users who additionally want a sensor-anchored cut can layer one on via observations_prefilter_file. No behavioral change.
Merge branch ‘Zeal-Robotics-perf/prewarm-icp-search-on-startup’ into develop
perf(initialize): pre-warm ICP search structures for preloaded local maps When the local map is loaded from disk via load_existing_local_map (the multi-session SLAM / localization-only path), each layer that implements mp2p_icp::IcpPrepareCapable defers building its ICP search structures (per-keyframe global-frame cloud materialization, merged submap construction, KD-tree build, …) until the first call to mp2p_icp::ICP::align(). For a non-trivial preloaded map this is seconds of work that blocks the lidar worker on the very first scan, backs the bag-feed up, and freezes the GUI. Move that cost to startup by walking state_.local_map->layers right after load_from_file and calling icp_get_prepared_as_global() on every IcpPrepareCapable layer, using the configured initial pose as the reference point. The total amount of work is unchanged; it just happens alongside load_from_file (where the user already expects a delay) instead of during real-time playback. If the actual first ICP estimate ends up far from the initial pose, the selected sub-keyframe set may be rebuilt then, but the per-keyframe point-cloud and cache data is already materialized so that rebuild is cheap.
Merge pull request #59 from Zeal-Robotics/feat/expose-transform-tolerance-env-vars feat(launch): expose transform_tolerance and transform_publish_period
feat(launch): expose transform_tolerance and transform_publish_period Plumbs the two new BridgeROS2 params through the standard MOLA_ROS2_* env-var convention so they can be overridden from ros2 launch without editing YAML: MOLA_ROS2_TRANSFORM_TOLERANCE default 0.1 MOLA_ROS2_TRANSFORM_PUBLISH_PERIOD default 0.05 (20 Hz; 0 disables) Defaults match BridgeROS2 and the AMCL / slam_toolbox / RTAB-Map convention, so consumers can lookupTransform(map, base_link, now()) without tf2 ExtrapolationException.
Add MOLA_DESKEW_IGNORE_ACCELEROMETER env var
consistent ros2 topic name var MOLA_ODOMETRY_TOPIC for both offline/online
Merge pull request #58 from MOLAorg/feat/ros2-diagnostics Implement new mola_kernel diagnostics API
clang format
diagnostics: use wall-clock reception time for input-data staleness check last_obs_timestamp stores the sensor hardware timestamp which may not be synchronized to system time (GPS-disciplined lidars, unsync’d clocks, etc.). Introduce last_obs_reception_time (set via mrpt::Clock::now() when each scan arrives) and use it for the Input Data stale/error age computation so the check reflects actual data flow rather than sensor-vs-host clock drift. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
docs/launch: alphabetical ordering for use_* args; drop spurious tf remap from aggregator - mola_lo_ros_node.rst: move use_diagnostic_aggregator before use_imu_for_lio - launch.py: remove remappings=tf_remaps from diagnostic_aggregator node (it only needs diagnostics topics, not tf) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
diagnostics: fix ICP quality startup false-ERROR, timing period source, and overall scope - ICP Quality: treat as STALE (not ERROR) until state_.last_icp_timestamp is set - Timing: derive sensorPeriod from observed scan interval (last_observed_scan_period_sec) rather than params_.min_time_between_scans throttle threshold - Overall Status: iterate only over entries added by this provider (startIndex..end) so unrelated providers’ diagnostics do not influence the overall level Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
diagnostics: validate threshold ordering in Parameters::Diagnostics::initialize Assert that warn < error for icp_quality, input_stale_sec, and dropped_ratio, and that all values are in their valid ranges, so misconfiguration cannot silently invert severities at runtime. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add optional diagnostic_aggregator launch + sample config Off by default (use_diagnostic_aggregator:=True to enable). Intended for isolated bring-up/demos; in a larger stack a central aggregator should group LidarOdometry statuses instead. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
docs: add REP-107 diagnostics page for MOLA-LO Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Implement new mola_kernel diagnostics API (exported to ROS2 via BridgeROS2)
ros2 launch: improved configuration validator
ros2 launch: Add missing mola_bridge_odometry_frame argument; fix broken behavior
Merge pull request #57 from MOLAorg/feat/clarify-usage-modes docs: clarify usage modes; cli: add /tf selection args
ros2 launch: safe guard against importing duplicated odometry
ros2 launch: add wheels odometry arguments; fix opaque function must come last
docs: clarify usage modes; cli: add /tf selection args
Auto-transition to active mode after state estimator convergence
GUI: Add message when lidar stream starts
Merge pull request #55 from MOLAorg/feat/add-odom-frame-env-var ros2 launch: export MOLA_TF_ESTIMATED_ODOMETRY
ros2 launch: export MOLA_TF_ESTIMATED_ODOMETRY from mola_lo_reference_frame for consistency
Merge pull request #54 from MOLAorg/fix-missing-ros2-launch-base-link BUGFIX: Changing base_link in ros2 launch didn’t propagate to LO
BUGFIX: Changing base_link in ros2 launch didn’t propagate to LO
Merge pull request #45 from MOLAorg/fix/init-from-gps-imu Support initialization from state estimator
Support initialization from state estimator
Contributors: Jose Luis Blanco-Claraco, Robin Van Cauwenbergh
Rename the family of _sensor_ pipeline names that actually meant observation-from-
base_linkto _observation_radius_ /*_OBSERVATION_RADIUSto clarify semantics. The legacy names remain as deprecated aliases so existing pipelines keep working unchanged; a one-shot warning is emitted at init when the loaded YAML still references any legacy name. The aliases will be removed in a future release.Dynamic variables:
ESTIMATED_SENSOR_MAX_RANGE→ESTIMATED_OBSERVATION_RADIUS,INSTANTANEOUS_SENSOR_MAX_RANGE→INSTANTANEOUS_OBSERVATION_RADIUS.YAML param keys:
max_sensor_range_filter_coefficient→observation_radius_filter_coefficient,absolute_minimum_sensor_range→absolute_minimum_observation_radius.
2.0.0 (2026-04-02)
Merge pull request #53 from MOLAorg/feat/use-imu-grav-align Use IMU readings to estimate gravity up vector as ICP prior constraint
Add formal CLA
mola-cli-launch files: apply yaml format
FIX: mola-lidar-odometry-cli now can handle the two types of GPS messages too
gui stats: more robust sensor rate estimation (include gnss now too)
docs: add layer name to pipeline table
gicp pipeline: expose new KF-metric map parameters as optional env vars
ros2 launch: add new argument ‘gpsfix_topic_name’ for GPSFix messages
Merge pull request #50 from MOLAorg/feat/refactor-gui Port to the new backend agnostic GUI API
Port to the new backend agnostic GUI API
ROS2 node and ros2bags: support gps_msgs/GpsFix messages too
On bad ICP, do neither publish or show deskewed scans
gicp pipeline: expose more env vars for KF map params
Merge pull request #48 from MOLAorg/feat/selective-icp-log New env var to debug bad ICP cases: MOLA_WRITE_DEBUG_ICP_LOG_IF_QUALITY_UNDER
New env var to debug bad ICP cases: MOLA_WRITE_DEBUG_ICP_LOG_IF_QUALITY_UNDER
CSV stats: include icp_quality too
Merge pull request #47 from MOLAorg/better-deskew-performance More efficient deskew and visualization
refactor deskew and viz updates
Ensure no detached threads (#46) * Fix: potential miss error report saving mm files * Ensure no detached threads for disk io * minor fixes
fix obsolete usage of ament_target_dependencies()
Remove no longer needed param period_publish_new_localization (Removed in BridgeROS2)
Fix: provide a mechanism to read 2D lidar from ROS (#43) * Fix: provide a mechanism to read 2D lidar from ROS * docs: add new ros launch argument lidar_topic_type * doc: better roslaunch arg description
Fix building against older versions of mrpt & mp2p_icp
Saving simplemap with lazy-load is done in its own detaled thread
Merge pull request #40 from MOLAorg/feat/more-clang-tidy-checks Add many more clang-tidy checks
Remove thread_local aux variable for viz camera rotation
Increase level of clang-tidy warnings, and fix them
Copyright year bump
Merge pull request #39 from MOLAorg/feat/optional-prefilter-pipeline Add optional prefilter pipeline for all ICP methods
Add many more clang-tidy checks
Add optional prefilter pipeline for all ICP methods
Contributors: Jose Luis Blanco-Claraco
1.3.1 (2025-12-29)
Merge pull request #36 from MOLAorg/feat/use-generic-map-fields Use CGenericPointsMap to propagate all sensor per-point fields thru mapping pipelines
Support to visualize clouds in MOLA Viz recolorized by any cloud point field
Use CGenericPointsMap to propagate all sensor per-point fields thru mapping pipelines
Contributors: Jose Luis Blanco-Claraco
1.3.0 (2025-12-15)
Add CI and documentation badges to README Added badges for CI build, clang-format, documentation, and code coverage.
Add option ‘use_imu_orientation’ to disable using IMU orientation for initialization
docs: add table clarifying localmap types
Make it compatible with observations w/o cov
Discard GPS readings with invalid cov matrix
Add warning if sensor stamps go backwards in time
Update usage instructions for mola_lo_apps.rst Added usage instructions for LIO with Ouster in mola_lo_apps.rst.
Contributors: Jose Luis Blanco-Claraco
1.2.2 (2025-11-08)
Add quick instructions to launch mola-lo-gui on an Ouster dataset
Add option to store persistent settings and check version
Fix: missing publication of LocalMap if BridgeROS2 loads after this module.
Contributors: Jose Luis Blanco-Claraco
1.2.1 (2025-10-28)
Fix build against upcoming mrpt v2.15.0
Reduce the limit of published points to avoid FoxGlove WS overflow
docs: show first usage with rosbags & rawlogs
Contributors: Jose Luis Blanco-Claraco
1.2.0 (2025-10-21)
Tune ROS2 publication rates for reduced viz load
New option ‘publish_deskewed_scans’
Fix unit tests
ros2 launch: sort arguments
Contributors: Jose Luis Blanco-Claraco
1.1.0 (2025-10-20)
Docs: describe the new GICP and LIO pipelines
Update rviz settings
Prefer to publish deskewed clouds in ‘map’ frame
FIX: ROS2 interface must use correct cloud and pose timestamps
Update and fix LIO ROS2 launch demo and docs
ROS: support rendering deskewed clouds
Replace deprecated ament_target_dependencies() with pure cmake
Publish deskewed scans for ROS visualization
Make use of ConstPtr for processing incoming observations
Code clean up: remove macros for building against very old mola_kernel versions
ros2 launch: add argument ‘mola_tf_base_link’
Contributors: Jose Luis Blanco-Claraco
1.0.0 (2025-10-13)
Merge pull request #26 from MOLAorg/feature/better-lio Better LIO & new GICP pipeline
CI: Run on ROS testing only
Add custom ‘name’ to pipeline stages for profiler
Update docs: Show example of use for MOLA_TF_BASE_LINK=os_sensor
Feature: add option to save deskewed clouds
refactor part of processScan() for code clarity
fix clang-tidy warnings
New config flag MOLA_SAVE_MM to save final metric map at session end
add option to re-colorize clouds by intensity (local map)
Add a clear message at initialization showing the name of the used pipeline
Fix macro to detect newer mp2p_icp version
cli app: show LO pose
Refactor the way Lidar scans are enqueued depending on LO/LIO usage
ICP pipelines: renamed old ‘default’ as ‘icp’, and add new ‘default’ symlink pointing to ‘gicp’
cli: use MOLA YAML parser for state estimation files
Fix kitti eval scripts
cli: fix expected contents of state estimation param files
Debug traces: more covariance data
GUI: Show keyframe stats
configurable icp quality setpoint
Fix lidar rate for multiple lidars
New param to change the color of trajectory in the GUI
reset local viz clouds when re-localizing
gicp pipeline: use 2 resolutions (icp / map)
Auto-scale intensity for visualization
Less aggressive P controller for adaptive sigma
Use adaptive sampler
Update to latest mp2p_icp library API
Progress optimizing new gicp pipeline
New GICP pipeline file
Fix for latest mola imu API changes
Send velocity and orientations to the local velocity buffer
Better visualization of current / past clouds, with configurable colormaps from the yaml file
Move to the new deskew_method flag in mp2p_icp
README.md: update bibtex reference
Move IMU initialization to package mola_imu_preintegration
IMU initializer moved out to the mola_imu_preintegration package for better reusability
PitchRoll init: Add to-do note on IMU bias
GUI: show lidar & imu rates
remove obsolete pipeline
Fix typos in YAML comments
Configurable GUI background color
Implement display dense local map (decaying deskewed clouds)
Implement visualization of past clouds as transparent, decaying clouds
Add missing header for latest mola_kernel
option to show mulran dataset clouds with their real intensity channel
Visualization: show the deskewed current observation instead of raw
Contributors: Jose Luis Blanco-Claraco
0.9.0 (2025-08-26)
FIX: bug in formula for pitch-roll initialization from IMU
Store local IMU velocity buffer in key-frame simplemaps
mola-lidar-odometry-cli: New CLI arguments to support datasets with IMUs
Implement precise IMU-based deskew (requires latest mp2p_icp library)
fix clang-format
Modernize copyright notices
rosbag2 mola-cli launch file: add MOLA_ROS2BAG_EXPORT_TO_RAWLOG_FILE optional env var
Contributors: Jose Luis Blanco-Claraco
0.8.0 (2025-06-06)
Publish mp2p_icp metric map metadata, if existing in loaded maps.
state estimation config yaml file: expose IMU sensor name env var
Update mola_lo_pipelines.rst: explicitly show an example of using the NDT pipeline
ros2 launch: add new argument to control the scan validity filter based on minimum point count (now, enabled by default)
Update broken link to ROS Index
mola-lidar-odometry-cli: now also forward raw sensor data to state estimator
Fix build against mola <1.8.0
Docs: better explain existing variables to override sensor poses
gui option: implement show as orthographic camera
Contributors: Jose Luis Blanco-Claraco
0.7.3 (2025-05-25)
feature: new threshold to discard state estimation as invalid if uncertainty is too high
Fixed unit tests in CI
Prepare GUI for ortho camera option
progress implementing init pitch/roll from IMU
pipelines YAML files reformated with RedHat YAML formatter
Update env var name to explicitly mention LO: MOLA_LO_INITIAL_LOCALIZATION_METHOD
docs: on initial localization methods
ROS2 launch: Add new mola_state_estimator_reference_frame argument. It should be used together with mola_lo_reference_frame to use an alternative reference map TF frame than the default map.
Fix wrong namespace in class name (it worked anyway because of a fall-back mechanism using unqualified names)
Expose env vars to change the reference frame_id for smoother (MOLA_TF_MAP)
fix: potential missing publication of updated poses if there is no map subscriber
lidar 3d pipeline: add rendering options for local map
Contributors: Jose Luis Blanco-Claraco
0.7.2 (2025-04-23)
better integration of clang-tidy, colcon_defaults, and clangd with vscode
Expose two more env vars: MOLA_MAP_CLOUD_DECIMATION, MOLA_ICP_CLOUD_DECIMATION
FIX: also initial pose for localmap
BUGFIX: Initial twist was wrong for custom initial poses
Contributors: Jose Luis Blanco-Claraco
0.7.1 (2025-03-15)
FIX: Handle correctly the case of input scans with non-normal numbers
docs: format of ros2 launch argument
FIX: reset map to start again might lead to divergence; Add new ‘reset_state’ command via MOLA dynamic variables
Force requiring valid poses for IMU and GNSS inputs
Refactor implementation source into several smaller files
FIX: mola-lo didn’t exit due to waiting ICP queue if fed faster than ICP processing
FIX: mola-lo-gui apps may show duplicated UI controls in particular circumstances
Drop frames warning message now tells the exact drop ratio
Initial localization method is now loadable from yaml or ros2 launch file
MOLA-LO no longer subscribes to wheels odometry. That is now delegated directly to state estimation modules.
Add new ROS2 launch argument: forward_ros_tf_odom_to_mola
Contributors: Jose Luis Blanco-Claraco
0.7.0 (2025-02-22)
Implement new mola_kernel diagnostics API
Ensure map is published after ROS2 bridge is already listening (FIXES: potential loss of map publication if MM map is given via env var)
FIX: Proper configurable dropped frames mechanism and stats
FIX: Update GUI, publish maps, correctly independently of whether MolaGUI is enabled
launch: fix localization source name
FIX: Do not ever reset the map when in localization mode
Fix: refresh GUI with initial map
Allow dropping LiDAR frames in too slow for real-time, but not any other observation type
FIX: ensure georef metadata is published when map_load service is called
rename kitti ros2 demo file to unclutter ros2 launch autocompletion
Add ros launch argument ‘use_state_estimator’
FIX: publish georeferencing metadata at start up
Add ROS2 launch arguments to select an state_estimator method
update citation
Add more params to smoother state estimation default YAML file
Add env variable MOLA_STATE_ESTIMATOR_PUBLISH_RATE to control filtered pose update rate
Add new env var MOLA_NAVSTATE_ENFORCE_PLANAR_MOTION and ros2 launch argument for it
Add new ros launch argument mola_footprint_to_base_link_tf
Fix expected pose format in yaml
ROS2 launch: shutdown if mvsim crashes
Fix parse error with default .mm and .simplemap launch arguments
Contributors: Jose Luis Blanco Claraco, Jose Luis Blanco-Claraco
0.6.2 (2025-02-13)
ros2 launch: add .mm and .simplemap optional initial map arguments
All exhaustive docs on ros2-related mola launch YAML files with the meaning of all BridgeROS2 parameter
Delegate publishing georeference info to BridgeROS2
Contributors: Jose Luis Blanco-Claraco
0.6.1 (2025-01-26)
Do not re-publish the map if it does not change, e.g. in localization-only mode
ros2 launch file: two new arguments ‘mola_lo_pipeline’ and ‘generate_simplemap’
Default 3D-LO pipeline: Add new env var ‘MOLA_LOCALMAP_LAYER_NAME’, useful when localizing with prebuilt maps
Merge pull request #12 from r-aguilera/develop fix launch file params
fix launch file params
Contributors: Jose Luis Blanco-Claraco, Raúl Aguilera
0.6.0 (2025-01-21)
Fix: publish map on first iteration
Publish georeferencing frames (utm, enu) when loading a metric map with georef. info
ros2 lidar odometry launch: add ros argument for /tf reference_frame
ROS2 kitti Lidar-Odometry demo: fixed to publish correct /tf’s
Add new frame parameters to pipeline YAML files
Two new parameters (publish_reference_frame, publish_vehicle_frame), to have explicit control on frame names published to both, ROS, and the MOLA state_estimator
ROS2 service call for load_map(): more concise error messages
Contributors: Jose Luis Blanco-Claraco
0.5.4 (2025-01-16)
Add a debug helper env var MOLA_BRIDGE_ROS2_EXPORT_TO_RAWLOG_FILE
Do not reset the state estimator on a bad ICP, allowing merging from other sensors or extrapolating.
Docs: add missing ros2 launch args
More ROS2 launch arguments
Contributors: Jose Luis Blanco-Claraco
0.5.3 (2025-01-15)
FIX: mola_state_estimator_simple must be available as a build dep too for easier usage of mola-lo-cli
Contributors: Jose Luis Blanco-Claraco
0.5.2 (2025-01-11)
Merge pull request #11 from MOLAorg/10-bad-first-icp-re-starting-from-scratch-with-a-new-local-map Fix NaN pointcloud radius in doInitializeEstimatedMaxSensorRange()
Unit tests: add test run against MulRan dataset fragment (Lidar+IMU)
cli: fix name of example pipeline file when –help invoked
unit tests: fix wrong usage of state estimator yaml file
mola-lo-gui-mulran: show IMU & GPS data in GUI
Define a sensible value for maxRange
Fix cmake warning when built w/o mola_state_estimation_simple sourced in the env
Contributors: Jose Luis Blanco-Claraco
0.5.1 (2025-01-07)
mola-lidar-odometry-cli: add flags to select the state estimation method
Contributors: Jose Luis Blanco-Claraco
0.5.0 (2024-12-29)
cmake test logic: add find_package() for state_estimation_simple
Merge pull request #7 from MOLAorg/wip/new-state-estimators New state estimators (Merge after MOLA 1.5.0 is installable via apt)
Split state estimation params so each implementation has its own yaml file
CI: build against both, ROS testing and stable
Add new state estimator module in all MOLA-CLI yaml files
Update to new state estimation packages
Reorganization such as state estimator is now an independent external module
docs: add new ros-arg publish_localization_following_rep105
FIX: publish local map even when not active
Contributors: Jose Luis Blanco-Claraco
0.4.1 (2024-12-20)
ROS2 launch: add ros argument for new option publish_localization_following_rep105
rviz2 demo file: better orbit view
ROS2 config file: define env vars for all tf frames (odom, map, base_link)
Contributors: Jose Luis Blanco-Claraco
0.4.0 (2024-12-18)
demo rviz file: fix lidar topic name
Include /tf remaps too in ros2 launch
mola launch for ROS 2: Add placeholder for ros args parsing
mola launch for ROS 2: add env variables to quickly control verbosity of each module. Env. vars. are: MOLA_VERBOSITY_MOLA_VIZ, MOLA_VERBOSITY_MOLA_LO,MOLA_VERBOSITY_BRIDGE_ROS2 (Default: INFO)
Support for ROS2 namespaces in launch file
docs; and fix launch var typo
ROS 2 launch: add more ros args
move MOLA-LO ROS2 docs to the main MOLA repo
Expose one more runtime param: generate_simplemap
clarify docs on sensor input topic names
runtime parameters: update in GUI too
publish ICP quality as part of localization updates
mola module name changed: ‘icp_odom’ -> ‘lidar_odom’
Do not publish localization if ICP is not good
Expose runtime parameters using MOLA v1.4.0 configurable parameters: active, mapping_enabled
docs clarifications
map_load service: allow not having a .simplemap file and don’t report it as an error
FIX: motion model handling during re-localization
Implement map_save
reset adaptive sigma upon relocalization
Implement map_load; Implement relocalize around pose
Forward IMU readings to the navstate fusion module
CI and readme: remove ROS2 iron
Merge branch ‘wip/map_load_save’ into develop
docs: add ref to yaml extensions
Add docs on 3D-NDT pipeline and demo usage with Mulran
parameterize maximum_sigma
CLI: add flag to retrieve all twists in a file; avoid use of “static” variables
LO: Add a getter for the latest pose and twist
doc: explain “no tf” error message
tune 3D-NDT defaults
Kitti and Mulran evaluation scripts: extend so they can be run with other pipelines
ros2 launch: Add ‘use_rviz’ argument
NDT pipeline: expose max sigma as parameter too
Avoid anoying warning message when not really needed
Extend options for GNSS initialization
Add docs on mola-lo-gui-rawlog
Default pipeline: reduce density of keyframes in simplemap
Docs: mola_lo_apps.rst fix PIPELINE_YAML var name
Update mola_lo_pipelines.rst: fix format
recover passing var args to mola-lo-gui-rosbag2 script
UI: show instantaneous max. sensor range too
FIX: formula for the estimated max. sensor range fixed for asymmetric cases
add new visualization param ground_grid_spacing
viz: grow ground grid as the local map grows
FIX: disabling visualization of raw observations left last raw observation rendered
fix: separate GPS topic and sensorLabel variables
Consistent GPS topic name
Add another env variable: MOLA_LOCAL_VOXELMAP_RESOLUTION
Expose new param for local map max size
enable the relocalize API
Expose fixed sensor pose coords as optional env variables
Readme: add ROS badges for arm64 badges
GitHub actions: use ROS2-testing packages
Contributors: Jose Luis Blanco-Claraco
0.3.3 (2024-09-01)
default 3D pipeline: Expose a couple more parameters as env variables
Depend on new mrpt_lib packages (deprecate mrpt2)
Contributors: Jose Luis Blanco-Claraco
0.3.2 (2024-08-26)
Support input dataset directories for split bags
Contributors: Jose Luis Blanco-Claraco
0.3.1 (2024-08-22)
add missing exec dependencies to package.xml for mola-lo-* commands.
Contributors: Jose Luis Blanco-Claraco
0.3.0 (2024-08-14)
First public release
Contributors: Jose Luis Blanco-Claraco