Skip to content

[ROS2] costmap does not clear when voxels are cleared #187

@tal-grossman

Description

@tal-grossman

Bug report

I'm new in using the the stvl layer (b.t.w - another great job!), and might be doing something wrong.
But according to the tutorials and to the answer given here Spatio temporal voxel layer: Clearing voxels not seen but included in fov - which explicitly saying that if a voxel is removed than the costmap should be updated as well , I think there might be a sync issue - when voxels are cleared after decaying but the costmap is not.

please look at the video -
voxels are green, taken from depth pcl. The 2D local costmap layer is pink.

stvl_sync_clear_issue-2020-12-24_10.06.25.mp4

Required Info:

  • Operating System:
    Ubuntu 20.04
  • Version or commit hash:
    • stvl branch: build from foxy-devel, commit: 4f538989191ae29325ddfc912ea452172ea765f8
    • nav2: foxy binaries: 0.4.5-1focal.20201210.084248

Steps to reproduce issue

  • Implement the stvl layer to the local costmap - seee parameters:

  local_costmap:
    local_costmap:
      ros__parameters:
        update_frequency: 5.0
        publish_frequency: 2.0
        global_frame: map # default odom
        robot_base_frame: base_link
        use_sim_time: True
        rolling_window: true
        width: 4
        height: 4
        resolution: 0.05
        footprint: "[[0.083, 0.16033], [-0.36511, 0.16033], [-0.36511, -0.16033], [0.083,-0.16033]]"
        footprint_padding: 0.01
        robot_radius: 0.16 # not in use when has footprint
        lethal_cost_threshold: 50
        plugins: [ "inflation_layer",  "head_stvl_layer" ] 
        inflation_layer:
          plugin: "nav2_costmap_2d::InflationLayer"
          enabled: true
          inflation_radius: 0.08 #0.55 default
          cost_scaling_factor: 5.0
          inflate_unknown: false
          inflate_around_unknown: false

        head_stvl_layer:
          plugin: "spatio_temporal_voxel_layer/SpatioTemporalVoxelLayer"
          enabled: true
          voxel_decay: 10.0  # seconds if linear, e^n if exponential
          decay_model: 0     # 0=linear, 1=exponential, -1=persistent
          voxel_size: 0.2  # meters
          track_unknown_space: false  # default space is known
          max_obstacle_height: 2.0   # meters
          unknown_threshold: 15
          mark_threshold: 2
          update_footprint_enabled: true
          combination_method: 1     # 1=max, 0=override
          origin_z: 0.0   # meters
          publish_voxel_map: true # default off
          transform_tolerance: 0.2   # seconds
          mapping_mode: false # default off, saves map not for navigation
          map_save_duration: 60.0  # default 60s, how often to autosave
          observation_sources: head_depth_pointcloud_mark head_depth_pointcloud_clear
          head_depth_pointcloud_mark:
            data_type: PointCloud2
            topic: /sensors/depth_cameras/head/points
            marking: true
            clearing: false
            obstacle_range: 2.0          # meters
            min_obstacle_height: 0.3     # default 0, meters
            max_obstacle_height: 1.5     # default 3, meters
            expected_update_rate: 0.0    # default 0, if not updating at this rate at least, remove from buffer
            observation_persistence: 0.0 # default 0, use all measurements taken during now-value, 0=latest
            inf_is_valid: false          # default false, for laser scans
            filter: "passthrough"        # default passthrough, apply "voxel", "passthrough", or no filter to sensor data, recommend on
            voxel_min_points: 8         # default 0, minimum points per voxel for voxel filter
            clear_after_reading: true    # default false, clear the buffer after the layer gets readings from it
          head_depth_pointcloud_clear:
            data_type: PointCloud2
            topic: /sensors/depth_cameras/head/points
            marking: false
            clearing: true
            max_z: 3.0                  # default 0, meters # maximum distance from camera it can see
            min_z: 0.2                  # default 10, meters
            vertical_fov_angle: 0.8745  # default 0.7, radians
            horizontal_fov_angle: 1.048 # default 1.04, radians
            decay_acceleration: 5.0     # default 0, 1/s^2. If laser scanner MUST be 0 #acceleration scales the model's decay in presence of readings
            model_type: 0                # default 0, model type for frustum. 0=depth camera, 1=3d lidar like VLP16 or similar
  • PCL is directed to a wall, voxels are created and projected to the local costmap
  • turn the robot and watch the voxels decay
  • costmap is still "dirty" with decayed voxels.

Expected behavior

costmap is synced to stvl layer. when voxeled are cleared the costmap should be updated accordingly

Actual behavior

After voxels decayed and cleared from layer the costmap is not totally cleared

Additional information

  • When reproducing this scenrio only the STVL and inflation layer are active

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions