glim icon indicating copy to clipboard operation
glim copied to clipboard

Improving Registration Quality

Open sSeLeMaHs opened this issue 10 months ago • 1 comments

Hi Guys,

In the past couple of weeks i tried to build and run a low cost mobile laserscanning device. I use a Livox Mid360 and a Jetson Orin Nano. In easy scenarios (a hole floor of several rooms) i get pretty good results with Glim compared to a precise Leica RTC360 scanner.

Now i tried to scan a long and narrow supply corridor, which is around 150 m long. I tried several configurations of the Odometry-, Submap- and Global Mapping Parameters, but i still see a pretty big drift in height. My current parameters are as follows:

{ "odometry_estimation": { "fix_imu_bias": false, "full_connection_window_size": 2, "init_pose_damping_scale": 10000000000.0, "initialization_mode": "LOOSE", "initialization_window_size": 1.0, "isam2_relinearize_skip": 1, "isam2_relinearize_thresh": 0.1, "keyframe_delta_rot": 0.25, "keyframe_delta_trans": 1.0, "keyframe_entropy_thresh": 0.99, "keyframe_max_overlap": 0.7, "keyframe_min_overlap": 0.01, "keyframe_update_strategy": "OVERLAP", "max_num_keyframes": 15, "num_threads": 2, "save_imu_rate_trajectory": true, "smoother_lag": 10.0, "so_name": "libodometry_estimation_gpu.so", "use_isam2_dogleg": false, "voxel_resolution": 0.05, "voxel_resolution_dmax": 20.0, "voxel_resolution_dmin": 5.0, "voxel_resolution_max": 0.5, "voxelmap_levels": 2, "voxelmap_scaling_factor": 2.0 } }

{ "sub_mapping": { "between_registration_type": "GICP", "create_between_factors": true, "enable_imu": true, "enable_optimization": false, "keyframe_randomsampling_rate": 1.0, "keyframe_update_interval_rot": 0.5, "keyframe_update_interval_trans": 2.0, "keyframe_update_min_points": 500, "keyframe_update_strategy": "OVERLAP", "keyframe_voxel_resolution": 0.05, "keyframe_voxelmap_levels": 2, "keyframe_voxelmap_scaling_factor": 2.0, "max_keyframe_overlap": 0.6, "max_num_keyframes": 15, "registration_error_factor_type": "VGICP_GPU", "so_name": "libsub_mapping.so", "submap_downsample_resolution": 0.05, "submap_target_num_points": 100000, "submap_voxel_resolution": 0.05 } }

{ "global_mapping": { "between_registration_type": "GICP", "create_between_factors": true, "enable_imu": true, "enable_optimization": true, "init_pose_damping_scale": 10000000000.0, "isam2_relinearize_skip": 1, "isam2_relinearize_thresh": 0.1, "max_implicit_loop_distance": 100.0, "min_implicit_loop_overlap": 0.2, "randomsampling_rate": 1.0, "registration_error_factor_type": "VGICP_GPU", "so_name": "libglobal_mapping.so", "submap_voxel_resolution": 0.1, "submap_voxel_resolution_dmax": 20.0, "submap_voxel_resolution_dmin": 5.0, "submap_voxel_resolution_max": 1.0, "submap_voxelmap_levels": 2, "submap_voxelmap_scaling_factor": 2.0, "use_isam2_dogleg": false } }

it would be nice if someone could look up my parameters and make suggestions how to improve them. im pretty sure im still overlooking something.

Thanks in advance!

sSeLeMaHs avatar Apr 24 '25 07:04 sSeLeMaHs

Please try the flat_earther plugin that enforces proximate submaps (or the entire map) to be on a flat floor. https://github.com/koide3/glim/issues/108 https://github.com/koide3/glim/issues/190

koide3 avatar Apr 24 '25 09:04 koide3