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_link to _observation_radius_ / *_OBSERVATION_RADIUS to 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_RANGEESTIMATED_OBSERVATION_RADIUS, INSTANTANEOUS_SENSOR_MAX_RANGEINSTANTANEOUS_OBSERVATION_RADIUS.

    • YAML param keys: max_sensor_range_filter_coefficientobservation_radius_filter_coefficient, absolute_minimum_sensor_rangeabsolute_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