https://github.com/rsasaki0109/lidar_localization_ros2
3D LIDAR Localization using NDT/GICP and pointcloud map in ROS 2 (Not SLAM)
https://github.com/rsasaki0109/lidar_localization_ros2
gicp lidar localization ndt pcl ros2
Last synced: 17 days ago
JSON representation
3D LIDAR Localization using NDT/GICP and pointcloud map in ROS 2 (Not SLAM)
- Host: GitHub
- URL: https://github.com/rsasaki0109/lidar_localization_ros2
- Owner: rsasaki0109
- License: bsd-2-clause
- Created: 2020-04-18T23:33:07.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2025-05-12T02:26:16.000Z (about 2 months ago)
- Last Synced: 2025-05-12T03:26:22.382Z (about 2 months ago)
- Topics: gicp, lidar, localization, ndt, pcl, ros2
- Language: C++
- Homepage:
- Size: 165 KB
- Stars: 343
- Watchers: 5
- Forks: 66
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# lidar_localization_ros2
A ROS2 package of 3D LIDAR-based Localization.
Green: path, Red: map
(the 5x5 grids in size of 50m × 50m)## Requirements
- [ndt_omp_ros2](https://github.com/rsasaki0109/ndt_omp_ros2.git)
## IO
- input
/cloud (sensor_msgs/PointCloud2)
/map (sensor_msgs/PointCloud2)
/initialpose (geometry_msgs/PoseStamed)(when `set_initial_pose` is false)
/odom (nav_msgs/Odometry)(optional)
/imu (sensor_msgs/Imu)(optional)- output
/pcl_pose (geometry_msgs/PoseStamped)
/path (nav_msgs/Path)
/initial_map (sensor_msgs/PointCloud2)(when `use_pcd_map` is true)## params
|Name|Type|Default value|Description|
|---|---|---|---|
|registration_method|string|"NDT_OMP"|"NDT" or "GICP" or "NDT_OMP" or "GICP_OMP"|
|score_threshold|double|2.0|registration score threshold|
|ndt_resolution|double|2.0|resolution size of voxels[m]|
|ndt_step_size|double|0.1|step_size maximum step length[m]|
|ndt_num_threads|int|4|threads using NDT_OMP(if `0` is set, maximum alloawble threads are used.)|
|transform_epsilon|double|0.01|transform epsilon to stop iteration in registration|
|voxel_leaf_size|double|0.2|down sample size of input cloud[m]|
|scan_max_range|double|100.0|max range of input cloud[m]|
|scan_min_range|double|1.0|min range of input cloud[m]|
|scan_periad|double|0.1|scan period of input cloud[sec]|
|use_pcd_map|bool|false|whether pcd_map is used or not|
|map_path|string|"/map/map.pcd"|pcd_map file path|
|set_initial_pose|bool|false|whether or not to set the default value in the param file|
|initial_pose_x|double|0.0|x-coordinate of the initial pose value[m]|
|initial_pose_y|double|0.0|y-coordinate of the initial pose value[m]|
|initial_pose_z|double|0.0|z-coordinate of the initial pose value[m]|
|initial_pose_qx|double|0.0|Quaternion x of the initial pose value|
|initial_pose_qy|double|0.0|Quaternion y of the initial pose value|
|initial_pose_qz|double|0.0|Quaternion z of the initial pose value|
|initial_pose_qw|double|1.0|Quaternion w of the initial pose value|
|use_odom|bool|false|whether odom is used or not for initial attitude in point cloud registration|
|use_imu|bool|false|whether 9-axis imu is used or not for point cloud distortion correction|
|enable_debug|bool|false|whether debug is done or not|## demo
demo data(ROS1) by Tier IV(The link has changed and is now broken.)
https://data.tier4.jp/rosbag_details/?id=212
To use ros1 rosbag , use [rosbags](https://pypi.org/project/rosbags/).
The Velodyne VLP-16 was used in this data.Before running, put `bin_tc-2017-10-15-ndmap.pcd` into your `map` directory and
edit the `map_path` parameter of `localization.yaml` in the `param` directory accordingly.
```
rviz2 -d src/lidar_localization_ros2/rviz/localization.rviz
ros2 launch lidar_localization_ros2 lidar_localization.launch.py
ros2 bag play tc_2017-10-15-15-34-02_free_download/
```
Green: path, Red: map
(the 5x5 grids in size of 50m × 50m)