MCPcopy Create free account
hub / github.com/at-wat/mcl_3dl

github.com/at-wat/mcl_3dl @0.7.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.7.0 ↗ · + Follow
377 symbols 890 edges 63 files 1 documented · 0% updated 6mo ago0.7.0 · 2025-10-22★ 59734 open issues

Browse by type

Functions 321 Types & classes 56
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

mcl_3dl

Build Status Codecov License

[!NOTE]
After official ROS 1 EOL, this package is released to Alpine ROS.

Package summary

mcl_3dl is a ROS node to perform a probabilistic 3-D/6-DOF localization system for mobile robots with 3-D LIDAR(s). It implements pointcloud based Monte Carlo localization that uses a reference pointcloud as a map.

The node receives the reference pointcloud as an environment map and localizes 6-DOF (x, y, z, yaw, pitch, roll) pose of measured pointclouds assisted by a motion prediction using odometry.

Currently, the supported motion model is differential-wheeled-robot. The node provides classic MCL; currently, it doesn't implement adaptive feature like KDL-sampling and etc.

Algorithms

A fundamental algorithm of mcl_3dl node is Monte Carlo localization (MCL), aka particle filter localization. MCL represents a probabilistic distribution of estimated pose as density and weight of particles and estimates the pose from the distribution.

Node I/O

mcl_3dl I/O diagram

Install

from source

Note: mcl_3dl_msgs package is required to build mcl_3dl package.

# clone
cd /path/to/your/catkin_ws/src
git clone https://github.com/at-wat/mcl_3dl.git
git clone https://github.com/at-wat/mcl_3dl_msgs.git

# build
cd /path/to/your/catkin_ws
rosdep install --from-paths src --ignore-src -y  # Install dependencies
catkin_make -DCMAKE_BUILD_TYPE=Release  # Release build is recommended

from apt repository (for ROS Indigo/Kinetic/Lunar on Ubuntu)

sudo apt-get install ros-${ROS_DISTRO}-mcl-3dl

Running the demo

The example bag file of 2+4-DOF tracked vehicle with two Hokuyo YVT-X002 3-D LIDAR is available online. Pre-processed (filtered) 3-D pointcloud, IMU pose, odometry, and map data are packed in the bag.

# Download the example bag (230M)
wget -P ~/Downloads https://openspur.org/~atsushi.w/dataset/mcl_3dl/short_test3.bag

# Running the demo
roslaunch mcl_3dl test.launch use_pointcloud_map:=false use_cad_map:=false \
  use_bag_file:=true bag_file:=${HOME}/Downloads/short_test3.bag

The map data in the bag was generated by using the cartographer_ros and filtered by using pcl_outlier_removal and pcl_voxel_grid utilities.

Rviz image of the demo

MarkerArray shows several mcl_3dl internal information. - Purple spheres: sampled points used in the likelihood-model calculation - Red lines: casted rays in the beam-model calculation - Red boxes: detected collisions in raycasting

To try global localization, call /global_localization by the following command.

rosservice call /global_localization

Demos without odometry and without IMU are also available.

Contributing

mcl_3dl package is developed under GitHub flow. Feel free to open new Issue and/or Pull Request.

The code in this repository is following ROS C++ Style Guide. A configuration file for clang-format is available at https://github.com/seqsense/ros_style/.

License

Core symbols most depended-on inside this repo

browse all functions →

Shape

Method 221
Function 100
Class 54
Enum 2

Languages

C++100%

Modules by API surface

include/mcl_3dl/pf.h36 symbols
src/mcl_3dl.cpp26 symbols
include/mcl_3dl/quat.h24 symbols
include/mcl_3dl/state_6dof.h21 symbols
test/src/test_expansion_resetting.cpp17 symbols
include/mcl_3dl/chunked_kdtree.h17 symbols
include/mcl_3dl/vec3.h14 symbols
test/src/test_beam_label.cpp12 symbols
include/mcl_3dl/raycasts/raycast_using_dda.h12 symbols
test/src/test_global_localization.cpp10 symbols
test/src/test_debug_output.cpp9 symbols
test/src/test_pf.cpp7 symbols

For agents

$ claude mcp add mcl_3dl \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page