ntnu-arl / gbplanner_ros

Graph-based Exploration Planner for Subterranean Environments
BSD 3-Clause "New" or "Revised" License
690 stars 153 forks source link

Exploration using a realsense D435i #51

Closed Josgonmar closed 6 months ago

Josgonmar commented 6 months ago

First of all, thank you so much for your great work!

I have been using it on my simulations using an OS64 and it works phenomenally! The thing is, I'm currently trying to get it to work using only the depth point cloud from a realsense camera installed in front of the UAV. However, I have noticed that the TSDF map it generates does not fill the scan with free space unless there is a clear obstacle in front of it. I'll explain: when I fly, let's say, inside a tunnel, some sort of cone of free space is generated from the sensor POV, but this free space is only close to the walls of that tunnel, so when I execute the exploration, the paths generated are always too close to the walls, as it cannot expand the graph in the "middle". You can see what I'm talking about in the images below:

realsense_front realsense_back

As you can see, the tunnel is not being filled with free space, something that happens not when using an OS64 for instance. I'm guessing this is more related to voxblox itself, so i'll leave here the parameters i'm using:

world_frame: map use_tf_transforms: True use_freespace_pointcloud: True tsdf_voxels_per_side: 16 tsdf_voxel_size: 0.20 max_ray_length_m: 15.0 truncation_distance: 0.6 voxel_carving_enabled: True use_sparsity_compensation_factor: True sparsity_compensation_factor: 100.0 color_mode: "colors" verbose: False update_mesh_every_n_sec: 1.0 mesh_min_weight: 1e-4 slice_level: 1.0 method: "merged" integration_order_mode: "sorted" max_consecutive_ray_collisions: 0 publish_slices: False publish_pointclouds: True allow_clear: True pointcloud_queue_size: 10 min_time_between_msgs_sec: 0.0

max_block_distance_from_body: FLT_MAX

publish_tsdf_info: False publish_slices: False publish_traversable: True traversability_radius: 0.4 enable_icp: False icp_refine_roll_pitch: False accumulate_icp_corrections: True timestamp_tolerance_sec: 0.001 #0.001 publish_tsdf_map: True publish_esdf_map: True esdf_max_distance_m: 2.0 clear_sphere_for_planning: False clear_sphere_radius: 0.8 use_const_weight: False use_weight_dropoff: True use_symmetric_weight_drop_off: False clearing_ray_weight_factor: 0.01 weight_ray_by_range: False min_ray_length_m: 0.5 occupancy_min_distance_voxel_size_factor: 1.0

Any help would be really appreciated! Thanks in advance!

Josgonmar commented 6 months ago

In case anyone is interested, I managed to make it work by integrating the free space pointcloud as it is available with the param "use_freespace_pointcloud". Of course, this pointcloud has to be published in some other way, so I decided to make a ROS node for that.