• Stars
    star
    746
  • Rank 58,703 (Top 2 %)
  • Language
    C++
  • License
    BSD 2-Clause "Sim...
  • Created over 6 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Real-time 3D localization using a (velodyne) 3D LIDAR

hdl_localization

hdl_localization is a ROS package for real-time 3D localization using a 3D LIDAR, such as velodyne HDL32e and VLP16. This package performs Unscented Kalman Filter-based pose estimation. It first estimates the sensor pose from IMU data implemented on the LIDAR, and then performs multi-threaded NDT scan matching between a globalmap point cloud and input point clouds to correct the estimated pose. IMU-based pose prediction is optional. If you disable it, the system uses the constant velocity model without IMU information.

Video:
hdl_localization

Build Status

Requirements

hdl_localization requires the following libraries:

  • PCL
  • OpenMP

The following ros packages are required:

Installation

cd /your/catkin_ws/src
git clone https://github.com/koide3/ndt_omp
git clone https://github.com/SMRT-AIST/fast_gicp --recursive
git clone https://github.com/koide3/hdl_localization
git clone https://github.com/koide3/hdl_global_localization

cd /your/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE=Release

# if you want to enable CUDA-accelerated NDT
# catkin_make -DCMAKE_BUILD_TYPE=Release -DBUILD_VGICP_CUDA=ON

Support docker 🐳

Using docker, you can conveniently satisfy the requirement environment.
Please refer to the repository below and use the docker easily.

Parameters

All configurable parameters are listed in launch/hdl_localization.launch as ros params. The estimated pose can be reset using using "2D Pose Estimate" on rviz

Topics

  • /odom (nav_msgs/Odometry)
    • Estimated sensor pose in the map frame
  • /aligned_points
    • Input point cloud aligned with the map
  • /status (hdl_localization/ScanMatchingStatus)
    • Scan matching result information (e.g., convergence, matching error, and inlier fraction)

Services

  • /relocalize (std_srvs/Empty)
    • Reset the sensor pose with the global localization result
    • For details of the global localization method, see hdl_global_localization

Example

Example bag file (recorded in an outdoor environment): hdl_400.bag.tar.gz (933MB)

rosparam set use_sim_time true
roslaunch hdl_localization hdl_localization.launch
roscd hdl_localization/rviz
rviz -d hdl_localization.rviz
rosbag play --clock hdl_400.bag
# perform global localization
rosservice call /relocalize

If it doesn't work well or the CPU usage is too high, change ndt_neighbor_search_method in hdl_localization.launch to "DIRECT1". It makes the scan matching significantly fast, but a bit unstable.

Related packages

Kenji Koide, Jun Miura, and Emanuele Menegatti, A Portable 3D LIDAR-based System for Long-term and Wide-area People Behavior Measurement, Advanced Robotic Systems, 2019 [link].

Contact

Kenji Koide, [email protected]

Active Intelligent Systems Laboratory, Toyohashi University of Technology, Japan [URL] Human-Centered Mobility Research Center, National Institute of Advanced Industrial Science and Technology, Japan [URL]

More Repositories

1

hdl_graph_slam

3D LIDAR-based Graph SLAM
C++
1,845
star
2

ndt_omp

Multi-threaded and SSE friendly NDT algorithm
C++
672
star
3

direct_visual_lidar_calibration

A toolbox for target-less LiDAR-camera calibration [ROS1/ROS2]
C++
536
star
4

hdl_people_tracking

Real-time people tracking using a 3D LIDAR
C++
271
star
5

iridescence

3D visualization library for rapid prototyping of 3D algorithms
C++
221
star
6

slam_docker_collection

A collection of docker environments for 3D SLAM packages
209
star
7

monocular_person_following

Monocular camera-based person tracking and identification ROS framework for person following robots
C++
170
star
8

hdl_global_localization

C++
142
star
9

st_handeye_graph

General hand-eye calibration based on reprojection error minimization and pose graph optimization
C++
53
star
10

pointcloud_to_2dmap

C++
50
star
11

gazebo_apriltag

Apriltag models for gazebo
Python
49
star
12

rviz_factor_graph_plugins

C++
34
star
13

caratheodory2

C++
33
star
14

livox_to_pointcloud2

C++
30
star
15

sparse_dynamic_calibration

Sparse and dynamic camera network calibration with visual odometry
C++
27
star
16

monocular_people_tracking

C++
18
star
17

glil_pubdoc

Public documentation for GLIL, A closed-source point-cloud-based real-time localization package
16
star
18

open3d_graph_slam

Python
14
star
19

points_inspector

An inspection tool for sensor_msgs/PointCloud2 messages [ROS1/ROS2]
C++
14
star
20

caratheodory

C++ implementation of the algorithm in "Fast and Accurate Least-Mean-Squares Solvers", NIPS19
C++
11
star
21

pykalman_test

A simple UKF demo using pykalman
Python
9
star
22

ccf_person_identification

Convolutional Channel Features + Online boosting-based person identification for mobile robots
C++
8
star
23

odometry_saver

C++
8
star
24

gtsam_docker

Dockerfile
6
star
25

ros2d2

A ROS package to make R2D2-like sound
C
6
star
26

ccf_feature_extraction

Pretrained convolutional channel features for people identification
C++
5
star
27

open_face_recognition

Python
3
star
28

tf_pose_ros_msgs

CMake
2
star
29

lidar_slam_dataset

1
star
30

velodyne_packets2points

1
star
31

koide3.github.io

HTML
1
star