rsasaki0109 / lidar_localization_ros2

3D LIDAR Localization using NDT/GICP and pointcloud map in ROS 2 (Not SLAM)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

pose drift largely

pjs9115916 opened this issue · comments

Screenshot 2023-03-03 15:29:01
I tested the localization algorithm in bag, I found the pose drift very large, I wonder whether my setup was not correct? if I set the param of "set_initial_pose" to false, the path will disappear, so I have to set it to true.

In my test I did not use imu data
Here is my parms:

`
/**:
ros__parameters:
registration_method: "GICP"
ndt_resolution: 1.0
ndt_step_size: 0.1
transform_epsilon: 0.01
voxel_leaf_size: 1.0
scan_max_range: 100.0
scan_min_range: 1.0
scan_period: 0.1
use_pcd_map: true
map_path: "/home/terra/ros2_ws/src/pcl_localization_ros2/map/map.pcd"
set_initial_pose: true
initial_pose_x: 0.0
initial_pose_y: 0.0
initial_pose_z: 0.0
initial_pose_qx: 0.0
initial_pose_qy: 0.0
initial_pose_qz: 0.0
initial_pose_qw: 1.0
use_odom: false
use_imu: false
enable_debug: false

`

Indoors, the following parameters should be reduced.

ndt_resolution (0.5 - 2.0 [m] )
voxel_leaf_size(0.1~1.0[m])

It might also be a good idea to set registration_method to NDT.

Also, is the initial pose correct?

By the way, which package and which lidar did you use to create the map point cloud?

Indoors, the following parameters should be reduced.

ndt_resolution (0.5 - 2.0 [m] ) voxel_leaf_size(0.1~1.0[m])

It might also be a good idea to set registration_method to NDT.

Also, is the initial pose correct?

registration_method to NDT also will drift.

I record a bag use velodyne 16p. use your slam bag to create a pcd map,and then play the lidar bag to test the localization.

By the way, which package and which lidar did you use to create the map point cloud?

I record a bag use velodyne 16p. use your slam bag to create a pcd map,and then play the lidar bag to test the localization.

By the way, which package and which lidar did you use to create the map point cloud?

I record a bag use velodyne 16p. use your slam bag to create a pcd map,and then play the lidar bag to test the localization.

give me a email I can share you my lidar data and the pcd file

You might want to set voxel_leaf_size to 0.1 or 0.5.

What is the SLAM you used, is it OSS?hdl_graph_slam?lio-sam?lidarslam_ros2?

You can share pcd and rosbag for me to see.
My email address is below.
rsasaki0109@gmail.com

What is the SLAM you used, is it OSS?hdl_graph_slam?lio-sam?lidarslam_ros2?

You can share pcd and rosbag for me to see. My email address is below. rsasaki0109@gmail.com

lidarslam_ros2

If lidarslam_ros2 is also parameterized for indoor use, a more accurate map can be produced.

Hi author have you received my pcd and rosbag?

I have not received those yet.

rsasaki0109@gmail.com

I sent you again few seconds ago

@rsasaki0109 were you able to reproduce the pose drift?

The following parameters allow for some localization indoors.
However, localization breaks down where there is not much of a point cloud
If you add a time series filter such as Kalman filter, it may be less likely to fail.

/**:
    ros__parameters:
      registration_method: "NDT"
      ndt_resolution: 1.0
      ndt_step_size: 0.1
      transform_epsilon: 0.1
      voxel_leaf_size: 0.1
      scan_max_range: 10.0
      scan_min_range: 0.1
      scan_period: 0.1
      use_pcd_map: true
      map_path: "/home/autoware/Downloads/pcd_loc_ros2/map.pcd"
      set_initial_pose: true
      initial_pose_x: 0.0
      initial_pose_y: 0.0
      initial_pose_z: 0.0
      initial_pose_qx: 0.0
      initial_pose_qy: 0.0
      initial_pose_qz: 0.0
      initial_pose_qw: 1.0
      use_odom: false
      use_imu: false
      enable_debug: true

I tried setting registration_method: "GICP" and reducing voxel_leaf_size in various ways, but it didn't seem to work.

The following parameters allow for some localization indoors. However, localization breaks down where there is not much of a point cloud If you add a time series filter such as Kalman filter, it may be less likely to fail.

/**:
    ros__parameters:
      registration_method: "NDT"
      ndt_resolution: 1.0
      ndt_step_size: 0.1
      transform_epsilon: 0.1
      voxel_leaf_size: 0.1
      scan_max_range: 10.0
      scan_min_range: 0.1
      scan_period: 0.1
      use_pcd_map: true
      map_path: "/home/autoware/Downloads/pcd_loc_ros2/map.pcd"
      set_initial_pose: true
      initial_pose_x: 0.0
      initial_pose_y: 0.0
      initial_pose_z: 0.0
      initial_pose_qx: 0.0
      initial_pose_qy: 0.0
      initial_pose_qz: 0.0
      initial_pose_qw: 1.0
      use_odom: false
      use_imu: false
      enable_debug: true

I tried setting registration_method: "GICP" and reducing voxel_leaf_size in various ways, but it didn't seem to work.

thanks for your test and reply

Using ndt_omp has prevented loss of localization

Addition ndt_omp PR
#31

image