blockage_diag#
Purpose#
To ensure the performance of LiDAR and safety for autonomous driving, the abnormal condition diagnostics feature is needed. LiDAR blockage is abnormal condition of LiDAR when some unwanted objects stitch to and block the light pulses and return signal. This node's purpose is to detect the existing of blockage on LiDAR and its related size and location.
Inner-workings / Algorithms(Blockage detection)#
This node bases on the no-return region and its location to decide if it is a blockage.
The logic is showed as below
Inner-workings /Algorithms(Dust detection)#
About dust detection, morphological processing is implemented. If the lidar's ray cannot be acquired due to dust in the lidar area where the point cloud is considered to return from the ground, black pixels appear as noise in the depth image. The area of noise is found by erosion and dilation these black pixels.
Inputs / Outputs#
This implementation inherits autoware::pointcloud_preprocessor::Filter
class, please refer README.
Input#
Name | Type | Description |
---|---|---|
~/input/pointcloud_raw_ex |
sensor_msgs::msg::PointCloud2 |
The raw point cloud data is used to detect the no-return region |
Output#
Name | Type | Description |
---|---|---|
~/output/blockage_diag/debug/blockage_mask_image |
sensor_msgs::msg::Image |
The mask image of detected blockage |
~/output/blockage_diag/debug/ground_blockage_ratio |
tier4_debug_msgs::msg::Float32Stamped |
The area ratio of blockage region in ground region |
~/output/blockage_diag/debug/sky_blockage_ratio |
tier4_debug_msgs::msg::Float32Stamped |
The area ratio of blockage region in sky region |
~/output/blockage_diag/debug/lidar_depth_map |
sensor_msgs::msg::Image |
The depth map image of input point cloud |
~/output/blockage_diag/debug/single_frame_dust_mask |
sensor_msgs::msg::Image |
The mask image of detected dusty area in latest single frame |
~/output/blockage_diag/debug/multi_frame_dust_mask |
sensor_msgs::msg::Image |
The mask image of continuous detected dusty area |
~/output/blockage_diag/debug/blockage_dust_merged_image |
sensor_msgs::msg::Image |
The merged image of blockage detection(red) and multi frame dusty area detection(yellow) results |
~/output/blockage_diag/debug/ground_dust_ratio |
tier4_debug_msgs::msg::Float32Stamped |
The ratio of dusty area divided by area where ray usually returns from the ground. |
Parameters#
Name | Type | Description | Default | Range |
---|---|---|---|---|
blockage_ratio_threshold | float | The threshold of blockage area ratio. If the blockage value exceeds this threshold, the diagnostic state will be set to ERROR. | 0.1 | ≥0 |
blockage_count_threshold | float | The threshold of number continuous blockage frames | 50 | ≥0 |
blockage_buffering_frames | integer | The number of buffering about blockage detection [range:1-200] | 2 | ≥1 ≤200 |
blockage_buffering_interval | integer | The interval of buffering about blockage detection | 1 | ≥0 |
enable_dust_diag | boolean | enable dust diagnostic | false | N/A |
publish_debug_image | boolean | publish debug image | false | N/A |
dust_ratio_threshold | float | The threshold of dusty area ratio | 0.2 | ≥0 |
dust_count_threshold | integer | The threshold of number continuous frames include dusty area | 10 | ≥0 |
dust_kernel_size | integer | The kernel size of morphology processing in dusty area detection | 2 | ≥0 |
dust_buffering_frames | integer | The number of buffering about dusty area detection [range:1-200] | 10 | ≥1 ≤200 |
dust_buffering_interval | integer | The interval of buffering about dusty area detection | 1 | ≥0 |
max_distance_range | float | Maximum view range for the LiDAR | 200.0 | ≥0 |
horizontal_resolution | float | The horizontal resolution of depth map image [deg/pixel] | 0.4 | ≥0 |
blockage_kernel | integer | The kernel size of morphology processing the detected blockage area | 10 | ≥0 |
angle_range | array | The effective range of LiDAR | [0.0, 360.0] | N/A |
vertical_bins | integer | The LiDAR channel | 40 | ≥0 |
is_channel_order_top2down | boolean | If the lidar channels are indexed from top to down | true | N/A |
horizontal_ring_id | integer | The id of horizontal ring of the LiDAR | 18 | ≥0 |
Assumptions / Known limits#
- Only Hesai Pandar40P and Hesai PandarQT were tested. For a new LiDAR, it is necessary to check order of channel id in vertical distribution manually and modify the code.
- About dusty area detection, False positives occur when there are water puddles on the road surface due to rain, etc. Also, the area of the ray to the sky is currently undetectable.