diff --git a/system/autoware_auto_msgs_adapter/CMakeLists.txt b/system/autoware_auto_msgs_adapter/CMakeLists.txt
new file mode 100644
index 0000000000000..9b48112227cbe
--- /dev/null
+++ b/system/autoware_auto_msgs_adapter/CMakeLists.txt
@@ -0,0 +1,31 @@
+cmake_minimum_required(VERSION 3.14)
+project(autoware_auto_msgs_adapter)
+
+find_package(autoware_cmake REQUIRED)
+autoware_package()
+
+set(NODE_NAME ${PROJECT_NAME}_node)
+set(EXEC_NAME ${PROJECT_NAME}_exe)
+set(TEST_NAME test_${PROJECT_NAME})
+
+ament_auto_add_library(${NODE_NAME}
+ src/include/adapter_base.hpp
+ src/include/adapter_base_interface.hpp
+ src/include/adapter_control.hpp
+ src/include/autoware_auto_msgs_adapter_core.hpp
+ src/autoware_auto_msgs_adapter_core.cpp)
+
+rclcpp_components_register_node(${NODE_NAME}
+ PLUGIN "autoware_auto_msgs_adapter::AutowareAutoMsgsAdapterNode"
+ EXECUTABLE ${EXEC_NAME})
+
+if(BUILD_TESTING)
+ file(GLOB_RECURSE TEST_SOURCES test/*.cpp)
+ ament_add_ros_isolated_gtest(${TEST_NAME} ${TEST_SOURCES})
+ target_include_directories(${TEST_NAME} PRIVATE src/include)
+ target_link_libraries(${TEST_NAME} ${NODE_NAME})
+endif()
+
+ament_auto_package(INSTALL_TO_SHARE
+ launch
+ config)
diff --git a/system/autoware_auto_msgs_adapter/README.md b/system/autoware_auto_msgs_adapter/README.md
new file mode 100644
index 0000000000000..85c2797074f1f
--- /dev/null
+++ b/system/autoware_auto_msgs_adapter/README.md
@@ -0,0 +1,102 @@
+# autoware_auto_msgs_adapter
+
+This package is used to convert `autoware_msgs` to `autoware_auto_msgs`.
+
+## Purpose
+
+As we transition from `autoware_auto_msgs` to `autoware_msgs`, we wanted to provide flexibility and compatibility for
+users who are still using `autoware_auto_msgs`.
+
+This adapter package allows users to easily convert messages between the two formats.
+
+## Capabilities
+
+The `autoware_auto_msgs_adapter` package provides the following capabilities:
+
+- Conversion of supported `autoware_msgs` messages to `autoware_auto_msgs` messages.
+- Can be extended to support conversion for any message type pairs.
+- Each instance is designed to convert from a single source message type to a single target message type.
+- Multiple instances can be launched to convert multiple message types.
+- Can be launched as a standalone node or as a component.
+
+## Usage
+
+Customize the adapter configuration by replicating and editing the `adapter_control.param.yaml` file located
+in the `autoware_auto_msgs_adapter/config` directory. Example configuration:
+
+```yaml
+/**:
+ ros__parameters:
+ msg_type_target: "autoware_auto_control_msgs/msg/AckermannControlCommand"
+ topic_name_source: "/control/command/control_cmd"
+ topic_name_target: "/control/command/control_cmd_auto"
+```
+
+Set the `msg_type_target` parameter to the desired target message type from `autoware_auto_msgs`.
+
+Make sure that the `msg_type_target` has the correspondence in either:
+
+- [schema/autoware_auto_msgs_adapter.schema.json](schema/autoware_auto_msgs_adapter.schema.json)
+- OR [src/autoware_auto_msgs_adapter_core.cpp](src/autoware_auto_msgs_adapter_core.cpp) `AutowareAutoMsgsAdapterNode::create_adapter_map()` method.
+
+(If this package is maintained correctly, they should match each other.)
+
+Launch the adapter node by any of the following methods:
+
+### `ros2 launch`
+
+```bash
+ros2 launch autoware_auto_msgs_adapter autoware_auto_msgs_adapter.launch.xml param_path:='full_path_to_param_file'
+```
+
+Make sure to set the `param_path` argument to the full path of the parameter file.
+
+Alternatively,
+
+- You can replicate and edit the launch file to suit to your needs.
+- You can make use of the existing launch file in another launch file by providing the parameter file path as an
+ argument.
+
+### `ros2 run`
+
+```bash
+ros2 run autoware_auto_msgs_adapter autoware_auto_msgs_adapter_exe --ros-args --params-file 'full_path_to_param_file'
+```
+
+Make sure to set the `param_path` argument to the full path of the parameter file.
+
+## Contributing
+
+### Current implementation details
+
+The entry point for the adapter executable is created with `RCLCPP_COMPONENTS_REGISTER_NODE` the [autoware_auto_msgs_adapter_core.cpp](src/Fautoware_auto_msgs_adapter_core.cpp).
+
+This allows it to be launched as a component or as a standalone node.
+
+In the `AutowareAutoMsgsAdapterNode` constructor, the adapter is selected by the type string provided in the
+configuration file. The adapter is then initialized with the topic names provided.
+
+The constructors of the adapters are responsible for creating the publisher and subscriber (which makes use of the conversion method).
+
+### Adding a new message pair
+
+To add a new message pair,
+
+- Replicate and edit:
+ - [adapter_control.hpp](include/autoware_auto_msgs_adapter/adapter_control.hpp).
+ - Add the new header file to the [CMakeLists.txt](CMakeLists.txt).
+- Add a new entry to the returned map instance in the `AutowareAutoMsgsAdapterNode::create_adapter_map()` method of the adapter node:
+ - [autoware_auto_msgs_adapter_core.cpp](src/autoware_auto_msgs_adapter_core.cpp)
+- Add a new entry to the [schema/autoware_auto_msgs_adapter.schema.json](schema/autoware_auto_msgs_adapter.schema.json) file in the `definitions:autoware_auto_msgs_adapter:properties:msg_type_target:enum` section.
+ - Learn more about JSON schema usage in [here](https://autowarefoundation.github.io/autoware-documentation/main/contributing/coding-guidelines/ros-nodes/parameters/#json-schema).
+- Create a new config file by replicating and editing:
+ - [adapter_control.param.yaml](config/adapter_control.param.yaml)
+- Add a new test file by replicating and editing:
+ - [test_msg_ackermann_control_command.cpp](test/test_msg_ackermann_control_command.cpp)
+ - No need to edit the `CMakeLists.txt` file as it will automatically detect the new test file.
+
+Also make sure to test the new adapter with:
+
+```bash
+colcon test --event-handlers console_cohesion+ --packages-select autoware_auto_msgs_adapter
+```
diff --git a/system/autoware_auto_msgs_adapter/config/adapter_control.param.yaml b/system/autoware_auto_msgs_adapter/config/adapter_control.param.yaml
new file mode 100644
index 0000000000000..4c6d5f101f380
--- /dev/null
+++ b/system/autoware_auto_msgs_adapter/config/adapter_control.param.yaml
@@ -0,0 +1,5 @@
+/**:
+ ros__parameters:
+ msg_type_target: "autoware_auto_control_msgs/msg/AckermannControlCommand"
+ topic_name_source: "/control/command/control_cmd"
+ topic_name_target: "/control/command/control_cmd_auto"
diff --git a/system/autoware_auto_msgs_adapter/launch/autoware_auto_msgs_adapter.launch.xml b/system/autoware_auto_msgs_adapter/launch/autoware_auto_msgs_adapter.launch.xml
new file mode 100755
index 0000000000000..89b58e2d60c28
--- /dev/null
+++ b/system/autoware_auto_msgs_adapter/launch/autoware_auto_msgs_adapter.launch.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/system/autoware_auto_msgs_adapter/package.xml b/system/autoware_auto_msgs_adapter/package.xml
new file mode 100644
index 0000000000000..54a8136f5f077
--- /dev/null
+++ b/system/autoware_auto_msgs_adapter/package.xml
@@ -0,0 +1,27 @@
+
+
+
+ autoware_auto_msgs_adapter
+ 1.0.0
+ Converts an autoware_msgs message to autoware_auto_msgs version and publishes it.
+ M. Fatih Cırıt
+ Apache License 2.0
+
+ ament_cmake_auto
+ autoware_cmake
+
+ rosidl_default_generators
+
+ ament_cmake_ros
+ ament_lint_auto
+ autoware_lint_common
+
+ autoware_auto_control_msgs
+ autoware_control_msgs
+ rclcpp
+ rclcpp_components
+
+
+ ament_cmake
+
+
diff --git a/system/autoware_auto_msgs_adapter/schema/autoware_auto_msgs_adapter.schema.json b/system/autoware_auto_msgs_adapter/schema/autoware_auto_msgs_adapter.schema.json
new file mode 100644
index 0000000000000..cf853ee1da130
--- /dev/null
+++ b/system/autoware_auto_msgs_adapter/schema/autoware_auto_msgs_adapter.schema.json
@@ -0,0 +1,41 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Parameters for autoware_auto_msg_adapter",
+ "type": "object",
+ "definitions": {
+ "autoware_auto_msgs_adapter": {
+ "type": "object",
+ "properties": {
+ "msg_type_target": {
+ "type": "string",
+ "description": "Target message type",
+ "enum": ["autoware_auto_control_msgs/msg/AckermannControlCommand"],
+ "default": "autoware_auto_control_msgs/msg/AckermannControlCommand"
+ },
+ "topic_name_source": {
+ "type": "string",
+ "description": "Topic name of the message to be converted.",
+ "default": "/control/command/control_cmd"
+ },
+ "topic_name_target": {
+ "type": "string",
+ "description": "Target topic name which the message will be converted into.",
+ "default": "/control/command/control_cmd_auto"
+ }
+ },
+ "required": ["msg_type_target", "topic_name_source", "topic_name_target"]
+ }
+ },
+ "properties": {
+ "/**": {
+ "type": "object",
+ "properties": {
+ "ros__parameters": {
+ "$ref": "#/definitions/autoware_auto_msgs_adapter"
+ }
+ },
+ "required": ["ros__parameters"]
+ }
+ },
+ "required": ["/**"]
+}
diff --git a/system/autoware_auto_msgs_adapter/src/autoware_auto_msgs_adapter_core.cpp b/system/autoware_auto_msgs_adapter/src/autoware_auto_msgs_adapter_core.cpp
new file mode 100644
index 0000000000000..98fe916903a60
--- /dev/null
+++ b/system/autoware_auto_msgs_adapter/src/autoware_auto_msgs_adapter_core.cpp
@@ -0,0 +1,84 @@
+// Copyright 2023 The Autoware Foundation
+//
+// 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.
+
+#include "include/autoware_auto_msgs_adapter_core.hpp"
+
+#include "include/adapter_control.hpp"
+
+#include
+
+#include