autoware_occupancy_grid_map_outlier_filter#
Purpose#
This node is an outlier filter based on a occupancy grid map. Depending on the implementation of occupancy grid map, it can be called an outlier filter in time series, since the occupancy grid map expresses the occupancy probabilities in time series.
Inner-workings / Algorithms#
-
Use the occupancy grid map to separate point clouds into those with low occupancy probability and those with high occupancy probability.
-
The point clouds that belong to the low occupancy probability are not necessarily outliers. In particular, the top of the moving object tends to belong to the low occupancy probability. Therefore, if
use_radius_search_2d_filteris true, then apply an radius search 2d outlier filter to the point cloud that is determined to have a low occupancy probability.- For each low occupancy probability point, determine the outlier from the radius (
radius_search_2d_filter/search_radius) and the number of point clouds. In this case, the point cloud to be referenced is not only low occupancy probability points, but all point cloud including high occupancy probability points. - The number of point clouds can be multiplied by
radius_search_2d_filter/min_points_and_distance_ratioand distance from base link. However, the minimum and maximum number of point clouds is limited.
- For each low occupancy probability point, determine the outlier from the radius (
The following video is a sample. Yellow points are high occupancy probability, green points are low occupancy probability which is not an outlier, and red points are outliers. At around 0:15 and 1:16 in the first video, a bird crosses the road, but it is considered as an outlier.
Inputs / Outputs#
Input#
| Name | Type | Description |
|---|---|---|
~/input/pointcloud |
sensor_msgs/PointCloud2 |
Obstacle point cloud with ground removed. |
~/input/occupancy_grid_map |
nav_msgs/OccupancyGrid |
A map in which the probability of the presence of an obstacle is occupancy probability map |
Output#
| Name | Type | Description |
|---|---|---|
~/output/pointcloud |
sensor_msgs/PointCloud2 |
Point cloud with outliers removed. trajectory |
~/output/debug/outlier/pointcloud |
sensor_msgs/PointCloud2 |
Point clouds removed as outliers. |
~/output/debug/low_confidence/pointcloud |
sensor_msgs/PointCloud2 |
Point clouds that had a low probability of occupancy in the occupancy grid map. However, it is not considered as an outlier. |
~/output/debug/high_confidence/pointcloud |
sensor_msgs/PointCloud2 |
Point clouds that had a high probability of occupancy in the occupancy grid map. trajectory |
Parameters#
| Name | Type | Description | Default | Range |
|---|---|---|---|---|
| radius_search_2d_filter.search_radius | float | Radius used when calculating the density. | 1.0 | ≥0.0 |
| radius_search_2d_filter.min_points_and_distance_ratio | float | Threshold value of the number of point clouds per radius when the distance from the base link is 1m. | 400.0 | ≥0.0 |
| radius_search_2d_filter.min_points | integer | Minimum number of point clouds per radius. | 4 | ≥1 |
| radius_search_2d_filter.max_points | integer | Maximum number of point clouds per radius. | 70 | ≥1 |
| radius_search_2d_filter.max_filter_points_nb | integer | Maximum number of point clouds to be filtered. | 15000 | ≥1 |
| map_frame | string | The frame ID for the map. | map | N/A |
| base_link_frame | string | The frame ID for the base link. | base_link | N/A |
| cost_threshold | integer | Cost threshold for occupancy grid map (0-100), where 100 indicates a high probability of an obstacle. | 45 | ≥0 ≤100 |
| use_radius_search_2d_filter | boolean | Enable or disable the 2D radius search filter. | True | N/A |
| enable_debugger | boolean | Enable or disable debugging output. | False | N/A |
| publish_processing_time_detail | boolean | Enable or disable publishing of processing time details. | False | N/A |