diff --git a/planning/planning_validator/CMakeLists.txt b/planning/planning_validator/CMakeLists.txt
new file mode 100644
index 0000000000000..34bdb695ae2c8
--- /dev/null
+++ b/planning/planning_validator/CMakeLists.txt
@@ -0,0 +1,68 @@
+cmake_minimum_required(VERSION 3.14)
+project(planning_validator)
+
+find_package(autoware_cmake REQUIRED)
+autoware_package()
+
+ament_auto_add_library(planning_validator_helpers SHARED
+ src/utils.cpp
+ src/debug_marker.cpp
+)
+
+# planning validator
+ament_auto_add_library(planning_validator_component SHARED
+ include/planning_validator/planning_validator.hpp
+ src/planning_validator.cpp
+)
+target_link_libraries(planning_validator_component planning_validator_helpers)
+rclcpp_components_register_node(planning_validator_component
+ PLUGIN "planning_validator::PlanningValidator"
+ EXECUTABLE planning_validator_node
+)
+
+# invalid trajectory publisher (for debug)
+ament_auto_add_library(invalid_trajectory_publisher_node SHARED
+ src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp
+)
+rclcpp_components_register_node(invalid_trajectory_publisher_node
+ PLUGIN "planning_validator::InvalidTrajectoryPublisherNode"
+ EXECUTABLE invalid_trajectory_publisher
+)
+
+rosidl_generate_interfaces(
+ ${PROJECT_NAME}
+ "msg/PlanningValidatorStatus.msg"
+ DEPENDENCIES builtin_interfaces
+)
+
+# to use a message defined in the same package
+if(${rosidl_cmake_VERSION} VERSION_LESS 2.5.0)
+ rosidl_target_interfaces(planning_validator_component
+ ${PROJECT_NAME} "rosidl_typesupport_cpp")
+else()
+ rosidl_get_typesupport_target(
+ cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp")
+ target_link_libraries(planning_validator_component "${cpp_typesupport_target}")
+endif()
+
+if(BUILD_TESTING)
+ ament_add_ros_isolated_gtest(test_planning_validator
+ test/src/test_main.cpp
+ test/src/test_planning_validator_functions.cpp
+ test/src/test_planning_validator_helper.cpp
+ test/src/test_planning_validator_pubsub.cpp
+ )
+ ament_target_dependencies(test_planning_validator
+ rclcpp
+ autoware_auto_planning_msgs
+ )
+ target_link_libraries(test_planning_validator
+ planning_validator_component
+ )
+endif()
+
+ament_auto_package(
+ INSTALL_TO_SHARE
+ config
+ launch
+)
diff --git a/planning/planning_validator/README.md b/planning/planning_validator/README.md
new file mode 100644
index 0000000000000..cd6af3afde172
--- /dev/null
+++ b/planning/planning_validator/README.md
@@ -0,0 +1 @@
+# Planning Validator
diff --git a/planning/planning_validator/config/planning_validator.param.yaml b/planning/planning_validator/config/planning_validator.param.yaml
new file mode 100644
index 0000000000000..16be56c5b182d
--- /dev/null
+++ b/planning/planning_validator/config/planning_validator.param.yaml
@@ -0,0 +1,16 @@
+/**:
+ ros__parameters:
+ publish_diag: true # if true, diagnostic msg is published
+ use_previous_trajectory_on_invalid: true # if true, invalid trajectory is not published, previous valid trajectory is published instead.
+ display_on_terminal: true # show error msg on terminal
+ thresholds:
+ interval: 100.0
+ relative_angle: 2.0 # (= 115 degree)
+ curvature: 1.0
+ lateral_acc: 9.8
+ longitudinal_max_acc: 9.8
+ longitudinal_min_acc: -9.8
+ steering: 1.414
+ steering_rate: 10.0
+ velocity_deviation: 100.0
+ distance_deviation: 100.0
diff --git a/planning/planning_validator/config/planning_validator_plotjugler_config.xml b/planning/planning_validator/config/planning_validator_plotjugler_config.xml
new file mode 100644
index 0000000000000..bd971d55b3985
--- /dev/null
+++ b/planning/planning_validator/config/planning_validator_plotjugler_config.xml
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/planning/planning_validator/include/planning_validator/debug_marker.hpp b/planning/planning_validator/include/planning_validator/debug_marker.hpp
new file mode 100644
index 0000000000000..1c3a8bab851ca
--- /dev/null
+++ b/planning/planning_validator/include/planning_validator/debug_marker.hpp
@@ -0,0 +1,58 @@
+// Copyright 2022 Tier IV, Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef PLANNING_VALIDATOR__DEBUG_MARKER_HPP_
+#define PLANNING_VALIDATOR__DEBUG_MARKER_HPP_
+
+#include
+
+#include
+#include
+#include
+
+#include