emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2 emcl2

Repository Summary

Description mcl with expansion resetting (version 2)
Checkout URI https://github.com/cit-autonomous-robot-lab/emcl2_ros2.git
VCS Type git
VCS Version main
Last Updated 2024-06-04
Dev Status UNKNOWN
CI status No Continuous Integration
Released UNRELEASED
Tags localization robotics ros2
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Packages

Name Version
emcl2 0.0.0

README

emcl2_ros2: mcl with expansion resetting (version 2)

test

Emcl is an alternative Monte Carlo localization (MCL) package to amcl (http://wiki.ros.org/amcl). Differently from amcl, KLD-sampling and adaptive MCL are not implemented. Instead, the expansion resetting and other features are implemented12.

This package is ROS 2 version of ryuichiueda/emcl2.

ROS 2 version

  • ROS 2 Humble Hawksbill

quick start

Install & Build

mkdir ros2_ws && cd ros2_ws
git clone git@github.com:CIT-Autonomous-Robot-Lab/emcl2_ros2.git ./src/emcl2_ros2
rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
sudo apt install -y ros-$ROS_DISTRO-navigation2 ros-$ROS_DISTRO-nav2-bringup ros-$ROS_DISTRO-turtlebot3-gazebo
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
source install/setup.bash

Try emcl2 in simulator

You may wait Gazebo to be initilalized. You can also use ./test/demo.bash, in which the following procedure is written.

export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
ros2 launch nav2_bringup rviz_launch.py
ros2 launch emcl2 emcl2.launch.py params_file:=$(ros2 pkg prefix --share emcl2)/config/emcl2_quick_start.param.yaml map:=$(ros2 pkg prefix --share nav2_bringup)/maps/turtlebot3_world.yaml use_sim_time:=true
ros2 launch nav2_bringup navigation_launch.py use_sim_time:=true

demo movies

Nodes

emcl2_node

This node calculates the alpha value with a different algorithm than emcl_node in ryuichiueda/emcl. This node counts the particles that make lasers penetrate occupancy cells. Specifically, this node chooses some particles at a rate of extraction_rate and checks each of them with the following procedure:

  • maps a set of laser scan on the occupancy grid map based on the pose of the particle
  • judges the pose of the particle as wrong if all of lasers in a range_threshold[rad] range penatrate occupancy grids

If the rate of the wrong particles is greater than alpha_threshold, the node invokes a reset.

This node also has a sensor resetting algorithm. When sensor_reset is true, a particle with laser penetration is dragged back from occupied cells.

Subscribed Topics

Name Type Description
map nav_msgs/OccupancyGrid occupancy grid map
scan sensor_msgs/LaserScan laser scans
tf tf/tfMessage transforms
initialpose geometry_msgs/PoseWithCovarianceStamped pose of particles for replacement

Published Topics

Name Type Description
mcl_pose geometry_msgs/PoseWithCovarianceStamped the mean pose of the particles with covariance
particlecloud geometry_msgs/PoseArray poses of the particles
tf tf/tfMessage the transform from odom (which can be remapped via the odom_frame_id parameter) to map
alpha std_msgs/Float32 marginal likelihood of particles after sensor update

Parameters

Name Type Default Description
odom_freq int 20 [Hz] frequency of odometry update
num_particles int 500 number of particles
odom_frame_id string “odom” the frame for odometry
footprint_frame_id string “base_footprint” the frame of the localized robot’s base
base_frame_id string “base_link” the frame of the robot’s base. It is used for calculating the position and orientation of the LiDAR
global_frame_id string “map” the frame for localization
initial_pose_x double 0.0 [m] initial x coordinate of particles
initial_pose_y double 0.0 [m] initial y coordinate of particles
initial_pose_a double 0.0 [rad] initial yaw coordinate of particles
odom_fw_dev_per_fw double 0.19 [m/m] standard deviation of forward motion noise by forward motion
odom_fw_dev_per_rot double 0.0001 [m/rad] standard deviation of forward motion noise by rotational motion
odom_rot_dev_per_fw double 0.13 [rad/m] standard deviation of rotational motion noise by forward motion
odom_rot_dev_per_rot double 0.2 [rad/rad] standard deviation of rotational motion noise by rotational motion
laser_likelihood_max_dist double 0.2 meters maximum distance to inflate occupied cells on the likelihood field map
scan_increment int 1 increment number when beams are picked from their sequence
alpha_threshold double 0.5 threshold of the alpha value for expansion resetting
open_space_threshold double 0.05 threshold of the valid beam rate for expansion resetting
expansion_radius_position double 0.1 [m] maximum change of the position on the xy-plane when the reset replaces a particle
expansion_radius_orientation double 0.2 [rad] maximum change of the yaw angle when the reset replaces a particle
extraction_rate double 0.1 rate of particles that are checked by the node
range_threshold double 0.3 [rad] threshold of the range of lasers
sensor_reset bool true flag for sensor resettings

The followings have never been implemented yet.

Name Type Default Description
laser_min_range double 0.0 [m] threshold for discarding scans whose ranges are smaller than this value
laser_max_range double 100000000.0 [m] threshold for discarding scans whose ranges are larger than this value

To do

  • Implement service
  • Fix a bug that caused particles to survive

citation

  1. R. Ueda: “Syokai Kakuritsu Robotics (lecture note on probabilistic robotics),” Kodansya, 2019. 

  2. R. Ueda, T. Arai, K. Sakamoto, T. Kikuchi, S. Kamiya: Expansion resetting for recovery from fatal error in Monte Carlo localization - comparison with sensor resetting methods, IEEE/RSJ IROS, pp.2481-2486, 2004. 

CONTRIBUTING

No CONTRIBUTING.md found.

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2

emcl2_ros2 repository

localization robotics ros2