diff --git a/perception/image_projection_based_fusion/README.md b/perception/image_projection_based_fusion/README.md
index 207989d8a6f25..dba64a27232b1 100644
--- a/perception/image_projection_based_fusion/README.md
+++ b/perception/image_projection_based_fusion/README.md
@@ -22,23 +22,29 @@ current default value at autoware.universe for TIER IV Robotaxi are: - input_off
![roi_sync_image2](./docs/images/roi_sync_2.png)
The subscription status of the message is signed with 'O'.
+
1.if a pointcloud message is subscribed under the below condition:
-| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 |
+
+| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 |
| :-----------------: | :--------: | :-------: | :-------: | :-------: |
-| subscription status | | O | O | O |
+| subscription status | | O | O | O |
If the roi msgs can be matched, fuse them and postprocess the pointcloud message.
Otherwise, fuse the matched roi msgs and cache the pointcloud.
+
2.if a pointcloud message is subscribed under the below condition:
-| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 |
+
+| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 |
| :-----------------: | :--------: | :-------: | :-------: | :-------: |
-| subscription status | | O | O | |
+| subscription status | | O | O | |
if the roi msgs can be matched, fuse them and cache the pointcloud.
+
3.if a pointcloud message is subscribed under the below condition:
-| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 |
+
+| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 |
| :-----------------: | :--------: | :-------: | :-------: | :-------: |
-| subscription status | O | O | O | |
+| subscription status | O | O | O | |
If the roi msg 3 is subscribed before the next pointcloud message coming or timeout, fuse it if matched, otherwise wait for the next roi msg 3.
If the roi msg 3 is not subscribed before the next pointcloud message coming or timeout, postprocess the pointcloud message as it is.
diff --git a/perception/image_projection_based_fusion/package.xml b/perception/image_projection_based_fusion/package.xml
index 5ff99af2ebb21..1648de210ec2c 100644
--- a/perception/image_projection_based_fusion/package.xml
+++ b/perception/image_projection_based_fusion/package.xml
@@ -6,6 +6,9 @@
The image_projection_based_fusion package
Yukihiro Saito
Yusuke Muramatsu
+ Shunsuke Miura
+ Yoshi Ri
+ badai nguyen
Apache License 2.0
ament_cmake_auto
diff --git a/planning/surround_obstacle_checker/README.md b/planning/surround_obstacle_checker/README.md
index 51f090d7cc2e3..80bb56ff843c4 100644
--- a/planning/surround_obstacle_checker/README.md
+++ b/planning/surround_obstacle_checker/README.md
@@ -101,6 +101,8 @@ As mentioned in stop condition section, it prevents chattering by changing thres
## Parameters
+{{ json_to_markdown("planning/surround_obstacle_checker/schema/surround_obstacle_checker.schema.json") }}
+
| Name | Type | Description | Default value |
| :-------------------------------- | :------- | :------------------------------------------------------------------------------------- | :------------ |
| `use_pointcloud` | `bool` | Use pointcloud as obstacle check | `true` |
diff --git a/planning/surround_obstacle_checker/schema/surround_obstacle_checker.schema.json b/planning/surround_obstacle_checker/schema/surround_obstacle_checker.schema.json
new file mode 100644
index 0000000000000..00a8ae6a12991
--- /dev/null
+++ b/planning/surround_obstacle_checker/schema/surround_obstacle_checker.schema.json
@@ -0,0 +1,397 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Parameters for Surround Obstacle Checker Node",
+ "type": "object",
+ "definitions": {
+ "surround_obstacle_checker": {
+ "type": "object",
+ "properties": {
+ "pointcloud": {
+ "type": "object",
+ "properties": {
+ "enable_check": {
+ "type": "boolean",
+ "description": "enable to check surrounding pointcloud",
+ "default": "false"
+ },
+ "surround_check_front_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_side_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_back_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ }
+ },
+ "required": [
+ "enable_check",
+ "surround_check_front_distance",
+ "surround_check_side_distance",
+ "surround_check_back_distance"
+ ],
+ "additionalProperties": false
+ },
+ "unknown": {
+ "type": "object",
+ "properties": {
+ "enable_check": {
+ "type": "boolean",
+ "description": "enable to check surrounding unknown objects",
+ "default": "true"
+ },
+ "surround_check_front_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_side_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_back_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ }
+ },
+ "required": [
+ "enable_check",
+ "surround_check_front_distance",
+ "surround_check_side_distance",
+ "surround_check_back_distance"
+ ],
+ "additionalProperties": false
+ },
+ "car": {
+ "type": "object",
+ "properties": {
+ "enable_check": {
+ "type": "boolean",
+ "description": "enable to check surrounding car",
+ "default": "true"
+ },
+ "surround_check_front_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_side_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_back_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ }
+ },
+ "required": [
+ "enable_check",
+ "surround_check_front_distance",
+ "surround_check_side_distance",
+ "surround_check_back_distance"
+ ],
+ "additionalProperties": false
+ },
+ "truck": {
+ "type": "object",
+ "properties": {
+ "enable_check": {
+ "type": "boolean",
+ "description": "enable to check surrounding truck",
+ "default": "true"
+ },
+ "surround_check_front_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_side_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_back_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ }
+ },
+ "required": [
+ "enable_check",
+ "surround_check_front_distance",
+ "surround_check_side_distance",
+ "surround_check_back_distance"
+ ],
+ "additionalProperties": false
+ },
+ "bus": {
+ "type": "object",
+ "properties": {
+ "enable_check": {
+ "type": "boolean",
+ "description": "enable to check surrounding bus",
+ "default": "true"
+ },
+ "surround_check_front_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_side_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_back_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ }
+ },
+ "required": [
+ "enable_check",
+ "surround_check_front_distance",
+ "surround_check_side_distance",
+ "surround_check_back_distance"
+ ],
+ "additionalProperties": false
+ },
+ "trailer": {
+ "type": "object",
+ "properties": {
+ "enable_check": {
+ "type": "boolean",
+ "description": "enable to check surrounding trailer",
+ "default": "true"
+ },
+ "surround_check_front_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_side_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_back_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ }
+ },
+ "required": [
+ "enable_check",
+ "surround_check_front_distance",
+ "surround_check_side_distance",
+ "surround_check_back_distance"
+ ],
+ "additionalProperties": false
+ },
+ "motorcycle": {
+ "type": "object",
+ "properties": {
+ "enable_check": {
+ "type": "boolean",
+ "description": "enable to check surrounding motorcycle",
+ "default": "true"
+ },
+ "surround_check_front_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_side_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_back_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ }
+ },
+ "required": [
+ "enable_check",
+ "surround_check_front_distance",
+ "surround_check_side_distance",
+ "surround_check_back_distance"
+ ],
+ "additionalProperties": false
+ },
+ "bicycle": {
+ "type": "object",
+ "properties": {
+ "enable_check": {
+ "type": "boolean",
+ "description": "enable to check surrounding bicycle",
+ "default": "true"
+ },
+ "surround_check_front_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_side_distance": {
+ "type": "number",
+ "description": "f objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_back_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ }
+ },
+ "required": [
+ "enable_check",
+ "surround_check_front_distance",
+ "surround_check_side_distance",
+ "surround_check_back_distance"
+ ],
+ "additionalProperties": false
+ },
+ "pedestrian": {
+ "type": "object",
+ "properties": {
+ "enable_check": {
+ "type": "boolean",
+ "description": "enable to check surrounding pedestrian",
+ "default": "true"
+ },
+ "surround_check_front_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_side_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ },
+ "surround_check_back_distance": {
+ "type": "number",
+ "description": "If objects exist in this distance, transit to \"exist-surrounding-obstacle\" status. [m]",
+ "default": "0.5",
+ "minimum": 0.0
+ }
+ },
+ "required": [
+ "enable_check",
+ "surround_check_front_distance",
+ "surround_check_side_distance",
+ "surround_check_back_distance"
+ ],
+ "additionalProperties": false
+ },
+ "surround_check_hysteresis_distance": {
+ "type": "number",
+ "description": "If no object exists in this hysteresis distance added to the above distance, transit to \"non-surrounding-obstacle\" status [m]",
+ "default": "0.3",
+ "minimum": 0.0
+ },
+ "state_clear_time": {
+ "type": "number",
+ "description": "Threshold to clear stop state [s]",
+ "default": "2.0",
+ "minimum": 0.0
+ },
+ "stop_state_ego_speed": {
+ "type": "number",
+ "description": "Threshold to check ego vehicle stopped [m/s]",
+ "default": "0.1",
+ "minimum": 0.0
+ },
+ "publish_debug_footprints": {
+ "type": "boolean",
+ "description": "Publish vehicle footprint & footprints with surround_check_distance and surround_check_recover_distance offsets.",
+ "default": "true"
+ },
+ "debug_footprint_label": {
+ "type": "string",
+ "description": "select the label for debug footprint",
+ "default": "car",
+ "enum": [
+ "pointcloud",
+ "unknown",
+ "car",
+ "truck",
+ "bus",
+ "trailer",
+ "motorcycle",
+ "bicycle",
+ "pedestrian"
+ ]
+ }
+ },
+ "required": [
+ "pointcloud",
+ "unknown",
+ "car",
+ "truck",
+ "bus",
+ "trailer",
+ "motorcycle",
+ "bicycle",
+ "pedestrian",
+ "surround_check_hysteresis_distance",
+ "state_clear_time",
+ "stop_state_ego_speed",
+ "publish_debug_footprints",
+ "debug_footprint_label"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "/**": {
+ "type": "object",
+ "properties": {
+ "ros__parameters": {
+ "$ref": "#/definitions/surround_obstacle_checker"
+ }
+ },
+ "required": ["ros__parameters"],
+ "additionalProperties": false
+ }
+ },
+ "required": ["/**"],
+ "additionalProperties": false
+}