Parameters

There are three parameter files:

  1. Robot Setup Configurations

  2. Plugin configurations

  3. Core Parameters

  4. Sensor parameter

Robot Setup Configurations

Such as Publishers and subscribers

/elevation_mapping_node:
  ros__parameters:
    #### Plugins ########
    plugin_config_file: '$(rospack find elevation_mapping_cupy)/config/core/plugin_config.yaml'

    #### Channel Fusions ########
    pointcloud_channel_fusions:
      rgb: 'color'                # 'color' fusion is used for the 'rgb' channel
      default: 'average'          # 'average' fusion is used for channels not listed here

    image_channel_fusions:
      rgb: 'color'                # 'color' fusion is used for the 'rgb' channel
      default: 'exponential'      # 'exponential' fusion is used for channels not listed here
      feat_.*: 'exponential'      # 'exponential' fusion is also used for any channel starting with 'feat_' Regular expressions can be used for channel names

    #### Subscribers ########
    #  pointcloud_sensor_name:
    #    topic_name: '/sensor/pointcloud_semantic'
    #    data_type:  pointcloud  # pointcloud or image
    #
    #  image_sensor_name:
    #    topic_name: '/camera/image_semantic'
    #    data_type:  image  # pointcloud or image
    #    camera_info_topic_name: '/camera/depth/camera_info'
    #    channel_info_topic_name: '/camera/channel_info'


    subscribers:
      front_cam:
        topic_name: '/camera/depth/points'
        data_type: pointcloud
      color_cam: # for color camera
        topic_name: '/camera/rgb/image_raw'
        camera_info_topic_name: '/camera/depth/camera_info'
        data_type: image
      semantic_cam: # for semantic images
        topic_name: '/front_cam/semantic_image'
        camera_info_topic_name: '/front_cam/camera/depth/camera_info_resized'
        channel_info_topic_name: '/front_cam/channel_info'
        data_type: image

    #### Publishers ########
    # topic_name:
    #   layers:               # Choose from 'elevation', 'variance', 'traversability', 'time', 'normal_x', 'normal_y', 'normal_z', 'color', plugin_layer_names
    #   basic_layers:         # basic_layers for valid cell computation (e.g. Rviz): Choose a subset of `layers`.
    #   fps:                  # Publish rate. Use smaller value than `map_acquire_fps`.

    publishers:
      elevation_map_raw:
        layers: ['elevation', 'traversability', 'variance','rgb']
        basic_layers: ['elevation']
        fps: 5.0
      elevation_map_recordable:
      layers: ['elevation', 'traversability']
      basic_layers: ['elevation', 'traversability']
      fps: 2.0
      elevation_map_filter:
        layers: ['min_filter', 'smooth', 'inpaint', 'elevation']
        basic_layers: ['min_filter']
        fps: 3.0

Plugin configurations

More informations on the plugins can be found in Plugins.

/elevation_mapping_node:
  ros__parameters:
        # Settings of the plugins. (The plugins should be stored in script/plugins)

    # min_filter fills in minimum value around the invalid cell.
    min_filter:
      enable: True                                # weather to load this plugin
      fill_nan: False                             # Fill nans to invalid cells of elevation layer.
      is_height_layer: True                       # If this is a height layer (such as elevation) or not (such as traversability)
      layer_name: "min_filter"                    # The layer name.
      extra_params:                               # This params are passed to the plugin class on initialization.
        dilation_size: 1                         # The patch size to apply
        iteration_n: 30                           # The number of iterations
    # Apply smoothing.
    smooth_filter:
      enable: True
      fill_nan: False
      is_height_layer: True
      layer_name: "smooth"
      extra_params:
        input_layer_name: "min_filter"
    # Apply inpainting using opencv
    inpainting:
      enable: True
      fill_nan: False
      is_height_layer: True
      layer_name: "inpaint"
      extra_params:
        method: "telea"                           # telea or ns
    # Apply smoothing for inpainted layer
    erosion:
      enable: True
      fill_nan: False
      is_height_layer: False
      layer_name: "erosion"
      extra_params:
        input_layer_name: "traversability"
        dilation_size: 3
        iteration_n: 20
        reverse: True

Core Parameters

elevation_mapping_node:
  ros__parameters:
    #### Basic parameters ########
    resolution: 0.04                                # resolution in m.
    map_length: 8.0                                 # map's size in m.
    sensor_noise_factor: 0.05                       # point's noise is sensor_noise_factor*z^2 (z is distance from sensor).
    mahalanobis_thresh: 2.0                         # points outside this distance is outlier.
    outlier_variance: 0.01                          # if point is outlier, add this value to the cell.
    drift_compensation_variance_inler: 0.05         # cells under this value is used for drift compensation.
    max_drift: 0.1                                  # drift compensation happens only the drift is smaller than this value (for safety)
    drift_compensation_alpha: 0.1                   # drift compensation alpha for smoother update of drift compensation
    time_variance: 0.0001                           # add this value when update_variance is called.
    max_variance: 100.0                             # maximum variance for each cell.
    initial_variance: 1000.0                        # initial variance for each cell.
    traversability_inlier: 0.9                      # cells with higher traversability are used for drift compensation.
    dilation_size: 3                                # dilation filter size before traversability filter.
    wall_num_thresh: 20                             # if there are more points than this value, only higher points than the current height are used to make the wall more sharp.
    min_height_drift_cnt: 100                       # drift compensation only happens if the valid cells are more than this number.
    position_noise_thresh: 0.01                     # if the position change is bigger than this value, the drift compensation happens.
    orientation_noise_thresh: 0.01                  # if the orientation change is bigger than this value, the drift compensation happens.
    position_lowpass_alpha: 0.2                     # lowpass filter alpha used for detecting movements.
    orientation_lowpass_alpha: 0.2                  # lowpass filter alpha used for detecting movements.
    min_valid_distance: 0.5                         # points with shorter distance will be filtered out.
    max_height_range: 1.0                           # points higher than this value from sensor will be filtered out to disable ceiling.
    ramped_height_range_a: 0.3                      # if z > max(d - ramped_height_range_b, 0) * ramped_height_range_a + ramped_height_range_c, reject.
    ramped_height_range_b: 1.0                      # if z > max(d - ramped_height_range_b, 0) * ramped_height_range_a + ramped_height_range_c, reject.
    ramped_height_range_c: 0.2                      # if z > max(d - ramped_height_range_b, 0) * ramped_height_range_a + ramped_height_range_c, reject.
    update_variance_fps: 5.0                        # fps for updating variance.
    update_pose_fps: 3.0                           # fps for updating pose and shift the center of map.
    time_interval: 0.1                              # Time layer is updated with this interval.
    map_acquire_fps: 5.0                            # Raw map is fetched from GPU memory in this fps.
    publish_statistics_fps: 1.0                     # Publish statistics topic in this fps.
    recordable_fps: 3.0                           # Recordable fps for pointcloud.
    enable_normal_arrow_publishing: false

    max_ray_length: 10.0                            # maximum length for ray tracing.
    cleanup_step: 0.1                               # subtitute this value from validity layer at visibiltiy cleanup.
    cleanup_cos_thresh: 0.1                         # subtitute this value from validity layer at visibiltiy cleanup.

    safe_thresh: 0.7                                # if traversability is smaller, it is counted as unsafe cell.
    safe_min_thresh: 0.4                            # polygon is unsafe if there exists lower traversability than this.
    max_unsafe_n: 10                                # if the number of cells under safe_thresh exceeds this value, polygon is unsafe.

    overlap_clear_range_xy: 4.0                     # xy range [m] for clearing overlapped area. this defines the valid area for overlap clearance. (used for multi floor setting)
    overlap_clear_range_z: 2.0                      # z range [m] for clearing overlapped area. cells outside this range will be cleared. (used for multi floor setting)

    map_frame: 'odom'                               # The map frame where the odometry source uses.
    base_frame: 'base_footprint'                    # The robot's base frame. This frame will be a center of the map.
    corrected_map_frame: 'odom'


    #### Feature toggles ########
    enable_edge_sharpen: true
    enable_visibility_cleanup: true
    enable_drift_compensation: true
    enable_overlap_clearance: true
    enable_pointcloud_publishing: false
    enable_drift_corrected_TF_publishing: false
    enable_normal_color: false                      # If true, the map contains 'color' layer corresponding to normal. Add 'color' layer to the publishers setting if you want to visualize.

    #### Traversability filter ########
    use_chainer: false                              # Use chainer as a backend of traversability filter or pytorch. If false, it uses pytorch. pytorch requires ~2GB more GPU memory compared to chainer but runs faster.
    weight_file: '$(find-pkg-share elevation_mapping_cupy)/config/core/weights.dat'               # Weight file for traversability filter

    #### Upper bound ########
    use_only_above_for_upper_bound: false

    #### Initializer ########
    initialize_method: 'linear'                                         # Choose one from 'nearest', 'linear', 'cubic'
    initialize_frame_id: 'nearest'                             # One tf (like ['footprint'] ) initializes a square around it.
    initialize_tf_offset: [0.0, 0.0, 0.0, 0.0]                          # z direction. Should be same number as initialize_frame_id.
    dilation_size_initialize: 2                                         # dilation size after the init.
    initialize_tf_grid_size: 50                                        # This is not used if number of tf is more than 3.
    use_initializer_at_start: true                                      # Use initializer when the node starts.

    #### Default Plugins ########
    plugin_config_file: '$(find-pkg-share elevation_mapping_cupy)/config/core/plugin_config.yaml'

Sensor parameter

More informations on the sensor configurations can be found in Semantics.

front_cam_pointcloud:
  channels: ['rgb', 'chair','sofa',"person" ]
  fusion: ['color','class_average','class_average','class_average']
  topic_name: 'front_camera/semantic_pointcloud'
  semantic_segmentation: True
  publish_segmentation_image: True
  segmentation_model: 'lraspp_mobilenet_v3_large' # detectron_coco_panoptic_fpn_R_101_3x, lraspp_mobilenet_v3_large
  show_label_legend: False
  data_type: pointcloud

  cam_info_topic: "camera/depth/camera_info"
  image_topic: "camera/rgb/image_raw"
  depth_topic: "camera/depth/image_raw"
  cam_frame: "camera_rgb_optical_frame"

front_cam_image:
  channels: ['chair','sofa',"person"]
  fusion_methods: ['exponential','exponential','exponential']
  publish_topic: 'semantic_image'
  publish_image_topic: "semantic_image_debug"
  publish_camera_info_topic: 'semantic_image_info'
  publish_fusion_info_topic: 'semantic_image_fusion_info'
  data_type: image

  semantic_segmentation: True
  feature_extractor: True
  segmentation_model: 'lraspp_mobilenet_v3_large' # detectron_coco_panoptic_fpn_R_101_3x, lraspp_mobilenet_v3_large
  show_label_legend: False
  image_topic: "camera/rgb/image_raw"
  camera_info_topic: "camera/depth/camera_info"
  resize: 0.5