Robotics StackExchange | Archived questions

Integrating voxel_layer into the costmap

I am trying to include data from a 3d sensor into a 2d costmap knowing that the costmap is also feeded by a 2d sensor. Therefore, I have different layers, an obstacle layer using 2d laser scan data and a voxel layer using 3d point cloud data from a time of flight device.

First of all, I would like to ask you few specific questions about some parameter settings. I saw through different related questions, that originx and originy should be set to -width/2 and -height/2 but I didn't understand why and if it is really required, since by default these values are set to 0. Should I set the maptype to voxel or keep it as staticmap, knowing that I need to get both layers appear in the costmap. In the voxel layer, do we need to set a negative minobstacleheight? I would like to precise that in the robot urdf the base_link is lower than the 3d sensor which is itself lower then the laser sensor.

Next, I would like to see if there is something wrong or missing in the way the parameters are defined. At the end of this post, you can find the parameter settings of the different costmap files. In results to this set of configuration, I can visualize the 3d cloud separately but it does not have any impact on the costmap. Yet the laser data is well taken into account in the local costmap where the marking is set to true for both sensors. So I expect to have both sensor data affecting the local costmap. In the global costmap, however, marking is set to true only for the 3d sensor and yet the corresponding data seems not to be included. The voxelgrid topic also seems not to be updated (same values all the time), and following a solution found online to visualize the voxel grid on rviz, I tried to transform the voxel grid into a point cloud as sensormsgs::PointCloud but the point cloud is empty. I think the problem is in the integration of the voxel layer itself into the costmap. Something must be missing either in the configuration files or a plugin, for example, in my ros version. I am using ros indigo - version 1.11.20

The result I am looking for, concerning the voxel layer, is similar to this video, in addition of course to keep the laser layer in the costmap:

https://www.youtube.com/watch?v=DM8swKliU4s

Please find below the yaml settings :

costmap_common.yaml

transform_tolerance: 0.5

robot_radius: 0.35

costmap_global.yaml

global_costmap:

 global_frame: map

 robot_base_frame: center_wheel_link

 update_frequency: 0.5

 publish_frequency: 0.1

 static_map: true

 map_type: costmap

 track_unknown_space: true

costmap_local.yaml

local_costmap:

 global_frame: map

 robot_base_frame: center_wheel_link

 publish_frequency: 1.0

 update_frequency: 2.0

 rolling_window: true

 map_type: costmap

globalcostmapplugins.yaml

global_costmap:
  width: 10.0
  height: 10.0 
  resolution: 0.03
  origin_x: -5.0
  origin_y: -5.0 

plugins:
 - {name: static_layer, type: "costmap_2d::StaticLayer"}
 - {name: laser_layer, type: "costmap_2d::ObstacleLayer"}
 - {name: tof_layer, type: "costmap_2d::VoxelLayer"}
 - {name: inflation_layer, type: "costmap_2d::InflationLayer"}

inflation_layer:
  inflation_radius: 2.0
  cost_scaling_factor: 10.0

laser_layer:
  enabled: true
  observation_sources: base_scan
  track_unknown_space: true

  base_scan:
    data_type: LaserScan
    topic: /tim500/scan
    marking: false
    clearing: true
    obstacle_range: 20.0
    raytrace_range: 20.0
    expected_update_rate: 15

tof_layer:
  enabled: true
  origin_z: 0.0
  z_resolution: 0.03
  z_voxels: 15
  unknown_threshold: 0
  mark_threshold: 0
  combination_method: 1   
  # for debugging only, let's you see the entire voxel grid
  publish_voxel_map: true
  max_obstacle_height: 3.0
  observation_sources: 3d_cloud 

  3d_cloud:
    data_type: PointCloud2
    topic: /camera/cloud
    marking: true
    clearing: true
    obstacle_range: 3.0
    raytrace_range: 3.0
    max_obstacle_height: 3.0
    min_obstacle_height: 0.0
    expected_update_rate: 3

localcostmapplugins.yaml

local_costmap:
  width: 2.0
  height: 2.0
  resolution: 0.03
  origin_x: -1.0 
  origin_y: -1.0

 plugins:
 - {name: static_layer, type: "costmap_2d::StaticLayer"}
 - {name: laser_layer, type: "costmap_2d::ObstacleLayer"}
 - {name: tof_layer, type: "costmap_2d::VoxelLayer"}
 - {name: inflation_layer, type: "costmap_2d::InflationLayer"}

inflation_layer:
  inflation_radius: 0.15
  cost_scaling_factor: 10.0

 laser_layer:
   enabled: true
   observation_sources: base_scan
   track_unknown_space: true

     base_scan:
       data_type: LaserScan
       topic: /tim500/scan
       marking: true
       clearing: true
       obstacle_range: 4.0
       raytrace_range: 4.0
       expected_update_rate: 15

 tof_layer:
   enabled: true
   origin_z: 0.0
   z_resolution: 0.03
   z_voxels: 15
   unknown_threshold: 0
   mark_threshold: 0
   combination_method: 1
   # for debugging only, let's you see the entire voxel grid
   publish_voxel_map: true    
   max_obstacle_height: 3.0
   observation_sources: 3d_cloud

    3d_cloud:
      data_type: PointCloud2
      topic: /camera/cloud
      marking: true
      clearing: true
      obstacle_range: 3.0
      raytrace_range: 3.0
      max_obstacle_height: 3.0
      min_obstacle_height: 0.0
      expected_update_rate: 3

Asked by layale.saab on 2016-11-14 10:55:17 UTC

Comments

Answers

Hi,layale.saab

I have the similar work with you.I have a 2D laidr sensor and a 3D depth sensor and the obstacle_layer, static_layer, inflation_layer and the voxel_layer all work in a costmap (2D).I transform voxel_grid topic to pointcloud,so I could add the voxel_grid in the rviz , I have make a test in navigation , in my test,the voxel_grid add only, do not eliminate in my rviz .That is to say, only add obstacles(voxel_grid), the obstacle in the costmap_2d not clear, Did you encounter this problem?

the problem link

local_costmap_params.yaml

local_costmap:     
   global_frame: /odom
   robot_base_frame: /base_link 
   update_frequency: 3
   publish_frequency: 3
   static_map: false
   rolling_window: true
   width: 6.0
   height: 6.0
   resolution: 0.025
   transform_tolerance: 1.0
   map_type: costmap

   #static_layer:
     #enabled: false

   plugins:
    - {name: obstacle_layer,  type: "costmap_2d::ObstacleLayer"}
    - {name: voxel_layer, type: "costmap_2d::VoxelLayer"}
    - {name: inflation_layer,   type: "costmap_2d::InflationLayer"}

global_costmap_params.yaml

    global_costmap:
       global_frame: /map
       robot_base_frame: /base_link    
       update_frequency: 3
       publish_frequency: 0.2
       static_map: true
       rolling_window: false
       resolution: 0.025
       transform_tolerance: 1.0
       map_type: costmap
       static_layer:
            enabled: false

costmap_common_params.yaml

inflation_layer:
  cost_scaling_factor: 0.5  
  inflation_radius: 0.35 #0.45
  robot_radius: 0.35

obstacle_layer:
  obstacle_range: 2.5
  raytrace_range: 3.0
  max_obstacle_height: 1.6 #1.3
  min_obstacle_height: 0.03
  observation_sources: scan
  scan: {data_type: LaserScan, topic: /scan, marking: true, clearing: true, expected_update_rate: 0, inf_is_valid: true}


voxel_layer:
  enabled: true
  origin_z: 0.0
  z_resolution: 0.05
  z_voxels: 10
  unknown_threshold: 0
  #mark_threshold: 2
  publish_voxel_map: true
  combination_method: 1
  observation_sources: output_points
  output_points:
    data_type: PointCloud2
    topic: /output_points
    marking: true
    clearing: true
    obstacle_range: 1.90
    raytrace_range: 2.00
    min_obstacle_height: 0.00
    max_obstacle_height: 3.00
    mark_threshold: 3
    observation_persistence: 2.0

Asked by chengwei on 2016-12-04 22:25:45 UTC

Comments

@chengwei i am trying something similar with multiple layers and it still doesn't work for me. Any help is appreciated. Thanks

Asked by cryptichead on 2022-03-03 03:49:32 UTC