neo_localization ================ Summary ------- The neo_localization package provides a simple but effective replacement for the standard AMCL localization. It is quite similar to a particle filter, except the particles are created from scratch on every update and each particle is optimized using multiple Gauss-Netwon iterations. It's main purpose is to achieve a higher accuracy as well as more robustness in challenging environments. Depending on the quality of the map a localization accuracy of up to 1 mm can be achieved. In addition it will automatically switch into a constrained 1D mode or even into 0D mode (continue with just odometry) in case of insufficient surroundings to localize with. It is installed on Neobotix platforms as of April 2020 by default. .. note:: For ROS 2, this package is named as neo_localization2, for the sake of simplicity. Nodes ----- neo_localization_node Publishes: * /tf (if enabled, map frame with odom child) * /amcl_pose (for backward-compatibility) * /map_pose (same as /amcl_pose) * /map_tile * /particlecloud Subscribes: * /scan * /map * /initialpose Parameters ---------- :odom_frame: ============== ======= Type Default -------------- ------- odom_frame odom ============== ======= Description Default local frame id of the robot. For namespace setup, set the frame id with "/" at the beginning :base_frame: ============== ========== Type Default -------------- ---------- base_frame base_link ============== ========== Description Default base frame id of the robot. For namespace setup, set the frame id with "/" at the beginning :scan_topic: ============== ========== Type Default -------------- ---------- scan_topic scan ============== ========== Description Default scan topic for the localization to subscribe to. For differential robots from Neobotix, it's always `lidar_1/scan_filtered` For namespace setup, set the topic without "/" at the beginning. :map_topic: ============== ========== Type Default -------------- ---------- map_topic map ============== ========== Description Default map topic for the localization to subscribe to. :map_frame: ============== ========== Type Default -------------- ---------- map_frame map ============== ========== Description Default broadcasted map frame. :update_gain: ============== ======= Type Default -------------- ------- double 0.5 ============== ======= Description exponential low pass gain for localization update (0 to 1) :confidence_gain: ============== ======= Type Default -------------- ------- double 0.01 ============== ======= Description time based confidence gain when in 2D / 1D mode :sample_rate: ============== ======= Type Default -------------- ------- int 10 ============== ======= Description how many particles (samples) to spread (per update) :loc_update_rate: ============== ======= Type Default -------------- ------- int 10 ============== ======= Description localization update rate [1/s] :map_update_rate: ============== ======= Type Default -------------- ------- double 0.5 ============== ======= Description map tile update rate [1/s] :map_size: ============== ======= Type Default -------------- ------- int 1000 ============== ======= Description map tile size in pixels :map_downscale: ============== ======= Type Default -------------- ------- int 0 ============== ======= Description how often to downscale (half) the original map :num_smooth: ============== ======= Type Default -------------- ------- int 5 ============== ======= Description how many 3x3 gaussian smoothing iterations are applied to the map :min_score: ============== ======= Type Default -------------- ------- double 0.2 ============== ======= Description minimum score for valid localization (otherwise 0D mode), higher values make it go into 0D mode earlier. :odometry_std_xy: ============== ======= Type Default -------------- ------- double 0.01 ============== ======= Description odometry error in x and y [m/m], how fast to increase particle spread when in 1D / 0D mode :odometry_std_yaw: ============== ======= Type Default -------------- ------- double 0.01 ============== ======= Description odometry error in yaw angle [rad/rad], how fast to increase particle spread when in 1D / 0D mode :min_sample_std_xy: ============== ======= Type Default -------------- ------- double 0.025 ============== ======= Description minimum particle spread in x and y [m] :min_sample_std_yaw: ============== ======= Type Default -------------- ------- double 0.5 ============== ======= Description initial/maximum particle spread in yaw angle [rad] :constrain_threshold: ============== ======= Type Default -------------- ------- double 0.5 ============== ======= Description threshold for 1D / 2D position decision making (minimum average second order gradient) if worst gradient direction is below this value we go into 1D mode if both gradient directions are below we may go into 0D mode, depending on disable_threshold higher values will make it go into 1D / 0D mode earlier :constrain_threshold_yaw: ============== ======= Type Default -------------- ------- double 0.2 ============== ======= Description threshold for 1D / 2D decision making (with or without orientation) higher values will make it go into 1D mode earlier :min_points: ============== ======= Type Default -------------- ------- double 20 ============== ======= Description minimum number of points per update :solver_gain: ============== ======= Type Default -------------- ------- double 0.1 ============== ======= Description solver update gain, lower gain = more stability / slower convergence :solver_damping: ============== ======= Type Default -------------- ------- double 1000.0 ============== ======= Description solver update damping, higher damping = more stability / slower convergence :solver_iteration: ============== ======= Type Default -------------- ------- int 20 ============== ======= Description number of gauss-newton iterations per sample per scan :transform_timeout: ============== ======= Type Default -------------- ------- double 0.2 ============== ======= Description maximum wait for getting transforms [s] :broadcast_tf: ============== ======= Type Default -------------- ------- bool true ============== ======= Description if to broadcast map frame For example, see: https://github.com/neobotix/neo_mpo_700/blob/master/configs/navigation/neo_localization/neo_localization.yaml Usage ----- neo_localization can be launched in conjunction with move_base as follows: .. note:: Please choose the correct package name depending on your platform. :: roslaunch neo_mpo_700 navigation_basic_neo.launch :: roslaunch neo_mpo_700 neo_localization.launch neo_localization2 can also be launched in conjunction with nav2 as follows: .. note:: Please choose the correct package name depending on your platform. :: ros2 launch neo_mpo_700-2 localization_neo.launch.py