Sfoglia il codice sorgente

Update PhysX5 references for robots related files (#665)

* Update PhysX5 references for robots related files
* Update repo.json
  - Updated gems and template versioning info
  - Minor fixes
* Update dependencies to updated versions of gems
* Fix unnnecessary target with empty files (WarehouseAutomation.Editor.Private.Object) causing the following error:
  - CMake can not determine linker language for target: WarehouseAutomation.Editor.Private.Object
* Disable test target for the arehouse editor since there are no tests defined
* Removed 'enabled_gems.cmake'
  - Removed file from the ROS related templates and updated its EngineFinder.cmake accordingly
  - Moved dependencies to the template's project.json

Signed-off-by: Steve Pham <[email protected]>
Steve Pham 1 anno fa
parent
commit
2f9a8a71fa
34 ha cambiato i file con 2786 aggiunte e 301 eliminazioni
  1. 6 6
      Gems/ProteusRobot/gem.json
  2. 3 3
      Gems/ROS2/Code/CMakeLists.txt
  3. 5 6
      Gems/ROS2/gem.json
  4. 6 6
      Gems/RosRobotSample/gem.json
  5. 6 26
      Gems/WarehouseAutomation/Code/CMakeLists.txt
  6. 2 1
      Gems/WarehouseAutomation/Code/Platform/Linux/PAL_linux.cmake
  7. 0 6
      Gems/WarehouseAutomation/Code/warehouseautomation_editor_private_files.cmake
  8. 9 9
      Gems/WarehouseAutomation/gem.json
  9. 0 1
      Templates/Ros2FleetRobotTemplate/Template/Gem/${Name}_files.cmake
  10. 0 3
      Templates/Ros2FleetRobotTemplate/Template/Gem/CMakeLists.txt
  11. 0 35
      Templates/Ros2FleetRobotTemplate/Template/Gem/enabled_gems.cmake
  12. 1 1
      Templates/Ros2FleetRobotTemplate/Template/Registry/physxdebugconfiguration.setreg
  13. 1 1
      Templates/Ros2FleetRobotTemplate/Template/Registry/physxdefaultsceneconfiguration.setreg
  14. 1 1
      Templates/Ros2FleetRobotTemplate/Template/Registry/physxsystemconfiguration.setreg
  15. 4 0
      Templates/Ros2FleetRobotTemplate/Template/cmake/EngineFinder.cmake
  16. 20 3
      Templates/Ros2FleetRobotTemplate/Template/project.json
  17. 2 7
      Templates/Ros2FleetRobotTemplate/template.json
  18. 0 1
      Templates/Ros2ProjectTemplate/Template/Gem/${NameLower}_files.cmake
  19. 0 7
      Templates/Ros2ProjectTemplate/Template/Gem/CMakeLists.txt
  20. 0 36
      Templates/Ros2ProjectTemplate/Template/Gem/enabled_gems.cmake
  21. 1 1
      Templates/Ros2ProjectTemplate/Template/Registry/physxsystemconfiguration.setreg
  22. 126 44
      Templates/Ros2ProjectTemplate/Template/cmake/EngineFinder.cmake
  23. 24 3
      Templates/Ros2ProjectTemplate/Template/project.json
  24. 2 7
      Templates/Ros2ProjectTemplate/template.json
  25. 0 1
      Templates/Ros2RoboticManipulationTemplate/Template/Gem/${Name}_files.cmake
  26. 0 3
      Templates/Ros2RoboticManipulationTemplate/Template/Gem/CMakeLists.txt
  27. 0 26
      Templates/Ros2RoboticManipulationTemplate/Template/Gem/enabled_gems.cmake
  28. 1 1
      Templates/Ros2RoboticManipulationTemplate/Template/Registry/physxdebugconfiguration.setreg
  29. 1 1
      Templates/Ros2RoboticManipulationTemplate/Template/Registry/physxdefaultsceneconfiguration.setreg
  30. 1 1
      Templates/Ros2RoboticManipulationTemplate/Template/Registry/physxsystemconfiguration.setreg
  31. 135 44
      Templates/Ros2RoboticManipulationTemplate/Template/cmake/EngineFinder.cmake
  32. 21 3
      Templates/Ros2RoboticManipulationTemplate/Template/project.json
  33. 5 6
      Templates/Ros2RoboticManipulationTemplate/template.json
  34. 2403 1
      repo.json

+ 6 - 6
Gems/ProteusRobot/gem.json

@@ -1,6 +1,6 @@
 {
     "gem_name": "ProteusRobot",
-    "version": "1.0.0",
+    "version": "1.1.0",
     "display_name": "Proteus Robot",
     "license": "Apache-2.0 or MIT",
     "license_url": "https://opensource.org/licenses/Apache-2.0",
@@ -21,14 +21,14 @@
     "requirements": "Requires ROS 2 Gem",
     "documentation_url": "https://www.o3de.org/docs/user-guide/interactivity/robotics/project-configuration/#ros-2-project-templates",
     "dependencies": [
-        "ROS2==3.0.0"
+        "ROS2>=3.1.0"
     ],
     "repo_uri": "https://raw.githubusercontent.com/o3de/o3de-extras/development",
     "compatible_engines": [
-        "o3de-sdk>=1.2.0",
-        "o3de>=1.2.0"
+        "o3de-sdk>=4.1.0",
+        "o3de>=4.1.0"
     ],
     "engine_api_dependencies": [],
     "restricted": "ProteusRobot",
-    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/proteusrobot-1.0.0-gem.zip"
-}
+    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/proteusrobot-1.1.0-gem.zip"
+}

+ 3 - 3
Gems/ROS2/Code/CMakeLists.txt

@@ -65,7 +65,7 @@ ly_add_target(
             Gem::Atom_Feature_Common.Static
             Gem::Atom_Component_DebugCamera.Static
             Gem::StartingPointInput
-            Gem::PhysX.Static
+            Gem::PhysX5.Static
             Gem::LmbrCentral.API
 )
 
@@ -132,7 +132,7 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AzToolsFramework
                 Gem::CommonFeaturesAtom.Editor.Static
                 Gem::LmbrCentral.API
-                Gem::PhysX.Editor.Static
+                Gem::PhysX5.Editor.Static
                 Gem::${gem_name}.Static
             PRIVATE
                 AZ::AssetBuilderSDK
@@ -214,7 +214,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
                     AZ::AzManipulatorTestFramework.Static
                     Gem::ROS2.Static
                 RUNTIME_DEPENDENCIES
-                    Gem::PhysX.Editor
+                    Gem::PhysX5.Editor
         )
 
         ly_add_googletest(

+ 5 - 6
Gems/ROS2/gem.json

@@ -1,6 +1,6 @@
 {
     "gem_name": "ROS2",
-    "version": "3.0.0",
+    "version": "3.1.0",
     "platforms": [
         "Linux"
     ],
@@ -18,8 +18,8 @@
         "ROS2"
     ],
     "compatible_engines": [
-        "o3de-sdk>=3.1.0",
-        "o3de>=3.1.0"
+        "o3de-sdk>=4.1.0",
+        "o3de>=4.1.0"
     ],
     "icon_path": "preview.png",
     "requirements": "Requires ROS 2 installation (supported distributions: Humble). Source your workspace before building the Gem",
@@ -29,12 +29,11 @@
         "Atom_Feature_Common",
         "Atom_Component_DebugCamera",
         "CommonFeaturesAtom",
-        "PhysX",
+        "PhysX5",
         "PrimitiveAssets",
         "StartingPointInput"
-
     ],
     "restricted": "ROS2",
     "repo_uri": "https://raw.githubusercontent.com/o3de/o3de-extras/development",
-    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2-2.0.0-gem.zip"
+    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2-3.1.0-gem.zip"
 }

+ 6 - 6
Gems/RosRobotSample/gem.json

@@ -1,5 +1,6 @@
 {
     "gem_name": "RosRobotSample",
+    "version": "1.1.0",
     "display_name": "ROS Robot Sample",
     "license": "Apache-2.0 or MIT",
     "license_url": "https://opensource.org/licenses/Apache-2.0",
@@ -20,14 +21,13 @@
     "requirements": "Requires ROS 2 Gem",
     "documentation_url": "",
     "dependencies": [
-        "ROS2==3.0.0"
+        "ROS2>=3.1.0"
     ],
     "compatible_engines": [
-        "o3de-sdk>=1.2.0",
-        "o3de>=1.2.0"
+        "o3de-sdk>=4.1.0",
+        "o3de>=4.1.0"
     ],
     "repo_uri": "https://raw.githubusercontent.com/o3de/o3de-extras/development",
     "restricted": "",
-    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/rosrobotsample-1.0.0-gem.zip",
-    "version": "1.0.0"
-}
+    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/rosrobotsample-1.1.0-gem.zip"
+}

+ 6 - 26
Gems/WarehouseAutomation/Code/CMakeLists.txt

@@ -55,7 +55,7 @@ ly_add_target(
             AZ::AzCore
             AZ::AzFramework
             Gem::CommonFeaturesAtom.Static
-            Gem::PhysX.Static
+            Gem::PhysX5.Static
 )
 
 # Here add ${gem_name} target, it depends on the Private Object library and Public API interface
@@ -110,27 +110,6 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AzToolsFramework
     )
 
-    # The ${gem_name}.Editor.Private.Object target is an internal target
-    # which is only to be used by this gems CMakeLists.txt and any subdirectories
-    # Other gems should not use this target
-    ly_add_target(
-        NAME ${gem_name}.Editor.Private.Object STATIC
-        NAMESPACE Gem
-        FILES_CMAKE
-            warehouseautomation_editor_private_files.cmake
-        TARGET_PROPERTIES
-            O3DE_PRIVATE_TARGET TRUE
-        INCLUDE_DIRECTORIES
-            PRIVATE
-                Include
-                Source
-        BUILD_DEPENDENCIES
-            PUBLIC
-                AZ::AzToolsFramework
-                Gem::PhysX.Editor.Static
-                $<TARGET_OBJECTS:Gem::${gem_name}.Private.Object>
-    )
-
     ly_add_target(
         NAME ${gem_name}.Editor GEM_MODULE
         NAMESPACE Gem
@@ -146,7 +125,8 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
             PUBLIC
                 Gem::${gem_name}.Editor.API
             PRIVATE
-                Gem::${gem_name}.Editor.Private.Object
+                AZ::AzToolsFramework
+                ${gem_name}.Private.Object
     )
 
     # By default, we will specify that the above target ${gem_name} would be used by
@@ -199,8 +179,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
     if(PAL_TRAIT_BUILD_HOST_TOOLS)
         # We are a host platform, see if Editor tests are supported on this platform
         if(PAL_TRAIT_WAREHOUSEAUTOMATION_EDITOR_TEST_SUPPORTED)
-            # We support ${gem_name}.Editor.Tests on this platform, add ${gem_name}.Editor.Tests target which depends on
-            # private ${gem_name}.Editor.Private.Object target
+            # We support ${gem_name}.Editor.Tests on this platform
             ly_add_target(
                 NAME ${gem_name}.Editor.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
                 NAMESPACE Gem
@@ -214,7 +193,8 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
                 BUILD_DEPENDENCIES
                     PRIVATE
                         AZ::AzTest
-                        Gem::${gem_name}.Editor.Private.Object
+                        AZ::AzToolsFramework
+                        Gem::PhysX5.Editor.Static
             )
 
             # Add ${gem_name}.Editor.Tests to googletest

+ 2 - 1
Gems/WarehouseAutomation/Code/Platform/Linux/PAL_linux.cmake

@@ -4,4 +4,5 @@
 # SPDX-License-Identifier: Apache-2.0 OR MIT
 set(PAL_TRAIT_WAREHOUSEAUTOMATION_SUPPORTED TRUE)
 set(PAL_TRAIT_WAREHOUSEAUTOMATION_TEST_SUPPORTED TRUE)
-set(PAL_TRAIT_WAREHOUSEAUTOMATION_EDITOR_TEST_SUPPORTED TRUE)
+# Currently there are no tests defined for this project. Once tests are added, set the following trait to TRUE
+set(PAL_TRAIT_WAREHOUSEAUTOMATION_EDITOR_TEST_SUPPORTED FALSE)

+ 0 - 6
Gems/WarehouseAutomation/Code/warehouseautomation_editor_private_files.cmake

@@ -1,6 +0,0 @@
-# Copyright (c) Contributors to the Open 3D Engine Project.
-# For complete copyright and license terms please see the LICENSE at the root of this distribution.
-#
-# SPDX-License-Identifier: Apache-2.0 OR MIT
-set(FILES
-)

+ 9 - 9
Gems/WarehouseAutomation/gem.json

@@ -1,6 +1,6 @@
 {
-    "version": "1.0.0",
     "gem_name": "WarehouseAutomation",
+    "version": "1.1.0",
     "display_name": "Warehouse Automation",
     "license": "Apache-2.0",
     "license_url": "https://opensource.org/licenses/Apache-2.0",
@@ -15,18 +15,18 @@
         "WarehouseAutomation"
     ],
     "compatible_engines": [
-        "o3de-sdk>=1.2.0",
-        "o3de>=1.2.0"
+        "o3de-sdk>=4.1.0",
+        "o3de>=4.1.0"
     ],
     "platforms": [
         "Linux"
     ],
     "icon_path": "preview.png",
-    "requirements": "This gem requires ROS 2 gem and PhysX gem.",
+    "requirements": "This gem requires ROS 2 gem and PhysX5 gem.",
     "dependencies": [
-        "ROS2==3.0.0",
-        "PhysX"
+        "ROS2>=3.1.0"
     ],
-    "repo_uri": "https://github.com/o3de/o3de-extras",
-    "restricted": "WarehouseAutomation"
-}
+    "repo_uri": "https://raw.githubusercontent.com/o3de/o3de-extras/development",
+    "restricted": "WarehouseAutomation",
+    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/warehouseautomation-1.1.0-gem.zip"
+}

+ 0 - 1
Templates/Ros2FleetRobotTemplate/Template/Gem/${Name}_files.cmake

@@ -14,5 +14,4 @@ set(FILES
     Include/${Name}/${Name}Bus.h
     Source/${Name}SystemComponent.cpp
     Source/${Name}SystemComponent.h
-    enabled_gems.cmake
 )

+ 0 - 3
Templates/Ros2FleetRobotTemplate/Template/Gem/CMakeLists.txt

@@ -98,6 +98,3 @@ o3de_find_ancestor_project_root(project_path project_name "${CMAKE_CURRENT_SOURC
 if (NOT project_name)
     set(project_name ${Name})
 endif()
-
-# Enable the specified list of gems from GEM_FILE or GEMS list for this specific project:
-ly_enable_gems(PROJECT_NAME ${project_name} GEM_FILE enabled_gems.cmake)

+ 0 - 35
Templates/Ros2FleetRobotTemplate/Template/Gem/enabled_gems.cmake

@@ -1,35 +0,0 @@
-# {BEGIN_LICENSE}
-#
-# Copyright (c) Contributors to the Open 3D Engine Project.
-# For complete copyright and license terms please see the LICENSE at the root of this distribution.
-#
-# SPDX-License-Identifier: Apache-2.0 OR MIT
-#
-#
-# {END_LICENSE}
-# This file is copied during engine registration. Edits to this file will be lost next
-# time a registration happens.
-
-set(ENABLED_GEMS
-    ${Name}
-    Atom
-    CameraFramework
-    DebugDraw
-    EditorPythonBindings
-    EMotionFX
-    ImGui
-    LyShine
-    PhysX
-    PrimitiveAssets
-    PrefabBuilder
-    ScriptCanvasPhysics
-    ScriptEvents
-    StartingPointInput
-    TextureAtlas
-    WhiteBox
-    DiffuseProbeGrid
-    Compression
-    ProteusRobot
-    WarehouseAssets
-    ROS2
-)

+ 1 - 1
Templates/Ros2FleetRobotTemplate/Template/Registry/physxdebugconfiguration.setreg

@@ -1,7 +1,7 @@
 {
     "Amazon": {
         "Gems": {
-            "PhysX": {
+            "PhysX5": {
                 "Debug": {
                     "PhysXDebugConfiguration": {}
                 }

+ 1 - 1
Templates/Ros2FleetRobotTemplate/Template/Registry/physxdefaultsceneconfiguration.setreg

@@ -1,7 +1,7 @@
 {
     "Amazon": {
         "Gems": {
-            "PhysX": {
+            "PhysX5": {
                 "DefaultSceneConfiguration": {}
             }
         }

+ 1 - 1
Templates/Ros2FleetRobotTemplate/Template/Registry/physxsystemconfiguration.setreg

@@ -1,7 +1,7 @@
 {
     "Amazon": {
         "Gems": {
-            "PhysX": {
+            "PhysX5": {
                 "PhysXSystemConfiguration": {
                     "CollisionConfig": {
                         "Layers": {

+ 4 - 0
Templates/Ros2FleetRobotTemplate/Template/cmake/EngineFinder.cmake

@@ -139,6 +139,10 @@ endforeach()
 
 if(O3DE_MOST_COMPATIBLE_ENGINE_PATH)
     message(STATUS "Selecting engine '${O3DE_MOST_COMPATIBLE_ENGINE_PATH}'")
+    # Make sure PACKAGE_VERSION_COMPATIBLE is set so Findo3de.cmake knows
+    # compatibility was checked
+    set(PACKAGE_VERSION_COMPATIBLE True)
+    set(PACKAGE_VERSION O3DE_MOST_COMPATIBLE_ENGINE_VERSION)
     list(APPEND CMAKE_MODULE_PATH "${O3DE_MOST_COMPATIBLE_ENGINE_PATH}/cmake")
     return()
 endif()

+ 20 - 3
Templates/Ros2FleetRobotTemplate/Template/project.json

@@ -20,8 +20,25 @@
     "restricted": "${Name}",
     "engine_version": "1.0.0",
     "gem_names": [
-        "ProteusRobot",
-        "WarehouseAssets",
-        "ROS2"
+        "Atom",
+        "CameraFramework",
+        "Compression",
+        "DebugDraw",
+        "DiffuseProbeGrid",
+        "EditorPythonBindings",
+        "EMotionFX",
+        "ImGui",
+        "LyShine",
+        "PhysX5",
+        "PrimitiveAssets",
+        "PrefabBuilder",
+        "ProteusRobot>=1.1.0",
+        "ROS2>=3.1.0",
+        "ScriptCanvasPhysics",
+        "ScriptEvents",
+        "StartingPointInput",
+        "TextureAtlas",
+        "WhiteBox",
+        "WarehouseAssets"
     ]
 }

+ 2 - 7
Templates/Ros2FleetRobotTemplate/template.json

@@ -1,6 +1,6 @@
 {
     "template_name": "Ros2FleetRobotTemplate",
-    "version": "1.1.0",
+    "version": "1.2.0",
     "origin": "Open 3D Engine Extras",
     "origin_url": "https://github.com/o3de/o3de-extras",
     "repo_uri": "https://raw.githubusercontent.com/o3de/o3de-extras/development",
@@ -95,10 +95,6 @@
             "file": "Gem/Source/${Name}SystemComponent.h",
             "isTemplated": true
         },
-        {
-            "file": "Gem/enabled_gems.cmake",
-            "isTemplated": true
-        },
         {
             "file": "Gem/gem.json",
             "isTemplated": true
@@ -355,7 +351,6 @@
             "file": "Examples/ros2_ws/src/o3de_fleet_nav/rviz/nav2_namespaced_view.rviz",
             "isTemplated": false
         }
-        
     ],
     "createDirectories": [
         {
@@ -494,5 +489,5 @@
             "dir": "Examples/ros2_ws/src/o3de_fleet_nav/test"
         }
     ],
-    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2fleetrobottemplate-1.1.0-template.zip"
+    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2fleetrobottemplate-1.2.0-template.zip"
 }

+ 0 - 1
Templates/Ros2ProjectTemplate/Template/Gem/${NameLower}_files.cmake

@@ -12,5 +12,4 @@ set(FILES
     Source/${Name}SystemComponent.h
     Source/${Name}SampleComponent.cpp
     Source/${Name}SampleComponent.h
-    enabled_gems.cmake
 )

+ 0 - 7
Templates/Ros2ProjectTemplate/Template/Gem/CMakeLists.txt

@@ -136,10 +136,3 @@ endif()
 # if enabled, ${gem_name} is used by all kinds of applications
 ly_create_alias(NAME ${gem_name}.Clients  NAMESPACE Gem TARGETS Gem::${gem_name})
 ly_create_alias(NAME ${gem_name}.Servers  NAMESPACE Gem TARGETS Gem::${gem_name})
-
-################################################################################
-# Gem dependencies
-################################################################################
-
-# Enable the specified list of gems from GEM_FILE or GEMS list for this specific project:
-ly_enable_gems(PROJECT_NAME ${Name} GEM_FILE enabled_gems.cmake)

+ 0 - 36
Templates/Ros2ProjectTemplate/Template/Gem/enabled_gems.cmake

@@ -1,36 +0,0 @@
-# {BEGIN_LICENSE}
-# Copyright (c) Contributors to the Open 3D Engine Project.
-# For complete copyright and license terms please see the LICENSE at the root of this distribution.
-#
-# SPDX-License-Identifier: Apache-2.0 OR MIT
-#
-# {END_LICENSE}
-
-set(ENABLED_GEMS
-    ${Name}
-    Atom
-    AudioSystem
-    CameraFramework
-    DebugDraw
-    EditorPythonBindings
-    EMotionFX
-    GameState
-    ImGui
-    LandscapeCanvas
-    LyShine
-    PhysX
-    PrimitiveAssets
-    PrefabBuilder
-    SaveData
-    ScriptCanvasPhysics
-    ScriptEvents
-    StartingPointInput
-    TextureAtlas
-    WhiteBox
-    DiffuseProbeGrid
-    Compression
-    WarehouseSample
-    RosRobotSample
-    ROS2
-    ImGui
-)

+ 1 - 1
Templates/Ros2ProjectTemplate/Template/Registry/physxsystemconfiguration.setreg

@@ -1,7 +1,7 @@
 {
     "Amazon": {
         "Gems": {
-            "PhysX": {
+            "PhysX5": {
                 "PhysXSystemConfiguration": {
                     "FixedTimeStep": 0.004999999888241291,
                     "CollisionConfig": {

+ 126 - 44
Templates/Ros2ProjectTemplate/Template/cmake/EngineFinder.cmake

@@ -7,35 +7,62 @@
 #
 #
 # {END_LICENSE}
-# This file is copied during engine registration. Edits to this file will be lost next
-# time a registration happens.
+# Edits to this file may be lost in upgrades. Instead of changing this file, use 
+# the 'engine_finder_cmake_path' key in your project.json or user/project.json to specify 
+# an alternate .cmake file to use instead of this one.
 
 include_guard()
 
-# Read the engine name from the project_json file
-file(READ ${CMAKE_CURRENT_SOURCE_DIR}/project.json project_json)
 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/project.json)
 
-string(JSON LY_ENGINE_NAME_TO_USE ERROR_VARIABLE json_error GET ${project_json} engine)
-if(json_error)
-    message(FATAL_ERROR "Unable to read key 'engine' from 'project.json'\nError: ${json_error}")
-endif()
-
+# Option 1: Use engine manually set in CMAKE_MODULE_PATH
+# CMAKE_MODULE_PATH must contain a path to an engine's cmake folder 
 if(CMAKE_MODULE_PATH)
     foreach(module_path ${CMAKE_MODULE_PATH})
-        if(EXISTS ${module_path}/Findo3de.cmake)
-            file(READ ${module_path}/../engine.json engine_json)
-            string(JSON engine_name ERROR_VARIABLE json_error GET ${engine_json} engine_name)
-            if(json_error)
-                message(FATAL_ERROR "Unable to read key 'engine_name' from 'engine.json'\nError: ${json_error}")
-            endif()
-            if(LY_ENGINE_NAME_TO_USE STREQUAL engine_name)
-                return() # Engine being forced through CMAKE_MODULE_PATH
+        cmake_path(SET module_engine_version_cmake_path "${module_path}/o3deConfigVersion.cmake")
+        if(EXISTS "${module_engine_version_cmake_path}")
+            include("${module_engine_version_cmake_path}")
+            if(PACKAGE_VERSION_COMPATIBLE)
+                message(STATUS "Selecting engine from CMAKE_MODULE_PATH '${module_path}'")
+                return()
+            else()
+                message(WARNING "Not using engine from CMAKE_MODULE_PATH '${module_path}' because it is not compatible with this project.")
             endif()
         endif()
     endforeach()
+    message(VERBOSE "No compatible engine found from CMAKE_MODULE_PATH '${CMAKE_MODULE_PATH}'.")
+endif()
+
+# Option 2: Use the engine from the 'engine_path' field in <project>/user/project.json
+cmake_path(SET O3DE_USER_PROJECT_JSON_PATH ${CMAKE_CURRENT_SOURCE_DIR}/user/project.json)
+if(EXISTS "${O3DE_USER_PROJECT_JSON_PATH}")
+    file(READ "${O3DE_USER_PROJECT_JSON_PATH}" user_project_json)
+    if(user_project_json)
+        string(JSON user_project_engine_path ERROR_VARIABLE json_error GET ${user_project_json} engine_path)
+        if(user_project_engine_path AND NOT json_error)
+            cmake_path(SET user_engine_version_cmake_path "${user_project_engine_path}/cmake/o3deConfigVersion.cmake")
+            if(EXISTS "${user_engine_version_cmake_path}")
+                include("${user_engine_version_cmake_path}")
+                if(PACKAGE_VERSION_COMPATIBLE)
+                    message(STATUS "Selecting engine '${user_project_engine_path}' from 'engine_path' in '<project>/user/project.json'.")
+                    list(APPEND CMAKE_MODULE_PATH "${user_project_engine_path}/cmake")
+                    return()
+                else()
+                    message(FATAL_ERROR "The engine at '${user_project_engine_path}' from 'engine_path' in '${O3DE_USER_PROJECT_JSON_PATH}' is not compatible with this project. Please register this project with a compatible engine, or remove the local override by running:\nscripts\\o3de edit-project-properties -pp ${CMAKE_CURRENT_SOURCE_DIR} --user --engine-path \"\"")
+                endif()
+            else()
+                message(FATAL_ERROR "This project cannot use the engine at '${user_project_engine_path}' because the version cmake file '${user_engine_version_cmake_path}' needed to check compatibility is missing.  \nPlease register this project with a compatible engine, or remove the local override by running:\nscripts\\o3de edit-project-properties -pp ${CMAKE_CURRENT_SOURCE_DIR} --user --engine-path \"\"\nIf you want this project to use an older engine(not recommended), provide a custom EngineFinder.cmake using the o3de CLI's --engine-finder-cmake-path option. ")
+            endif()
+        elseif(json_error AND ${user_project_engine_path} STREQUAL "NOTFOUND")
+            # When the value is just NOTFOUND that means there is a JSON
+            # parsing error, and not simply a missing key 
+            message(FATAL_ERROR "Unable to read 'engine_path' from '${user_project_engine_path}'\nError: ${json-error}")
+        endif()
+    endif()
 endif()
 
+
+# Option 3: Find a compatible engine registered in ~/.o3de/o3de_manifest.json 
 if(DEFINED ENV{USERPROFILE} AND EXISTS $ENV{USERPROFILE})
     set(manifest_path $ENV{USERPROFILE}/.o3de/o3de_manifest.json) # Windows
 else()
@@ -43,50 +70,105 @@ else()
 endif()
 
 set(registration_error [=[
+To enable more verbose logging, run the cmake command again with '--log-level VERBOSE'
 Engine registration is required before configuring a project.
 Run 'scripts/o3de register --this-engine' from the engine root.
 ]=])
 
-# Read the ~/.o3de/o3de_manifest.json file and look through the 'engines_path' object.
-# Find a key that matches LY_ENGINE_NAME_TO_USE and use that as the engine path.
+# Create a list of all engines
 if(EXISTS ${manifest_path})
     file(READ ${manifest_path} manifest_json)
     set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${manifest_path})
 
-    string(JSON engines_path_count ERROR_VARIABLE json_error LENGTH ${manifest_json} engines_path)
+    string(JSON engines_count ERROR_VARIABLE json_error LENGTH ${manifest_json} engines)
     if(json_error)
-        message(FATAL_ERROR "Unable to read key 'engines_path' from '${manifest_path}'\nError: ${json_error}\n${registration_error}")
+        message(FATAL_ERROR "Unable to read key 'engines' from '${manifest_path}'\nError: ${json_error}\n${registration_error}")
     endif()
 
-    string(JSON engines_path_type ERROR_VARIABLE json_error TYPE ${manifest_json} engines_path)
-    if(json_error OR NOT ${engines_path_type} STREQUAL "OBJECT")
-        message(FATAL_ERROR "Type of 'engines_path' in '${manifest_path}' is not a JSON Object\nError: ${json_error}")
+    string(JSON engines_type ERROR_VARIABLE json_error TYPE ${manifest_json} engines)
+    if(json_error OR NOT ${engines_type} STREQUAL "ARRAY")
+        message(FATAL_ERROR "Type of 'engines' in '${manifest_path}' is not a JSON ARRAY\nError: ${json_error}\n${registration_error}")
     endif()
 
-    math(EXPR engines_path_count "${engines_path_count}-1")
-    foreach(engine_path_index RANGE ${engines_path_count})
-        string(JSON engine_name ERROR_VARIABLE json_error MEMBER ${manifest_json} engines_path ${engine_path_index})
+    math(EXPR engines_count "${engines_count}-1")
+    foreach(array_index RANGE ${engines_count})
+        string(JSON manifest_engine_path ERROR_VARIABLE json_error GET ${manifest_json} engines "${array_index}")
         if(json_error)
-            message(FATAL_ERROR "Unable to read 'engines_path/${engine_path_index}' from '${manifest_path}'\nError: ${json_error}")
+            message(FATAL_ERROR "Unable to read 'engines/${array_index}' from '${manifest_path}'\nError: ${json_error}\n${registration_error}")
         endif()
+        list(APPEND O3DE_ENGINE_PATHS ${manifest_engine_path})
+    endforeach()
+elseif(NOT CMAKE_MODULE_PATH)
+    message(FATAL_ERROR "O3DE Manifest file not found at '${manifest_path}'.\n${registration_error}")
+endif()
 
-        if(LY_ENGINE_NAME_TO_USE STREQUAL engine_name)
-            string(JSON engine_path ERROR_VARIABLE json_error GET ${manifest_json} engines_path ${engine_name})
-            if(json_error)
-                message(FATAL_ERROR "Unable to read value from 'engines_path/${engine_name}'\nError: ${json_error}")
-            endif()
+# We cannot just run find_package() on the list of engine paths because
+# CMAKE_FIND_PACKAGE_SORT_ORDER sorts based on file name and chooses
+# the first package that returns PACKAGE_VERSION_COMPATIBLE 
+set(O3DE_MOST_COMPATIBLE_ENGINE_PATH "")
+set(O3DE_MOST_COMPATIBLE_ENGINE_VERSION "")
+foreach(manifest_engine_path IN LISTS O3DE_ENGINE_PATHS) 
+    # Does this engine have a config version cmake file?
+    cmake_path(SET version_cmake_path "${manifest_engine_path}/cmake/o3deConfigVersion.cmake")
+    if(NOT EXISTS "${version_cmake_path}") 
+        message(VERBOSE "Ignoring '${manifest_engine_path}' because no config version cmake file was found at '${version_cmake_path}'")
+        continue()
+    endif()
 
-            if(engine_path)
-                list(APPEND CMAKE_MODULE_PATH "${engine_path}/cmake")
-                return()
-            endif()
+    unset(PACKAGE_VERSION)
+    unset(PACKAGE_VERSION_COMPATIBLE)
+    include("${version_cmake_path}")
+
+    # Follow the version checking convention from find_package(CONFIG)
+    if(PACKAGE_VERSION_COMPATIBLE)
+        if(NOT O3DE_MOST_COMPATIBLE_ENGINE_PATH) 
+            set(O3DE_MOST_COMPATIBLE_ENGINE_PATH "${manifest_engine_path}") 
+            set(O3DE_MOST_COMPATIBLE_ENGINE_VERSION ${PACKAGE_VERSION}) 
+            message(VERBOSE "Found compatible engine '${manifest_engine_path}' with version '${PACKAGE_VERSION}'")
+        elseif(${PACKAGE_VERSION} VERSION_GREATER ${O3DE_MOST_COMPATIBLE_ENGINE_VERSION})
+            set(O3DE_MOST_COMPATIBLE_ENGINE_PATH "${manifest_engine_path}")
+            set(O3DE_MOST_COMPATIBLE_ENGINE_VERSION ${PACKAGE_VERSION})
+            message(VERBOSE "Found more compatible engine '${manifest_engine_path}' with version '${PACKAGE_VERSION}' because it has a greater version number.")
+        else()
+            message(VERBOSE "Not using engine '${manifest_engine_path}' with version '${PACKAGE_VERSION}' because it doesn't have a greater version number or has a different engine name.")
         endif()
-    endforeach()
-    
-    message(FATAL_ERROR "The project.json uses engine name '${LY_ENGINE_NAME_TO_USE}' but no engine with that name has been registered.\n${registration_error}")
-else()
-    # If the user is passing CMAKE_MODULE_PATH we assume thats where we will find the engine
-    if(NOT CMAKE_MODULE_PATH)
-        message(FATAL_ERROR "O3DE Manifest file not found.\n${registration_error}")
+    else()
+        message(VERBOSE "Ignoring '${manifest_engine_path}' because it is not a compatible engine.")
+    endif()
+endforeach()
+
+if(O3DE_MOST_COMPATIBLE_ENGINE_PATH)
+    message(STATUS "Selecting engine '${O3DE_MOST_COMPATIBLE_ENGINE_PATH}'")
+    # Make sure PACKAGE_VERSION_COMPATIBLE is set so Findo3de.cmake knows
+    # compatibility was checked
+    set(PACKAGE_VERSION_COMPATIBLE True)
+    set(PACKAGE_VERSION O3DE_MOST_COMPATIBLE_ENGINE_VERSION)
+    list(APPEND CMAKE_MODULE_PATH "${O3DE_MOST_COMPATIBLE_ENGINE_PATH}/cmake")
+    return()
+endif()
+
+# No compatible engine was found.
+# Read the 'engine' field in project.json or user/project.json for more helpful messages 
+if(user_project_json)
+    string(JSON user_project_engine ERROR_VARIABLE json_error GET ${user_project_json} engine)
+endif()
+
+if(NOT user_project_engine)
+    file(READ ${CMAKE_CURRENT_SOURCE_DIR}/project.json o3de_project_json)
+    string(JSON project_engine ERROR_VARIABLE json_error GET ${o3de_project_json} engine)
+    if(json_error AND ${project_engine} STREQUAL "NOTFOUND")
+        message(FATAL_ERROR "Unable to read key 'engine' from 'project.json'\nError: ${json_error}")
     endif()
 endif()
+
+if(user_project_engine)
+    message(FATAL_ERROR "The local '${O3DE_USER_PROJECT_JSON_PATH}' engine is '${user_project_engine}' but no compatible engine with that name and version was found.  Please register the compatible engine, or remove the local engine override.\n${registration_error}")
+elseif(project_engine)
+    message(FATAL_ERROR "The project.json engine is '${project_engine}' but no engine with that name and version was found.\n${registration_error}")
+else()
+    set(project_registration_error [=[
+    Project registration is required before configuring a project.
+    Run 'scripts/o3de register -pp PROJECT_PATH --engine-path ENGINE_PATH' from the engine root.
+    ]=])
+    message(FATAL_ERROR "${project_registration_error}")
+endif()

+ 24 - 3
Templates/Ros2ProjectTemplate/Template/project.json

@@ -18,8 +18,29 @@
     ],
     "restricted": "${Name}",
     "gem_names": [
-        "ROS2",
-        "WarehouseSample",
-        "RosRobotSample"
+        "Atom",
+        "AudioSystem",
+        "CameraFramework",
+        "Compression",
+        "DebugDraw",
+        "DiffuseProbeGrid",
+        "EditorPythonBindings",
+        "EMotionFX",
+        "GameState",
+        "ImGui",
+        "LandscapeCanvas",
+        "LyShine",
+        "PhysX5",
+        "PrimitiveAssets",
+        "PrefabBuilder",
+        "ROS2>=3.1.0",
+        "RosRobotSample>=1.1.0",
+        "SaveData",
+        "ScriptCanvasPhysics",
+        "ScriptEvents",
+        "StartingPointInput",
+        "TextureAtlas",
+        "WhiteBox",
+        "WarehouseSample"
     ]    
 }

+ 2 - 7
Templates/Ros2ProjectTemplate/template.json

@@ -1,6 +1,6 @@
 {
     "template_name": "Ros2ProjectTemplate",
-    "version": "1.0.0",
+    "version": "1.1.0",
     "origin": "Open 3D Engine Extras",
     "origin_url": "https://github.com/o3de/o3de-extras",
     "license": "https://github.com/o3de/o3de-extras/tree/development/Templates/Ros2ProjectTemplate/Template/LICENSE.txt",
@@ -58,7 +58,6 @@
             "file": "Gem/${NameLower}_editor_shared_files.cmake",
             "isTemplated": true
         },
-        
         {
             "file": "Gem/CMakeLists.txt",
             "isTemplated": true
@@ -167,10 +166,6 @@
             "file": "Gem/Source/${Name}SampleComponent.h",
             "isTemplated": true
         },
-        {
-            "file": "Gem/enabled_gems.cmake",
-            "isTemplated": true
-        },
         {
             "file": "Gem/gem.json",
             "isTemplated": true
@@ -558,5 +553,5 @@
         }
     ],
     "repo_uri": "https://raw.githubusercontent.com/o3de/o3de-extras/development",
-    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2projecttemplate-1.0.0-template.zip"
+    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2projecttemplate-1.1.0-template.zip"
 }

+ 0 - 1
Templates/Ros2RoboticManipulationTemplate/Template/Gem/${Name}_files.cmake

@@ -5,5 +5,4 @@ set(FILES
     Include/${Name}/${Name}Bus.h
     Source/${Name}SystemComponent.cpp
     Source/${Name}SystemComponent.h
-    enabled_gems.cmake
 )

+ 0 - 3
Templates/Ros2RoboticManipulationTemplate/Template/Gem/CMakeLists.txt

@@ -98,6 +98,3 @@ o3de_find_ancestor_project_root(project_path project_name "${CMAKE_CURRENT_SOURC
 if (NOT project_name)
     set(project_name ${Name})
 endif()
-
-# Enable the specified list of gems from GEM_FILE or GEMS list for this specific project:
-ly_enable_gems(PROJECT_NAME ${project_name} GEM_FILE enabled_gems.cmake)

+ 0 - 26
Templates/Ros2RoboticManipulationTemplate/Template/Gem/enabled_gems.cmake

@@ -1,26 +0,0 @@
-# This file is copied during engine registration. Edits to this file will be lost next
-# time a registration happens.
-
-set(ENABLED_GEMS
-    ${Name}
-    Atom
-    CameraFramework
-    DebugDraw
-    EditorPythonBindings
-    EMotionFX
-    ImGui
-    LyShine
-    PhysX
-    PrimitiveAssets
-    PrefabBuilder
-    ScriptCanvasPhysics
-    ScriptEvents
-    StartingPointInput
-    TextureAtlas
-    WhiteBox
-    DiffuseProbeGrid
-    Compression
-    WarehouseAssets
-    ROS2
-    PhysXDebug
-)

+ 1 - 1
Templates/Ros2RoboticManipulationTemplate/Template/Registry/physxdebugconfiguration.setreg

@@ -1,7 +1,7 @@
 {
     "Amazon": {
         "Gems": {
-            "PhysX": {
+            "PhysX5": {
                 "Debug": {
                     "PhysXDebugConfiguration": {}
                 }

+ 1 - 1
Templates/Ros2RoboticManipulationTemplate/Template/Registry/physxdefaultsceneconfiguration.setreg

@@ -1,7 +1,7 @@
 {
     "Amazon": {
         "Gems": {
-            "PhysX": {
+            "PhysX5": {
                 "DefaultSceneConfiguration": {}
             }
         }

+ 1 - 1
Templates/Ros2RoboticManipulationTemplate/Template/Registry/physxsystemconfiguration.setreg

@@ -1,7 +1,7 @@
 {
     "Amazon": {
         "Gems": {
-            "PhysX": {
+            "PhysX5": {
                 "PhysXSystemConfiguration": {
                     "FixedTimeStep": 0.009999999776482582,
                     "CollisionConfig": {

+ 135 - 44
Templates/Ros2RoboticManipulationTemplate/Template/cmake/EngineFinder.cmake

@@ -1,32 +1,68 @@
-# This file is copied during engine registration. Edits to this file will be lost next
-# time a registration happens.
+# {BEGIN_LICENSE}
+#
+# Copyright (c) Contributors to the Open 3D Engine Project.
+# For complete copyright and license terms please see the LICENSE at the root of this distribution.
+#
+# SPDX-License-Identifier: Apache-2.0 OR MIT
+#
+#
+# {END_LICENSE}
+# Edits to this file may be lost in upgrades. Instead of changing this file, use 
+# the 'engine_finder_cmake_path' key in your project.json or user/project.json to specify 
+# an alternate .cmake file to use instead of this one.
 
 include_guard()
 
-# Read the engine name from the project_json file
-file(READ ${CMAKE_CURRENT_SOURCE_DIR}/project.json project_json)
 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/project.json)
 
-string(JSON LY_ENGINE_NAME_TO_USE ERROR_VARIABLE json_error GET ${project_json} engine)
-if(json_error)
-    message(FATAL_ERROR "Unable to read key 'engine' from 'project.json'\nError: ${json_error}")
-endif()
-
+# Option 1: Use engine manually set in CMAKE_MODULE_PATH
+# CMAKE_MODULE_PATH must contain a path to an engine's cmake folder 
 if(CMAKE_MODULE_PATH)
     foreach(module_path ${CMAKE_MODULE_PATH})
-        if(EXISTS ${module_path}/Findo3de.cmake)
-            file(READ ${module_path}/../engine.json engine_json)
-            string(JSON engine_name ERROR_VARIABLE json_error GET ${engine_json} engine_name)
-            if(json_error)
-                message(FATAL_ERROR "Unable to read key 'engine_name' from 'engine.json'\nError: ${json_error}")
-            endif()
-            if(LY_ENGINE_NAME_TO_USE STREQUAL engine_name)
-                return() # Engine being forced through CMAKE_MODULE_PATH
+        cmake_path(SET module_engine_version_cmake_path "${module_path}/o3deConfigVersion.cmake")
+        if(EXISTS "${module_engine_version_cmake_path}")
+            include("${module_engine_version_cmake_path}")
+            if(PACKAGE_VERSION_COMPATIBLE)
+                message(STATUS "Selecting engine from CMAKE_MODULE_PATH '${module_path}'")
+                return()
+            else()
+                message(WARNING "Not using engine from CMAKE_MODULE_PATH '${module_path}' because it is not compatible with this project.")
             endif()
         endif()
     endforeach()
+    message(VERBOSE "No compatible engine found from CMAKE_MODULE_PATH '${CMAKE_MODULE_PATH}'.")
+endif()
+
+# Option 2: Use the engine from the 'engine_path' field in <project>/user/project.json
+cmake_path(SET O3DE_USER_PROJECT_JSON_PATH ${CMAKE_CURRENT_SOURCE_DIR}/user/project.json)
+if(EXISTS "${O3DE_USER_PROJECT_JSON_PATH}")
+    file(READ "${O3DE_USER_PROJECT_JSON_PATH}" user_project_json)
+    if(user_project_json)
+        string(JSON user_project_engine_path ERROR_VARIABLE json_error GET ${user_project_json} engine_path)
+        if(user_project_engine_path AND NOT json_error)
+            cmake_path(SET user_engine_version_cmake_path "${user_project_engine_path}/cmake/o3deConfigVersion.cmake")
+            if(EXISTS "${user_engine_version_cmake_path}")
+                include("${user_engine_version_cmake_path}")
+                if(PACKAGE_VERSION_COMPATIBLE)
+                    message(STATUS "Selecting engine '${user_project_engine_path}' from 'engine_path' in '<project>/user/project.json'.")
+                    list(APPEND CMAKE_MODULE_PATH "${user_project_engine_path}/cmake")
+                    return()
+                else()
+                    message(FATAL_ERROR "The engine at '${user_project_engine_path}' from 'engine_path' in '${O3DE_USER_PROJECT_JSON_PATH}' is not compatible with this project. Please register this project with a compatible engine, or remove the local override by running:\nscripts\\o3de edit-project-properties -pp ${CMAKE_CURRENT_SOURCE_DIR} --user --engine-path \"\"")
+                endif()
+            else()
+                message(FATAL_ERROR "This project cannot use the engine at '${user_project_engine_path}' because the version cmake file '${user_engine_version_cmake_path}' needed to check compatibility is missing.  \nPlease register this project with a compatible engine, or remove the local override by running:\nscripts\\o3de edit-project-properties -pp ${CMAKE_CURRENT_SOURCE_DIR} --user --engine-path \"\"\nIf you want this project to use an older engine(not recommended), provide a custom EngineFinder.cmake using the o3de CLI's --engine-finder-cmake-path option. ")
+            endif()
+        elseif(json_error AND ${user_project_engine_path} STREQUAL "NOTFOUND")
+            # When the value is just NOTFOUND that means there is a JSON
+            # parsing error, and not simply a missing key 
+            message(FATAL_ERROR "Unable to read 'engine_path' from '${user_project_engine_path}'\nError: ${json-error}")
+        endif()
+    endif()
 endif()
 
+
+# Option 3: Find a compatible engine registered in ~/.o3de/o3de_manifest.json 
 if(DEFINED ENV{USERPROFILE} AND EXISTS $ENV{USERPROFILE})
     set(manifest_path $ENV{USERPROFILE}/.o3de/o3de_manifest.json) # Windows
 else()
@@ -34,50 +70,105 @@ else()
 endif()
 
 set(registration_error [=[
+To enable more verbose logging, run the cmake command again with '--log-level VERBOSE'
 Engine registration is required before configuring a project.
 Run 'scripts/o3de register --this-engine' from the engine root.
 ]=])
 
-# Read the ~/.o3de/o3de_manifest.json file and look through the 'engines_path' object.
-# Find a key that matches LY_ENGINE_NAME_TO_USE and use that as the engine path.
+# Create a list of all engines
 if(EXISTS ${manifest_path})
     file(READ ${manifest_path} manifest_json)
     set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${manifest_path})
 
-    string(JSON engines_path_count ERROR_VARIABLE json_error LENGTH ${manifest_json} engines_path)
+    string(JSON engines_count ERROR_VARIABLE json_error LENGTH ${manifest_json} engines)
     if(json_error)
-        message(FATAL_ERROR "Unable to read key 'engines_path' from '${manifest_path}'\nError: ${json_error}\n${registration_error}")
+        message(FATAL_ERROR "Unable to read key 'engines' from '${manifest_path}'\nError: ${json_error}\n${registration_error}")
     endif()
 
-    string(JSON engines_path_type ERROR_VARIABLE json_error TYPE ${manifest_json} engines_path)
-    if(json_error OR NOT ${engines_path_type} STREQUAL "OBJECT")
-        message(FATAL_ERROR "Type of 'engines_path' in '${manifest_path}' is not a JSON Object\nError: ${json_error}")
+    string(JSON engines_type ERROR_VARIABLE json_error TYPE ${manifest_json} engines)
+    if(json_error OR NOT ${engines_type} STREQUAL "ARRAY")
+        message(FATAL_ERROR "Type of 'engines' in '${manifest_path}' is not a JSON ARRAY\nError: ${json_error}\n${registration_error}")
     endif()
 
-    math(EXPR engines_path_count "${engines_path_count}-1")
-    foreach(engine_path_index RANGE ${engines_path_count})
-        string(JSON engine_name ERROR_VARIABLE json_error MEMBER ${manifest_json} engines_path ${engine_path_index})
+    math(EXPR engines_count "${engines_count}-1")
+    foreach(array_index RANGE ${engines_count})
+        string(JSON manifest_engine_path ERROR_VARIABLE json_error GET ${manifest_json} engines "${array_index}")
         if(json_error)
-            message(FATAL_ERROR "Unable to read 'engines_path/${engine_path_index}' from '${manifest_path}'\nError: ${json_error}")
+            message(FATAL_ERROR "Unable to read 'engines/${array_index}' from '${manifest_path}'\nError: ${json_error}\n${registration_error}")
         endif()
+        list(APPEND O3DE_ENGINE_PATHS ${manifest_engine_path})
+    endforeach()
+elseif(NOT CMAKE_MODULE_PATH)
+    message(FATAL_ERROR "O3DE Manifest file not found at '${manifest_path}'.\n${registration_error}")
+endif()
 
-        if(LY_ENGINE_NAME_TO_USE STREQUAL engine_name)
-            string(JSON engine_path ERROR_VARIABLE json_error GET ${manifest_json} engines_path ${engine_name})
-            if(json_error)
-                message(FATAL_ERROR "Unable to read value from 'engines_path/${engine_name}'\nError: ${json_error}")
-            endif()
+# We cannot just run find_package() on the list of engine paths because
+# CMAKE_FIND_PACKAGE_SORT_ORDER sorts based on file name and chooses
+# the first package that returns PACKAGE_VERSION_COMPATIBLE 
+set(O3DE_MOST_COMPATIBLE_ENGINE_PATH "")
+set(O3DE_MOST_COMPATIBLE_ENGINE_VERSION "")
+foreach(manifest_engine_path IN LISTS O3DE_ENGINE_PATHS) 
+    # Does this engine have a config version cmake file?
+    cmake_path(SET version_cmake_path "${manifest_engine_path}/cmake/o3deConfigVersion.cmake")
+    if(NOT EXISTS "${version_cmake_path}") 
+        message(VERBOSE "Ignoring '${manifest_engine_path}' because no config version cmake file was found at '${version_cmake_path}'")
+        continue()
+    endif()
 
-            if(engine_path)
-                list(APPEND CMAKE_MODULE_PATH "${engine_path}/cmake")
-                return()
-            endif()
+    unset(PACKAGE_VERSION)
+    unset(PACKAGE_VERSION_COMPATIBLE)
+    include("${version_cmake_path}")
+
+    # Follow the version checking convention from find_package(CONFIG)
+    if(PACKAGE_VERSION_COMPATIBLE)
+        if(NOT O3DE_MOST_COMPATIBLE_ENGINE_PATH) 
+            set(O3DE_MOST_COMPATIBLE_ENGINE_PATH "${manifest_engine_path}") 
+            set(O3DE_MOST_COMPATIBLE_ENGINE_VERSION ${PACKAGE_VERSION}) 
+            message(VERBOSE "Found compatible engine '${manifest_engine_path}' with version '${PACKAGE_VERSION}'")
+        elseif(${PACKAGE_VERSION} VERSION_GREATER ${O3DE_MOST_COMPATIBLE_ENGINE_VERSION})
+            set(O3DE_MOST_COMPATIBLE_ENGINE_PATH "${manifest_engine_path}")
+            set(O3DE_MOST_COMPATIBLE_ENGINE_VERSION ${PACKAGE_VERSION})
+            message(VERBOSE "Found more compatible engine '${manifest_engine_path}' with version '${PACKAGE_VERSION}' because it has a greater version number.")
+        else()
+            message(VERBOSE "Not using engine '${manifest_engine_path}' with version '${PACKAGE_VERSION}' because it doesn't have a greater version number or has a different engine name.")
         endif()
-    endforeach()
-    
-    message(FATAL_ERROR "The project.json uses engine name '${LY_ENGINE_NAME_TO_USE}' but no engine with that name has been registered.\n${registration_error}")
-else()
-    # If the user is passing CMAKE_MODULE_PATH we assume thats where we will find the engine
-    if(NOT CMAKE_MODULE_PATH)
-        message(FATAL_ERROR "O3DE Manifest file not found.\n${registration_error}")
+    else()
+        message(VERBOSE "Ignoring '${manifest_engine_path}' because it is not a compatible engine.")
+    endif()
+endforeach()
+
+if(O3DE_MOST_COMPATIBLE_ENGINE_PATH)
+    message(STATUS "Selecting engine '${O3DE_MOST_COMPATIBLE_ENGINE_PATH}'")
+    # Make sure PACKAGE_VERSION_COMPATIBLE is set so Findo3de.cmake knows
+    # compatibility was checked
+    set(PACKAGE_VERSION_COMPATIBLE True)
+    set(PACKAGE_VERSION O3DE_MOST_COMPATIBLE_ENGINE_VERSION)
+    list(APPEND CMAKE_MODULE_PATH "${O3DE_MOST_COMPATIBLE_ENGINE_PATH}/cmake")
+    return()
+endif()
+
+# No compatible engine was found.
+# Read the 'engine' field in project.json or user/project.json for more helpful messages 
+if(user_project_json)
+    string(JSON user_project_engine ERROR_VARIABLE json_error GET ${user_project_json} engine)
+endif()
+
+if(NOT user_project_engine)
+    file(READ ${CMAKE_CURRENT_SOURCE_DIR}/project.json o3de_project_json)
+    string(JSON project_engine ERROR_VARIABLE json_error GET ${o3de_project_json} engine)
+    if(json_error AND ${project_engine} STREQUAL "NOTFOUND")
+        message(FATAL_ERROR "Unable to read key 'engine' from 'project.json'\nError: ${json_error}")
     endif()
 endif()
+
+if(user_project_engine)
+    message(FATAL_ERROR "The local '${O3DE_USER_PROJECT_JSON_PATH}' engine is '${user_project_engine}' but no compatible engine with that name and version was found.  Please register the compatible engine, or remove the local engine override.\n${registration_error}")
+elseif(project_engine)
+    message(FATAL_ERROR "The project.json engine is '${project_engine}' but no engine with that name and version was found.\n${registration_error}")
+else()
+    set(project_registration_error [=[
+    Project registration is required before configuring a project.
+    Run 'scripts/o3de register -pp PROJECT_PATH --engine-path ENGINE_PATH' from the engine root.
+    ]=])
+    message(FATAL_ERROR "${project_registration_error}")
+endif()

+ 21 - 3
Templates/Ros2RoboticManipulationTemplate/Template/project.json

@@ -18,10 +18,28 @@
         "Gem"
     ],
     "restricted": "MySimulationProject",
-    "engine_version": "2.1.0",
+    "engine_version": "4.1.0",
     "gem_names": [
+        "Atom",
+        "CameraFramework",
+        "DebugDraw",
+        "EditorPythonBindings",
+        "EMotionFX",
+        "ImGui",
+        "LyShine",
+        "PhysX5",
+        "PhysX5Debug",
+        "PrimitiveAssets",
+        "PrefabBuilder",
+        "ScriptCanvasPhysics",
+        "ScriptEvents",
+        "StartingPointInput",
+        "TextureAtlas",
+        "WhiteBox",
+        "DiffuseProbeGrid",
+        "Compression",
         "WarehouseAssets",
-        "WarehouseAutomation",
-        "ROS2"
+        "WarehouseAutomation>=1.1.0",
+        "ROS2>=3.1.0"
     ]
 }

+ 5 - 6
Templates/Ros2RoboticManipulationTemplate/template.json

@@ -1,5 +1,6 @@
 {
     "template_name": "Ros2RoboticManipulationTemplate",
+    "version": "1.1.0",
     "origin": "https://github.com/o3de/o3de-extras",
     "license": "https://github.com/o3de/o3de-extras/tree/development/Templates/Ros2RoboticManipulationTemplate/Template/LICENSE.txt",
     "display_name": "ROS2 Robotic Manipulation",
@@ -976,7 +977,7 @@
         {
             "file": "Assets/BoxToyPuzzle/texture/Roughness/MCube_pazzle_Roughness.1001.png",
             "isTemplated": "false"
-        },       
+        },
         {
             "file": "Config/shader_global_build_options.json",
             "isTemplated": false
@@ -1093,10 +1094,6 @@
             "file": "Gem/Source/${Name}SystemComponent.h",
             "isTemplated": true
         },
-        {
-            "file": "Gem/enabled_gems.cmake",
-            "isTemplated": true
-        },
         {
             "file": "Gem/gem.json",
             "isTemplated": true
@@ -1403,5 +1400,7 @@
         {
             "dir": "cmake"
         }
-    ]
+    ],
+    "repo_uri": "https://raw.githubusercontent.com/o3de/o3de-extras/development",
+    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2roboticmanipulationtemplate-1.1.0-template.zip"
 }

+ 2403 - 1
repo.json

@@ -100,6 +100,21 @@
                     "sha256": "45c906788ed9a83b8ff74fd1b893a54f79e4d3e0674139839afb807260efa0e6",
                     "version": "1.0.0",
                     "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/proteusrobot-1.0.0-gem.zip"
+                },
+                {
+                    "version": "1.1.0",
+                    "license": "Apache-2.0 or MIT",
+                    "origin_url": "https://robotec.ai",
+                    "requirements": "Requires ROS 2 Gem",
+                    "dependencies": [
+                        "ROS2>=3.1.0"
+                    ],
+                    "compatible_engines": [
+                        "o3de-sdk>=4.1.0",
+                        "o3de>=4.1.0"
+                    ],
+                    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/proteusrobot-1.1.0-gem.zip",
+                    "sha256": "dec32d93221e2514b59e1ac056b74c771dc4109b4599b5cf290f27a3f2486615"
                 }
             ]
         },
@@ -153,6 +168,24 @@
                     ],
                     "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2-2.0.0-gem.zip",
                     "sha256": "93a51bebd7d5b931996025d6622bb09a6c20d6071da625d57eddf80f285444af"
+                },
+                {
+                    "version": "3.1.0",
+                    "compatible_engines": [
+                        "o3de-sdk>=4.1.0",
+                        "o3de>=4.1.0"
+                    ],
+                    "dependencies": [
+                        "Atom_RPI",
+                        "Atom_Feature_Common",
+                        "Atom_Component_DebugCamera",
+                        "CommonFeaturesAtom",
+                        "PhysX5",
+                        "PrimitiveAssets",
+                        "StartingPointInput"
+                    ],
+                    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2-3.1.0-gem.zip",
+                    "sha256": "53399b4d7dad90832369e1b05baabf1f1900138a639b1119693952d781a1cb30"
                 }
             ]
         },
@@ -190,6 +223,22 @@
                     "sha256": "be8973571f51d61bd3e56f40ab2d757bd7013c6bb466fe9f04ebb11c13eb7312",
                     "version": "1.0.0",
                     "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/rosrobotsample-1.0.0-gem.zip"
+                },
+                {
+                    "version": "1.1.0",
+                    "origin": "RobotecAI",
+                    "origin_url": "https://robotec.ai",
+                    "summary": "Husarion ROSbot XL robot assets.",
+                    "requirements": "Requires ROS 2 Gem",
+                    "dependencies": [
+                        "ROS2>=3.1.0"
+                    ],
+                    "compatible_engines": [
+                        "o3de-sdk>=4.1.0",
+                        "o3de>=4.1.0"
+                    ],
+                    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/rosrobotsample-1.1.0-gem.zip",
+                    "sha256": "9911d92616bc975a2b490c2190b087e92c2260c98431f13f1a431b9bd8e2ec59"
                 }
             ]
         },
@@ -320,11 +369,46 @@
             "repo_uri": "https://raw.githubusercontent.com/o3de/o3de-extras/development",
             "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/audioenginewwise-1.0.0-gem.zip",
             "sha256": "5bb813e841e45cbe9d195ca50815963df8d7d57def266f6a6a765d9b786b0d83"
+        },
+        {
+            "gem_name": "WarehouseAutomation",
+            "version": "1.1.0",
+            "display_name": "Warehouse Automation",
+            "license": "Apache-2.0",
+            "license_url": "https://opensource.org/licenses/Apache-2.0",
+            "origin": "RobotecAI",
+            "origin_url": "https://robotec.ai",
+            "type": "Code",
+            "summary": "Gem for simulating an automated warehouse or factory",
+            "canonical_tags": [
+                "Gem"
+            ],
+            "user_tags": [
+                "WarehouseAutomation"
+            ],
+            "compatible_engines": [
+                "o3de-sdk>=4.1.0",
+                "o3de>=4.1.0"
+            ],
+            "platforms": [
+                "Linux"
+            ],
+            "icon_path": "preview.png",
+            "requirements": "This gem requires ROS 2 gem and PhysX5 gem.",
+            "dependencies": [
+                "ROS2>=3.1.0"
+            ],
+            "repo_uri": "https://raw.githubusercontent.com/o3de/o3de-extras/development",
+            "restricted": "WarehouseAutomation",
+            "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/warehouseautomation-1.1.0-gem.zip",
+            "sha256": "21dad916ebb07232d901bbdc80ba376369e3ce4e580dcbae7d69132558357eb8"
         }
     ],
     "templates": [
         "https://github.com/o3de/o3de-extras.git/Templates/Multiplayer",
-        "https://github.com/o3de/o3de-extras.git/Templates/Ros2ProjectTemplate"
+        "https://github.com/o3de/o3de-extras.git/Templates/Ros2FleetRobotTemplate",
+        "https://github.com/o3de/o3de-extras.git/Templates/Ros2ProjectTemplate",
+        "https://github.com/o3de/o3de-extras.git/Templates/Ros2RoboticManipulationTemplate"
     ],
     "templates_data": [
         {
@@ -2047,6 +2131,486 @@
                     "sha256": "5617f52c2da6c8f869c2073d3b10b8941d71af8696d3593e90431b8df7be2497",
                     "version": "1.0.0",
                     "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2fleetrobottemplate-1.0.0-template.zip"
+                },
+                {
+                    "version": "1.2.0",
+                    "copyFiles": [
+                        {
+                            "file": ".gitignore",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "CMakeLists.txt",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Config/shader_global_build_options.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Gem/${Name}_files.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/${Name}_shared_files.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/CMakeLists.txt",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Include/${Name}/${Name}Bus.h",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/Linux/${Name}_linux_files.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/Linux/${Name}_shared_linux_files.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/Linux/PAL_linux.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/Mac/${Name}_mac_files.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/Mac/${Name}_shared_mac_files.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/Mac/PAL_mac.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/Windows/${Name}_shared_windows_files.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/Windows/${Name}_windows_files.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/Windows/PAL_windows.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Registry/assetprocessor_settings.setreg",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Source/${Name}Module.cpp",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Source/${Name}SystemComponent.cpp",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Source/${Name}SystemComponent.h",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/gem.json",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Levels/Warehouse/Warehouse.prefab",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Levels/playground/playground.prefab",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Platform/Linux/linux_project.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Platform/Linux/linux_project.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Platform/Mac/mac_project.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Platform/Mac/mac_project.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Platform/Windows/windows_project.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Platform/Windows/windows_project.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Registry/assetprocessor_settings.setreg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Registry/awscoreconfiguration.setreg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Registry/physxdebugconfiguration.setreg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Registry/physxdefaultsceneconfiguration.setreg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Registry/physxsystemconfiguration.setreg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/GameSDK.ico",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/LegacyLogoLauncher.bmp",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/Contents.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_128.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_128_2x.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_16.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_16_2x.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_256.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_256_2x.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_32.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_32_2x.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_512.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_512_2x.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/Contents.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Info.plist",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "ShaderLib/README.md",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "ShaderLib/scenesrg.srgi",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "ShaderLib/viewsrg.srgi",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Passes/ContrastAdaptiveSharpening.pass",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Passes/MainRenderPipeline.azasset",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Passes/PostProcessParent.pass",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Passes/SMAAConfiguration.azasset",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Passes/Taa.pass",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Prefabs/ProteusLaserScanner.prefab",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "autoexec.cfg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "cmake/EngineFinder.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "game.cfg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "preview.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "project.json",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/maps/map_warehouse.yaml",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/maps/map_warehouse.pgm",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/resource/o3de_fleet_nav",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/params/humble/nav2_multirobot_params.yaml",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/params/humble/nav2_params.yaml",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/params/iron/nav2_multirobot_params.yaml",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/params/iron/nav2_params.yaml",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/setup.py",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/package.xml",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/NOTICE",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/config/fleet_config.yaml",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/launch/o3de_rviz_launch.py",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/launch/o3de_nav_launch.py",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/launch/o3de_fleet_nav_launch.py",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/o3de_fleet_nav/__init__.py",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/o3de_fleet_nav/robot_spawner.py",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/test/test_pep257.py",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/test/test_flake8.py",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/test/test_copyright.py",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/setup.cfg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/ros2_ws/src/o3de_fleet_nav/rviz/nav2_namespaced_view.rviz",
+                            "isTemplated": false
+                        }
+                    ],
+                    "createDirectories": [
+                        {
+                            "dir": "Assets"
+                        },
+                        {
+                            "dir": "Config"
+                        },
+                        {
+                            "dir": "Gem"
+                        },
+                        {
+                            "dir": "Gem/Include"
+                        },
+                        {
+                            "dir": "Gem/Include/${Name}"
+                        },
+                        {
+                            "dir": "Gem/Platform"
+                        },
+                        {
+                            "dir": "Gem/Platform/Linux"
+                        },
+                        {
+                            "dir": "Gem/Platform/Mac"
+                        },
+                        {
+                            "dir": "Gem/Platform/Windows"
+                        },
+                        {
+                            "dir": "Gem/Registry"
+                        },
+                        {
+                            "dir": "Gem/Source"
+                        },
+                        {
+                            "dir": "Levels"
+                        },
+                        {
+                            "dir": "Levels/Warehouse"
+                        },
+                        {
+                            "dir": "Levels/playground"
+                        },
+                        {
+                            "dir": "Levels/playground/_savebackup"
+                        },
+                        {
+                            "dir": "Levels/playground/_savebackup/2023-02-21 [13.25.33]"
+                        },
+                        {
+                            "dir": "Passes"
+                        },
+                        {
+                            "dir": "Platform"
+                        },
+                        {
+                            "dir": "Platform/Android"
+                        },
+                        {
+                            "dir": "Platform/Linux"
+                        },
+                        {
+                            "dir": "Platform/Mac"
+                        },
+                        {
+                            "dir": "Platform/Windows"
+                        },
+                        {
+                            "dir": "Registry"
+                        },
+                        {
+                            "dir": "Resources"
+                        },
+                        {
+                            "dir": "Resources/Platform"
+                        },
+                        {
+                            "dir": "Resources/Platform/Mac"
+                        },
+                        {
+                            "dir": "Resources/Platform/Mac/Images.xcassets"
+                        },
+                        {
+                            "dir": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset"
+                        },
+                        {
+                            "dir": "ShaderLib"
+                        },
+                        {
+                            "dir": "Shaders"
+                        },
+                        {
+                            "dir": "Prefabs"
+                        },
+                        {
+                            "dir": "Shaders/ShaderResourceGroups"
+                        },
+                        {
+                            "dir": "cmake"
+                        },
+                        {
+                            "dir": "Examples"
+                        },
+                        {
+                            "dir": "Examples/ros2_ws"
+                        },
+                        {
+                            "dir": "Examples/ros2_ws/src"
+                        },
+                        {
+                            "dir": "Examples/ros2_ws/src/o3de_fleet_nav"
+                        },
+                        {
+                            "dir": "Examples/ros2_ws/src/o3de_fleet_nav/config"
+                        },
+                        {
+                            "dir": "Examples/ros2_ws/src/o3de_fleet_nav/launch"
+                        },
+                        {
+                            "dir": "Examples/ros2_ws/src/o3de_fleet_nav/maps"
+                        },
+                        {
+                            "dir": "Examples/ros2_ws/src/o3de_fleet_nav/o3de_fleet_nav"
+                        },
+                        {
+                            "dir": "Examples/ros2_ws/src/o3de_fleet_nav/params"
+                        },
+                        {
+                            "dir": "Examples/ros2_ws/src/o3de_fleet_nav/resource"
+                        },
+                        {
+                            "dir": "Examples/ros2_ws/src/o3de_fleet_nav/rviz"
+                        },
+                        {
+                            "dir": "Examples/ros2_ws/src/o3de_fleet_nav/test"
+                        }
+                    ],
+                    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2fleetrobottemplate-1.2.0-template.zip",
+                    "sha256": "cd6f252c18dff6dfa34247eb11ba19feb5247874e36ed6482f11e0eae7ef84f4"
                 }
             ]
         },
@@ -2580,8 +3144,1846 @@
                     "sha256": "62405080293d0be734398b3a338b2a9fce4dd50cba35d993f95d1d30e8e93e1b",
                     "version": "1.0.0",
                     "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2projecttemplate-1.0.0-template.zip"
+                },
+                {
+                    "version": "1.1.0",
+                    "copyFiles": [
+                        {
+                            "file": ".clang-format",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": ".gitattributes",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": ".gitignore",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "CMakeLists.txt",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "cmake/EngineFinder.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Config/default_aws_resource_mappings.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Config/shader_global_build_options.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Gem/${NameLower}_files.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/${NameLower}_editor_files.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/${NameLower}_shared_files.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/${NameLower}_editor_shared_files.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/CMakeLists.txt",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Include/${Name}/${Name}Bus.h",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/Android/${NameLower}_android_files.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Gem/Platform/Android/${NameLower}_shared_android_files.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Gem/Platform/Android/PAL_android.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/Linux/${NameLower}_linux_files.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Gem/Platform/Linux/${NameLower}_shared_linux_files.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Gem/Platform/Linux/PAL_linux.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/Mac/${NameLower}_mac_files.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Gem/Platform/Mac/${NameLower}_shared_mac_files.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Gem/Platform/Mac/PAL_mac.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/Windows/${NameLower}_shared_windows_files.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Gem/Platform/Windows/${NameLower}_windows_files.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Gem/Platform/Windows/PAL_windows.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Platform/iOS/${NameLower}_ios_files.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Gem/Platform/iOS/${NameLower}_shared_ios_files.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Gem/Platform/iOS/PAL_ios.cmake",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Registry/assetprocessor_settings.setreg",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Source/${Name}Module.cpp",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Source/${Name}EditorModule.cpp",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Source/${Name}ModuleInterface.h",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Source/${Name}SystemComponent.cpp",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Source/${Name}SystemComponent.h",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Source/${Name}EditorSystemComponent.cpp",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Source/${Name}EditorSystemComponent.h",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Source/${Name}SampleComponent.cpp",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/Source/${Name}SampleComponent.h",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Gem/gem.json",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Levels/DemoLevel/DemoLevel.prefab",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Platform/Android/android_project.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Platform/Android/android_project.json",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Platform/Linux/linux_project.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Platform/Linux/linux_project.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Platform/Mac/mac_project.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Platform/Mac/mac_project.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Platform/Windows/windows_project.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Platform/Windows/windows_project.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Platform/iOS/ios_project.cmake",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Platform/iOS/ios_project.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Registry/assetprocessor_settings.setreg",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Registry/awscoreconfiguration.setreg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Registry/editorpreferences.setreg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Registry/physxsystemconfiguration.setreg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Registry/sceneassetimporter.setreg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/GameSDK.ico",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/LegacyLogoLauncher.bmp",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/Contents.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/Contents.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_128.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_128_2x.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_16.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_16_2x.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_256.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_256_2x.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_32.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_32_2x.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_512.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_512_2x.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/Mac/Info.plist",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/Contents.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/LaunchImage.launchimage/Contents.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/LaunchImage.launchimage/iPadLaunchImage1024x768.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/LaunchImage.launchimage/iPadLaunchImage1536x2048.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/LaunchImage.launchimage/iPadLaunchImage2048x1536.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/LaunchImage.launchimage/iPadLaunchImage768x1024.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/LaunchImage.launchimage/iPhoneLaunchImage640x1136.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/LaunchImage.launchimage/iPhoneLaunchImage640x960.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/Contents.json",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/iPadAppIcon152x152.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/iPadAppIcon76x76.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/iPadProAppIcon167x167.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/iPadSettingsIcon29x29.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/iPadSettingsIcon58x58.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/iPadSpotlightIcon40x40.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/iPadSpotlightIcon80x80.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/iPhoneAppIcon120x120.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/iPhoneAppIcon180x180.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/iPhoneSettingsIcon58x58.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/iPhoneSettingsIcon87x87.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/iPhoneSpotlightIcon120x120.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Images.xcassets/AppIcon.appiconset/iPhoneSpotlightIcon80x80.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Resources/Platform/iOS/Info.plist",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "ShaderLib/README.md",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "ShaderLib/scenesrg.srgi",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "ShaderLib/viewsrg.srgi",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "autoexec.cfg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "game.cfg",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "preview.png",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "project.json",
+                            "isTemplated": true
+                        },
+                        {
+                            "file": "Examples/slam_navigation/launch/config/config.rviz",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/slam_navigation/README.md",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/slam_navigation/launch/config/navigation_params.yaml",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/slam_navigation/launch/config/slam_params.yaml",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/slam_navigation/launch/navigation.launch.py",
+                            "isTemplated": false
+                        },
+                        {
+                            "file": "Examples/slam_navigation/launch/slam.launch.py",
+                            "isTemplated": false
+                        }
+                    ],
+                    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2projecttemplate-1.1.0-template.zip",
+                    "sha256": "bb58695b13a8eca3675a25afe6a1832140ef3fa4a14ea1701ff127a50e36e066"
                 }
             ]
+        },
+        {
+            "template_name": "Ros2RoboticManipulationTemplate",
+            "version": "1.1.0",
+            "origin": "https://github.com/o3de/o3de-extras",
+            "license": "https://github.com/o3de/o3de-extras/tree/development/Templates/Ros2RoboticManipulationTemplate/Template/LICENSE.txt",
+            "display_name": "ROS2 Robotic Manipulation",
+            "summary": "A manipulation template for ROS2",
+            "canonical_tags": [],
+            "user_tags": [
+                "Ros2RoboticManipulationTemplate",
+                "ROS2",
+                "Move it2",
+                "Robots"
+            ],
+            "icon_path": "preview.png",
+            "copyFiles": [
+                {
+                    "file": "CMakeLists.txt",
+                    "isTemplated": true
+                },
+                {
+                    "file": "Assets/Importer/pandaMoveit.prefab",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Importer/ur10.prefab",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Room.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Desk_M_Desk.material",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Desk.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Floor/plane_divided_DefaultMaterial_Ambient.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Floor/plane_divided_DefaultMaterial_Height.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Floor/plane_divided_DefaultMaterial_Base_color.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Floor/plane_divided_DefaultMaterial_Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Floor/plane_divided_DefaultMaterial_Metallic.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Floor/plane_divided_DefaultMaterial_Roughness.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Desk/Room_M_Desk_Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Desk/Room_M_Desk_Base_color.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Desk/Room_M_Desk_Height.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Desk/Room_M_Desk_Roughness.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Desk/Room_M_Desk_Metallic.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Desk/Room_M_Desk_Ambient.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Walls/Room_M_Walls_Height.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Walls/Room_M_Walls_Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Walls/Room_M_Walls_Ambient.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Walls/Room_M_Walls_Roughness.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Walls/Room_M_Walls_Base_color.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Room/Textures/Walls/Room_M_Walls_Metallic.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/Warehouse.prefab",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine.prefab",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/EuroPallet.prefab",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/Box1.prefab",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/Box3.prefab",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/Box4.prefab",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/TableUnderRobot.prefab",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/Box2.prefab",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorBelt.fbx.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/EuroPallet.fbx.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorLine_TableUnderRobot.material",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorLine.fbx.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorBelt_guards_segment.fbx.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorBelt_effector_short.fbx.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorBelt2.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/EuroPallet_Pallet.material",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorBelt2_Conveyor2.material",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorLine_Cage.material",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorLine_ElectricBoxes.material",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorLine_MBelt.material",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorBelt.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/box.physxmaterial",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/conveyor_belt.physxmaterial",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/EuroPallet.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/conveyor_guards.physxmaterial",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorBelt_effector_short.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorBelt_bar.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorBelt_effector.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorBelt_effector.fbx.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorLine.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorBelt_guards_segment.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/ConveyorLine_MFrame.material",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/BeltTextures/Belt_low_DefaultMaterial_Base_color.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/BeltTextures/Belt_low_DefaultMaterial_Roughness.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/BeltTextures/Belt_low_DefaultMaterial_Metallic.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/BeltTextures/Belt_low_DefaultMaterial_Ambient.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/BeltTextures/Belt_low_DefaultMaterial_Height.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/BeltTextures/Belt_low_DefaultMaterial_Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Paper_Recycled_001_Normal.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Grass_001_Basecolor.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Concrete_Wall_005_Normal.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/ElectricBoxes_Specular.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Grass_001_Normal.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/1K_Wall_Paint_Specular.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Cage-Normal.png.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/ElectricBoxes_Roughness.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Grass_001_Displacement.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Scratched_007_Basecolor.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Concrete_019_Basecolor.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Galvanized_001_Normal.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Specular.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/1K_Wall_Paint_Normal.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Extinguisher_Basecolor.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/ElectricBoxes_Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Rusted_001_Basecolor.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/ElectricBoxes_Diffuse.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Steering_Panel_Basecolor.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Painted_Yellow_002_Basecolor.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Galvanized_001_Basecolor.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Painted_Red_002_Basecolor.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/1K_Wall_Paint_Basecolor.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Wood_026_Normal.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Cage-BaseColor.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/ElectricBoxes_Metalic.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Pallet-MaskMap.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Scratched_007_Roughness.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Paper_Recycled_001_Basecolor.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Painted_002_Normal.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Cage-Roughness.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Box-Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Grass_001_Roughness.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Concrete_Wall_005_Roughness.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Paper_Recycled_001_Roughness.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Cage-Roughness.png.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/BaseColor.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Box-Specular.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Painted_White_002_Basecolor.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Cage-Specular.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Roughness.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Rusted_001_Normal.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metallic.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Pallet-Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Wood_026_Roughness.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Cage-Metallic.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Galvanized_001_Roughness.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Scratched_007_Normal.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Wood_026_Basecolor.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Box-Metallic.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Painted_002_Roughness.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Concrete_Wall_005_Basecolor.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Box-BaseColor.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/ElectricBoxes_Height.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Metal_Rusted_001_Specular.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Cage-Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Pallet-BaseMap.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Box-Roughness.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Tire_Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Concrete_019_Roughness.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/Textures/Concrete_019_Normal.jpg",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/TableUnderRobotTextures/TableUnderRobot_BaseColor.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/TableUnderRobotTextures/TableUnderRobot_Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/TableUnderRobotTextures/TableUnderRobot_Roughness.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/TableUnderRobotTextures/TableUnderRobot_Metallic.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/TableUnderRobotTextures/TableUnderRobot_Height.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/FrameTextures/Frame_DefaultMaterial_Base_color.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/FrameTextures/Frame_DefaultMaterial_Height.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/FrameTextures/Frame_DefaultMaterial_Roughness.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/FrameTextures/Frame_DefaultMaterial_Ambient.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/FrameTextures/Frame_DefaultMaterial_Metallic.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Factory/ConveyorLine/FrameTextures/Frame_DefaultMaterial_Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UR10_pretty/UR10_M_UR10.material",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UR10_pretty/UR10.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UR10_pretty/Textures/RoboticArm.json",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UR10_pretty/Textures/UR10_Robotic_arm_Roughness.M_UR10.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UR10_pretty/Textures/UR10_Robotic_arm_Metallic.M_UR10.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UR10_pretty/Textures/UR10_Robotic_arm_BaseColor.M_UR10.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UR10_pretty/Textures/UR10_Robotic_arm_Emissive.M_UR10.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UR10_pretty/Textures/UR10_Robotic_arm_Height.M_UR10.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/hand_c.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link4_c.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link1.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/finger_c.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/hand.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link3_c.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link2_c.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link0.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link5_c.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link6_c.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link3_c.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link6.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link2.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link3.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link5.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link2_c.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/finger.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/finger_c.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link4.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/hand_c.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link2.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link7.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link7_c.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link1_c.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link0_c.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link6.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/hand.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/finger.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link4.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link1.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link6_c.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link1_c.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link3.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link7_c.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link5_c.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link5.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link4_c.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link0.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link0_c.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/1440394708_panda/link7.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/wrist1_collider.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/upperarm.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/forearm_collider.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/forearm_collider.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/wrist3.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/shoulder_collider.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/forearm.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/wrist3_collider.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/base_collider.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/shoulder.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/wrist1_collider.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/wrist2_collider.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/upperarm_collider.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/wrist2_collider.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/shoulder_collider.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/base.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/wrist1.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/wrist3_collider.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/upperarm.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/wrist2.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/wrist2.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/forearm.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/Gripper_collider.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/wrist1.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/Gripper_Gripper.material",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/Gripper_collider.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/shoulder.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/base.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/upperarm_collider.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/Gripper.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/base_collider.stl.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/wrist3.dae.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/Textures/Gripper-BaseColor.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/Textures/Gripper-Specular.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/Textures/Gripper-Roughness.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/Textures/Gripper-Metallic.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/UrdfImporter/783534404_ur.urdf/Textures/Gripper-Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Gripper/Gripper_collider.stl",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Gripper/Gripper.dae",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Gripper/Textures/Gripper-BaseColor.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Gripper/Textures/Gripper-Specular.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Gripper/Textures/Gripper-Roughness.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Gripper/Textures/Gripper-Metallic.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/Gripper/Textures/Gripper-Normal.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/ToyBox.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/BoxTriangle.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/BoxCube.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/BoxTriangle.fbx.assetinfo",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/BoxCyllinder.fbx",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/texture/BoxToyPuzzle_MCube_pazzle_Glossiness.1001.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/texture/BoxToyPuzzle_MCube_pazzle_Metallic.1001.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/texture/BoxToyPuzzle_MCube_pazzle_Emissive.1001.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/texture/BoxToyPuzzle_MCube_pazzle_Normal.1001.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/texture/BoxToyPuzzle_MCube_pazzle_Height.1001.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/texture/BoxToyPuzzle_MCube_pazzle_Roughness.1001.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/texture/BoxToyPuzzle_MCube_pazzle_BaseMap.1001.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/texture/BoxToyPuzzle_MCube_pazzle_Specular.1001.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Assets/BoxToyPuzzle/texture/Roughness/MCube_pazzle_Roughness.1001.png",
+                    "isTemplated": "false"
+                },
+                {
+                    "file": "Config/shader_global_build_options.json",
+                    "isTemplated": false
+                },
+                {
+                    "file": "DiffuseProbeGrids/Atom Default Environment_434B3A4E-7927-4EB4-B568-D0D75E72D270_ProbeData_lutrgba16f.dds",
+                    "isTemplated": false
+                },
+                {
+                    "file": "DiffuseProbeGrids/Atom Default Environment_691C813B-A7DA-435B-BE78-904F41AAECDD_Distance_lutrg32f.dds",
+                    "isTemplated": false
+                },
+                {
+                    "file": "DiffuseProbeGrids/Atom Default Environment_9DD87531-9B21-45AC-8169-4B6209456C02_Irradiance_lutrgba16f.dds",
+                    "isTemplated": false
+                },
+                {
+                    "file": "DiffuseProbeGrids/GI_4C638236-E6F7-413A-B1DF-26DA87A6CDC0_ProbeData_lutrgba16f.dds",
+                    "isTemplated": false
+                },
+                {
+                    "file": "DiffuseProbeGrids/GI_9A063636-4E64-4E87-8052-E1427ED3EC2C_Distance_lutrg32f.dds",
+                    "isTemplated": false
+                },
+                {
+                    "file": "DiffuseProbeGrids/GI_C092EE63-F1F9-43CC-93B5-19168F3EEADA_Irradiance_lutrgba16f.dds",
+                    "isTemplated": false
+                },
+                {
+                    "file": "DiffuseProbeGrids/Diffuse_Probe_Grid_1C06FE02-367E-4D6E-B8AE-9A48F2AF5F75_Irradiance_lutrgba16f.dds",
+                    "isTemplated": false
+                },
+                {
+                    "file": "DiffuseProbeGrids/Diffuse_Probe_Grid_4F50E1BF-2C8C-44EB-8183-34101107473C_Distance_lutrg32f.dds",
+                    "isTemplated": false
+                },
+                {
+                    "file": "DiffuseProbeGrids/Diffuse_Probe_Grid_ABC8A956-D89D-4CDB-829B-EF1DD8DE5404_ProbeData_lutrgba16f.dds",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Examples/panda_moveit_config_demo.launch.py",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Examples/panda_moveit_config_demo.rviz",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Gem/${Name}_files.cmake",
+                    "isTemplated": true
+                },
+                {
+                    "file": "Gem/${Name}_shared_files.cmake",
+                    "isTemplated": true
+                },
+                {
+                    "file": "Gem/CMakeLists.txt",
+                    "isTemplated": true
+                },
+                {
+                    "file": "Gem/Include/${Name}/${Name}Bus.h",
+                    "isTemplated": true
+                },
+                {
+                    "file": "Gem/Platform/Linux/${Name}_linux_files.cmake",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Gem/Platform/Linux/${Name}_shared_linux_files.cmake",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Gem/Platform/Linux/PAL_linux.cmake",
+                    "isTemplated": true
+                },
+                {
+                    "file": "Gem/Platform/Mac/${Name}_mac_files.cmake",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Gem/Platform/Mac/${Name}_shared_mac_files.cmake",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Gem/Platform/Mac/PAL_mac.cmake",
+                    "isTemplated": true
+                },
+                {
+                    "file": "Gem/Platform/Windows/${Name}_shared_windows_files.cmake",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Gem/Platform/Windows/${Name}_windows_files.cmake",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Gem/Platform/Windows/PAL_windows.cmake",
+                    "isTemplated": true
+                },
+                {
+                    "file": "Gem/Registry/assetprocessor_settings.setreg",
+                    "isTemplated": true
+                },
+                {
+                    "file": "Gem/Source/${Name}Module.cpp",
+                    "isTemplated": true
+                },
+                {
+                    "file": "Gem/Source/${Name}SystemComponent.cpp",
+                    "isTemplated": true
+                },
+                {
+                    "file": "Gem/Source/${Name}SystemComponent.h",
+                    "isTemplated": true
+                },
+                {
+                    "file": "Gem/gem.json",
+                    "isTemplated": true
+                },
+                {
+                    "file": "Levels/RoboticPalletization/RoboticPalletization.prefab",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Levels/RoboticManipulation/RoboticManipulation.prefab",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Passes/ContrastAdaptiveSharpening.pass",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Passes/MainRenderPipeline.azasset",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Passes/PostProcessParent.pass",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Passes/SMAAConfiguration.azasset",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Passes/Taa.pass",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Platform/Linux/linux_project.cmake",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Platform/Linux/linux_project.json",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Platform/Mac/mac_project.cmake",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Platform/Mac/mac_project.json",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Platform/Windows/windows_project.cmake",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Platform/Windows/windows_project.json",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Prefabs/Cell.prefab",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Prefabs/PandaRobot.prefab",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Prefabs/ToyBox_fbx.prefab",
+                    "isTemplated": false
+                },
+                {
+                    "file": "ReflectionProbes/Entity6__8035B0D1-451A-4226-A488-0C8E6949F6F5__iblspecularcm256.dds",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Registry/assetprocessor_settings.setreg",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Registry/awscoreconfiguration.setreg",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Registry/physxdebugconfiguration.setreg",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Registry/physxdefaultsceneconfiguration.setreg",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Registry/physxsystemconfiguration.setreg",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Registry/sceneassetimporter.setreg",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/GameSDK.ico",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/LegacyLogoLauncher.bmp",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/Contents.json",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_128.png",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_128_2x.png",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_16.png",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_16_2x.png",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_256.png",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_256_2x.png",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_32.png",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_32_2x.png",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_512.png",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset/icon_512_2x.png",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/Platform/Mac/Images.xcassets/Contents.json",
+                    "isTemplated": false
+                },
+                {
+                    "file": "Resources/Platform/Mac/Info.plist",
+                    "isTemplated": true
+                },
+                {
+                    "file": "ShaderLib/README.md",
+                    "isTemplated": false
+                },
+                {
+                    "file": "ShaderLib/scenesrg.srgi",
+                    "isTemplated": false
+                },
+                {
+                    "file": "ShaderLib/viewsrg.srgi",
+                    "isTemplated": false
+                },
+                {
+                    "file": "cmake/EngineFinder.cmake",
+                    "isTemplated": false
+                },
+                {
+                    "file": "user/Registry/editorpreferences.setreg",
+                    "isTemplated": false
+                },
+                {
+                    "file": "user/Registry/ViewBookmarks/robotic-arm_1671539006337141059.setreg",
+                    "isTemplated": false
+                },
+                {
+                    "file": "user/Registry/ViewBookmarks/RoboticPalletization_1691268770764352914.setreg",
+                    "isTemplated": false
+                },
+                {
+                    "file": "game.cfg",
+                    "isTemplated": false
+                },
+                {
+                    "file": "preview.png",
+                    "isTemplated": false
+                },
+                {
+                    "file": "project.json",
+                    "isTemplated": true
+                }
+            ],
+            "createDirectories": [
+                {
+                    "dir": "Config"
+                },
+                {
+                    "dir": "DiffuseProbeGrids"
+                },
+                {
+                    "dir": "Examples"
+                },
+                {
+                    "dir": "Gem"
+                },
+                {
+                    "dir": "Gem/Include"
+                },
+                {
+                    "dir": "Gem/Include/${Name}"
+                },
+                {
+                    "dir": "Gem/Platform"
+                },
+                {
+                    "dir": "Gem/Platform/Linux"
+                },
+                {
+                    "dir": "Gem/Platform/Mac"
+                },
+                {
+                    "dir": "Gem/Platform/Windows"
+                },
+                {
+                    "dir": "Gem/Registry"
+                },
+                {
+                    "dir": "Gem/Source"
+                },
+                {
+                    "dir": "Levels"
+                },
+                {
+                    "dir": "Levels/RoboticPalletization"
+                },
+                {
+                    "dir": "Levels/RoboticManipulation"
+                },
+                {
+                    "dir": "Passes"
+                },
+                {
+                    "dir": "Platform"
+                },
+                {
+                    "dir": "Platform/Android"
+                },
+                {
+                    "dir": "Platform/Linux"
+                },
+                {
+                    "dir": "Platform/Mac"
+                },
+                {
+                    "dir": "Platform/Windows"
+                },
+                {
+                    "dir": "Prefabs"
+                },
+                {
+                    "dir": "ReflectionProbes"
+                },
+                {
+                    "dir": "Registry"
+                },
+                {
+                    "dir": "Resources"
+                },
+                {
+                    "dir": "Resources/Platform"
+                },
+                {
+                    "dir": "Resources/Platform/Mac"
+                },
+                {
+                    "dir": "Resources/Platform/Mac/Images.xcassets"
+                },
+                {
+                    "dir": "Resources/Platform/Mac/Images.xcassets/AppIcon.appiconset"
+                },
+                {
+                    "dir": "ShaderLib"
+                },
+                {
+                    "dir": "Shaders"
+                },
+                {
+                    "dir": "user"
+                },
+                {
+                    "dir": "user/Registry"
+                },
+                {
+                    "dir": "user/Registry/ViewBookmarks"
+                },
+                {
+                    "dir": "Shaders/ShaderResourceGroups"
+                },
+                {
+                    "dir": "cmake"
+                }
+            ],
+            "repo_uri": "https://raw.githubusercontent.com/o3de/o3de-extras/development",
+            "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/ros2roboticmanipulationtemplate-1.1.0-template.zip",
+            "sha256": "7efe89a56731ad2efda60eb302fc73ec9ddf4f1bbb89d9b3cd9a9e357e64d9d3"
         }
     ],
     "projects_data": [