Repository Summary
Description | 2D NDT Mapping and Localization |
Checkout URI | https://github.com/mikeferguson/ndt_2d.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2024-12-11 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | localization robotics mapping slam ros2 |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
Name | Version |
---|---|
ndt_2d | 0.0.0 |
README
ndt_2d
This package implements the Normal Distribution Transform (NDT) for mapping and localization.
The scan matcher is plugin-based. An example of using the Karto scan matcher can be found in the ndt_2d_karto package. This opens up some interesting applications, such as mapping with the Karto scan matcher and then using the NDT-based one for localization afterwards.
This package is still a work-in-progress - see the open issue for the best estimate of what does or does not work.
Use Cases
-
Mapping: default parameters will lead to this use case. The save_map.py script can be used to save the NDT map data for later localization. The regular nav2_map_server can be used to save the map needed for navigation, or it can be re-generated at runtime from the NDT map data.
-
Localization via Particle Filter: set the
map_file
parameter to the full filename of your saved NDT map data, setuse_particle_filter
totrue
. The particle filter supports many of the same odometry and filter parameters as AMCL (e.g.odom_alpha1
,min_particles
); -
Localization via Scan Matching: set the
map_file
parameter to the full filename of your saved NDT map data, make sureuse_particle_filter
is set tofalse
.
Parameter Details
-
enable_mapping
: When set, mapping is disabled. A global NDT will be built from the loaded map. -
global_search_size
: The maximum distance between two scans to be considered for global loop closure. -
global_search_limit
: The maximum number of scans to be considered for global loop closure against a new scan. -
minimum_travel_distance
: Minimum linear travel distance before localization update is applied. Applies to both particle filter and scan matching based localization. Units: meters. -
minimum_travel_rotation
: Minimum angular travel before localization update is applied. Applies to both particle filter and scan matching based localization. Units: radians. -
map_file
: If this set, this resource will be loaded as an initial map. This works for both continuing to map OR localization. Robot must be localized with the initial pose tool. -
max_range
: Maximum distance of laser measurements. Measurements beyond this range are discarded. Default is-1
, in which case the max range will be extracted from the laser scan message. -
occupancy_threshold
: When generating the occupancy grid map, this is the threshold between free and occupied space based on how many raytraces have hit or passed through a given cell. -
odom_frame
: TF frame_id for the odometry. Usuallyodom
. -
optimization_node_limit
: Minimum number of nodes that must be added to the graph between runs of the graph optimizer. -
resolution
: Resolution of the published occupancy grid map. This is entirely independent of the underlying resolution of the NDT. Units: meters. -
robot_frame
: TF frame_id for the robot. Usuallybase_link
. -
rolling_depth
: When building a map, this is how many scans to use when building the local NDT for scan matching. -
scan_matcher_type
: The plugin name for the scan matcher to use. Default isndt_2d::ScanMatcherNDT
. -
transform_timeout
: Max allowable time to wait for transform to become available when transforming the laser scan. Units: seconds. -
use_barycenter
: When scan matching, should closest scans be selected via the scan pose or the barycenter of the scan points. -
use_particle_filter
: When set, mapping is disabled and a global NDT is created. The initial pose tool will initialize localization.
ScanMatcherNDT Parameters
Each scan matcher uses the following parameters, namespaced into either
local_scan_matcher
or global_scan_matcher
namespaces:
-
ndt_resolution
: Resolution used for the NDT grid. Every cell of this resolution will be represented by a single Gaussian function. Units: meters. -
laser_max_beams
: Maximum number of laser beams to use during scan matching. This mirrors the parameter of the same name in AMCL. -
search_angular_resolution
: Angular resolution to use for the scan matching search. Units: radians.
File truncated at 100 lines see the full file