diff --git a/perception/detected_object_validation/CMakeLists.txt b/perception/detected_object_validation/CMakeLists.txt index 66e8ba6a16b7e..546b7442fb12b 100644 --- a/perception/detected_object_validation/CMakeLists.txt +++ b/perception/detected_object_validation/CMakeLists.txt @@ -22,9 +22,6 @@ find_package(ament_cmake_auto REQUIRED) ### Find OpenCV Dependencies find_package(OpenCV REQUIRED) -### Find PCL Dependencies -find_package(PCL REQUIRED QUIET COMPONENTS common search filters segmentation) - ### Find Eigen Dependencies find_package(eigen3_cmake_module REQUIRED) find_package(Eigen3 REQUIRED) @@ -36,11 +33,9 @@ include_directories( include SYSTEM ${OpenCV_INCLUDE_DIRS} - ${PCL_COMMON_INCLUDE_DIRS} - ${PCL_INCLUDE_DIRS} ) -# Generate occupancy grid based validator exe file +# Generate exe file set(OCCUPANCY_GRID_BASED_VALIDATOR_SRC src/occupancy_grid_based_validator.cpp ) @@ -54,25 +49,9 @@ target_link_libraries(occupancy_grid_based_validator Eigen3::Eigen ) - -# Generate obstacle pointcloud based validator exe file -set(OBSTACLE_POINTCLOUD_BASED_VALIDATOR_SRC - src/obstacle_pointcloud_based_validator.cpp -) - -ament_auto_add_library(obstacle_pointcloud_based_validator SHARED - ${OBSTACLE_POINTCLOUD_BASED_VALIDATOR_SRC} -) - -target_link_libraries(obstacle_pointcloud_based_validator - ${PCL_LIBRARIES} - Eigen3::Eigen -) - - -rclcpp_components_register_node(obstacle_pointcloud_based_validator - PLUGIN "obstacle_pointcloud_based_validator::ObstaclePointCloudBasedValidator" - EXECUTABLE obstacle_pointcloud_based_validator_node +rclcpp_components_register_node(occupancy_grid_based_validator + PLUGIN "occupancy_grid_based_validator::OccupancyGridBasedValidator" + EXECUTABLE occupancy_grid_based_validator_node ) if(BUILD_TESTING) diff --git a/perception/detected_object_validation/README.md b/perception/detected_object_validation/README.md index 2e7ae38d52a2a..2bb1f9d3a4e8d 100644 --- a/perception/detected_object_validation/README.md +++ b/perception/detected_object_validation/README.md @@ -1,10 +1,50 @@ -# detected_object_validation +# detected_object_validation (occupancy grid based validator) ## Purpose The purpose of this package is to eliminate obvious false positives of DetectedObjects. -## References/External links +## Inner-workings / Algorithms -- [Obstacle pointcloud based validator](obstacle-pointcloud-based-validator.md) -- [Occupancy grid based validator](occupancy-grid-based-validator.md) +Compare the occupancy grid map with the DetectedObject, and if a larger percentage of obstacles are in freespace, delete them. + +![debug sample image](image/debug_image.png) + +Basically, it takes an occupancy grid map as input and generates a binary image of freespace or other. + +A mask image is generated for each DetectedObject and the average value (percentage) in the mask image is calculated. +If the percentage is low, it is deleted. + +## Inputs / Outputs + +### Input + +| Name | Type | Description | +| ---------------------------- | ----------------------------------------------------- | ----------------------------------------------------------- | +| `~/input/detected_objects` | `autoware_auto_perception_msgs::msg::DetectedObjects` | DetectedObjects | +| `~/input/occupancy_grid_map` | `nav_msgs::msg::OccupancyGrid` | OccupancyGrid with no time series calculation is preferred. | + +### Output + +| Name | Type | Description | +| ------------------ | ----------------------------------------------------- | ------------------------- | +| `~/output/objects` | `autoware_auto_perception_msgs::msg::DetectedObjects` | validated DetectedObjects | + +## Parameters + +| Name | Type | Description | +| ---------------- | ----- | -------------------------------------------------- | +| `mean_threshold` | float | The percentage threshold of allowed non-freespace. | +| `enable_debug` | bool | Whether to display debug images or not? | + +## Assumptions / Known limits + +Currently, only vehicle represented as BoundingBox are supported. + +## (Optional) Error detection and handling + +## (Optional) Performance characterization + +## (Optional) References/External links + +## (Optional) Future extensions / Unimplemented parts diff --git a/perception/detected_object_validation/image/debug_image.png b/perception/detected_object_validation/image/debug_image.png new file mode 100644 index 0000000000000..7ac379a243d17 Binary files /dev/null and b/perception/detected_object_validation/image/debug_image.png differ diff --git a/perception/detected_object_validation/launch/occupancy_grid_based_validator.launch.xml b/perception/detected_object_validation/launch/occupancy_grid_based_validator.launch.xml index ce74c87ad1338..542f7a5c4463f 100644 --- a/perception/detected_object_validation/launch/occupancy_grid_based_validator.launch.xml +++ b/perception/detected_object_validation/launch/occupancy_grid_based_validator.launch.xml @@ -2,14 +2,14 @@ - + - + - + diff --git a/perception/detected_object_validation/package.xml b/perception/detected_object_validation/package.xml index d17b9a3a51d8f..a29206a0d7489 100644 --- a/perception/detected_object_validation/package.xml +++ b/perception/detected_object_validation/package.xml @@ -12,7 +12,6 @@ autoware_auto_perception_msgs message_filters nav_msgs - pcl_conversions rclcpp rclcpp_components tf2 diff --git a/perception/detected_object_validation/src/occupancy_grid_based_validator.cpp b/perception/detected_object_validation/src/occupancy_grid_based_validator.cpp index d8542d62fc469..bc7788ee2af32 100644 --- a/perception/detected_object_validation/src/occupancy_grid_based_validator.cpp +++ b/perception/detected_object_validation/src/occupancy_grid_based_validator.cpp @@ -213,10 +213,10 @@ void OccupancyGridBasedValidator::toPolygon2d( vertices.push_back(cv::Point2f(pose.position.x + offset3.x(), pose.position.y + offset3.y())); } else if (object.shape.type == Shape::CYLINDER) { RCLCPP_WARN_THROTTLE( - this->get_logger(), *this->get_clock(), 5000, "CYLINDER type is not supported"); + this->get_logger(), *this->get_clock(), 5, "CYLINDER type is not supported"); } else if (object.shape.type == Shape::POLYGON) { RCLCPP_WARN_THROTTLE( - this->get_logger(), *this->get_clock(), 5000, "POLYGON type is not supported"); + this->get_logger(), *this->get_clock(), 5, "POLYGON type is not supported"); } }