├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── README_ja.md ├── colcon_ws └── src │ ├── diffbot_description │ ├── CMakeLists.txt │ ├── config │ │ ├── diffbot_config.rviz │ │ └── diffbot_sim.yaml │ ├── launch │ │ └── diffbot_description.launch.py │ ├── package.xml │ ├── robots │ │ ├── diffbot.urdf.xacro │ │ └── diffbot_description.urdf.xacro │ ├── ros2_control │ │ └── diffbot.ros2_control.xacro │ └── unity │ │ └── diffbot.unity.xacro │ ├── unity_diffbot_sim │ ├── CMakeLists.txt │ ├── config │ │ └── unity_diffbot.yaml │ ├── launch │ │ └── diffbot_spawn.launch.py │ └── package.xml │ ├── unity_ros2_utils │ ├── LICENSE │ ├── README.md │ └── unity_ros2_scripts │ │ ├── package.xml │ │ ├── resource │ │ └── unity_ros2_scripts │ │ ├── setup.cfg │ │ ├── setup.py │ │ ├── test │ │ ├── test_copyright.py │ │ ├── test_flake8.py │ │ └── test_pep257.py │ │ └── unity_ros2_scripts │ │ ├── __init__.py │ │ ├── add_usd.py │ │ ├── launcher.py │ │ └── spawn_robot.py │ └── velocity_pub │ ├── CMakeLists.txt │ ├── README.txt │ ├── package.xml │ └── src │ └── velocity_pub.cpp ├── docker ├── .config │ ├── google-chrome │ │ └── .gitkeeper │ ├── unity3d │ │ └── .gitkeeper │ └── unityhub │ │ └── .gitkeeper ├── .local │ └── share │ │ └── unity3d │ │ └── prefs ├── Unity │ └── .gitkeeper ├── build-dokcer-image.bash ├── config │ └── terminator │ │ └── config ├── dockerfile ├── entrypoint.bash └── run-docker-container.bash ├── figs ├── ros2_unity_demo.gif └── unity_camera_demo.gif └── work └── Robot_Unity_App ├── Assets ├── InputSystem_Actions.inputactions ├── InputSystem_Actions.inputactions.meta ├── Resources.meta ├── Resources │ ├── GeometryCompassSettings.asset │ ├── GeometryCompassSettings.asset.meta │ ├── ROSConnectionPrefab.prefab │ └── ROSConnectionPrefab.prefab.meta ├── Scenes.meta ├── Scenes │ ├── SampleScene.unity │ └── SampleScene.unity.meta ├── Scripts.meta ├── Scripts │ ├── CameraMover.cs │ ├── CameraMover.cs.meta │ ├── Clock.cs │ ├── Clock.cs.meta │ ├── JointStatePub.cs │ ├── JointStatePub.cs.meta │ ├── JointStateSub.cs │ ├── JointStateSub.cs.meta │ ├── RemoteCommandListener.cs │ ├── RemoteCommandListener.cs.meta │ ├── TimeStamp.cs │ └── TimeStamp.cs.meta ├── Urdf.meta └── Urdf │ └── .gitkeeper ├── Logs └── .gitkeeper ├── Packages ├── manifest.json └── packages-lock.json ├── ProjectSettings ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── MemorySettings.asset ├── MultiplayerManager.asset ├── NavMeshAreas.asset ├── PackageManagerSettings.asset ├── Packages │ └── com.unity.testtools.codecoverage │ │ └── Settings.json ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── TagManager.asset ├── TimeManager.asset ├── UnityConnectSettings.asset ├── VFXManager.asset ├── VersionControlSettings.asset └── XRSettings.asset └── UserSettings ├── EditorUserSettings.asset ├── Layouts └── default-6000.dwlt ├── Search.index └── Search.settings /.gitignore: -------------------------------------------------------------------------------- 1 | colcon_ws/build/ 2 | colcon_ws/install/ 3 | colcon_ws/log/ 4 | docker/Unity/* 5 | !docker/Unity/.gitkeeper 6 | docker/.config/unityhub/* 7 | !docker/.config/unityhub/.gitkeeper 8 | docker/.config/unity3d/* 9 | !docker/.config/unity3d/.gitkeeper 10 | docker/.config/google-chrome/* 11 | !docker/.config/google-chrome/.gitkeeper 12 | work/Robot_Unity_App/Logs/* 13 | !work/Robot_Unity_App/Logs/.gitkeeper 14 | work/Robot_Unity_App/Assets/Urdf/* 15 | !work/Robot_Unity_App/Assets/Urdf/.gitkeeper 16 | devel/ 17 | logs/ 18 | build/ 19 | bin/ 20 | lib/ 21 | msg_gen/ 22 | srv_gen/ 23 | msg/*Action.msg 24 | msg/*ActionFeedback.msg 25 | msg/*ActionGoal.msg 26 | msg/*ActionResult.msg 27 | msg/*Feedback.msg 28 | msg/*Goal.msg 29 | msg/*Result.msg 30 | msg/_*.py 31 | build_isolated/ 32 | devel_isolated/ 33 | 34 | # Generated by dynamic reconfigure 35 | *.cfgc 36 | /cfg/cpp/ 37 | /cfg/*.py 38 | 39 | # Ignore generated docs 40 | *.dox 41 | *.wikidoc 42 | 43 | # eclipse stuff 44 | .project 45 | .cproject 46 | 47 | # qcreator stuff 48 | CMakeLists.txt.user 49 | 50 | srv/_*.py 51 | *.pcd 52 | *.pyc 53 | qtcreator-* 54 | *.user 55 | 56 | /planning/cfg 57 | /planning/docs 58 | /planning/src 59 | 60 | *~ 61 | 62 | # Emacs 63 | .#* 64 | 65 | # Catkin custom files 66 | CATKIN_IGNORE 67 | 68 | # This .gitignore file should be placed at the root of your Unity project directory 69 | # 70 | # Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore 71 | # 72 | /[Ll]ibrary/ 73 | /[Tt]emp/ 74 | /[Oo]bj/ 75 | /[Bb]uild/ 76 | /[Bb]uilds/ 77 | /[Ll]ogs/ 78 | /[Uu]ser[Ss]ettings/ 79 | 80 | # MemoryCaptures can get excessive in size. 81 | # They also could contain extremely sensitive data 82 | /[Mm]emoryCaptures/ 83 | 84 | # Recordings can get excessive in size 85 | /[Rr]ecordings/ 86 | 87 | # Uncomment this line if you wish to ignore the asset store tools plugin 88 | # /[Aa]ssets/AssetStoreTools* 89 | 90 | # Autogenerated Jetbrains Rider plugin 91 | /[Aa]ssets/Plugins/Editor/JetBrains* 92 | 93 | # Visual Studio cache directory 94 | .vs/ 95 | 96 | # Gradle cache directory 97 | .gradle/ 98 | 99 | # Autogenerated VS/MD/Consulo solution and project files 100 | ExportedObj/ 101 | .consulo/ 102 | *.csproj 103 | *.unityproj 104 | *.sln 105 | *.suo 106 | *.tmp 107 | *.user 108 | *.userprefs 109 | *.pidb 110 | *.booproj 111 | *.svd 112 | *.pdb 113 | *.mdb 114 | *.opendb 115 | *.VC.db 116 | 117 | # Unity3D generated meta files 118 | *.pidb.meta 119 | *.pdb.meta 120 | *.mdb.meta 121 | 122 | # Unity3D generated file on crash reports 123 | sysinfo.txt 124 | 125 | # Builds 126 | *.apk 127 | *.aab 128 | *.unitypackage 129 | *.app 130 | 131 | # Crashlytics generated file 132 | crashlytics-build.properties 133 | 134 | # Packed Addressables 135 | /[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* 136 | 137 | # Temporary auto-generated Android Assets 138 | /[Aa]ssets/[Ss]treamingAssets/aa.meta 139 | /[Aa]ssets/[Ss]treamingAssets/aa/* 140 | 141 | work/Robot_Unity_App/Library/ 142 | work/Robot_Unity_App/Temp/ 143 | work/Robot_Unity_App/Build/ 144 | work/Robot_Unity_App/Obj/ 145 | *.pidb 146 | *.unityproj 147 | *.sln 148 | *.userprefs 149 | *.swp 150 | *.csproj 151 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "colcon_ws/src/ROS-TCP-Endpoint"] 2 | path = colcon_ws/src/ROS-TCP-Endpoint 3 | url = https://github.com/Unity-Technologies/ROS-TCP-Endpoint.git 4 | [submodule "colcon_ws/src/unity_ros2_utils/topic_based_ros2_control"] 5 | path = colcon_ws/src/unity_ros2_utils/topic_based_ros2_control 6 | url = https://github.com/hijimasa/topic_based_ros2_control.git 7 | [submodule "work/UnitySensors"] 8 | path = work/UnitySensors 9 | url = https://github.com/hijimasa/UnitySensors.git 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ros2-tools-to-use-unity-like-gazebo 2 | English | [日本語](README_ja.md) 3 | ![demo](./figs/ros2_unity_demo.gif) 4 | 5 | ![camera_demo](./figs/unity_camera_demo.gif) 6 | 7 | This repository shows how to control the robot from ros2_control to make Unity easier to use. 8 | "unity_ros2_scripts" has the python script to launch and control Unity. 9 | 10 | The features of this repository are below: 11 | - This shows how to control a robot on Unity with ros2_control. 12 | - This provides a Dockerfile where Unity and ROS2 Humble can coexist. 13 | - This currently supports prismatic and rotational joints using position and velocity control. 14 | - This sends joint status (position, velocity and effort) to ros2_control from Unity. 15 | - This spawns URDF model at the desired timing and position. 16 | - This sets stiffness, damping and friction from URDF description. 17 | 18 | ## Prerequisite 19 | 1. Docker 20 | 1. Unity account 21 | 22 | ## Prepare Docker container 23 | 1. Clone this repository 24 | ``` 25 | git clone https://github.com/hijimasa/ros2-tools-to-use-unity-like-gazebo.git 26 | ``` 27 | 2. Initialize Git submodule 28 | ``` 29 | cd ros2-tools-to-use-unity-like-gazebo/ 30 | git submodule update --init --recursive 31 | ``` 32 | 3. Move to docker directory 33 | ``` 34 | cd docker 35 | ``` 36 | 4. Build docker image 37 | ``` 38 | ./build-dokcer-image.bash 39 | ``` 40 | 5. Run docker container 41 | ``` 42 | ./run-docker-container.bash 43 | ``` 44 | 6. Run UnityHub 45 | ``` 46 | unityhub 47 | ``` 48 | 7. Sign in Unity 49 | 50 | ## How to Use 51 | 52 | Tips: Use below command to launch another docker terminal 53 | ``` 54 | docker exec -it ros-humble-unity /bin/bash 55 | ``` 56 | 57 | 1. launch Unity. 58 | ```bash 59 | ros2 run unity_ros2_scripts launcher 60 | ``` 61 | 62 | 2. Import URDF. 63 | ``` 64 | ros2 launch unity_diffbot_sim diffbot_spawn.launch.py 65 | ``` 66 | 67 | 3. launch ros_tcp_endpoint 68 | ``` 69 | ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=0.0.0.0 70 | ``` 71 | 72 | 4. Add "3D Object Plane" to use ground plane. 73 | 74 | 5. Run Simulation 75 | 76 | 6. launch teleop_twist_keyboard 77 | ``` 78 | ros2 run teleop_twist_keyboard teleop_twist_keyboard 79 | ``` 80 | -------------------------------------------------------------------------------- /README_ja.md: -------------------------------------------------------------------------------- 1 | # ros2-tools-to-use-unity-like-gazebo 2 | [English](README.md) | 日本語 3 | ![demo](./figs/ros2_unity_demo.gif) 4 | 5 | ![camera_demo](./figs/unity_camera_demo.gif) 6 | 7 | このリポジトリは、`ros2_control`からロボットを制御してUnityを簡単に使用できるようにする方法を示しています。 8 | "unity_ros2_scripts"には、Unityを起動して制御するためのPythonスクリプトが含まれています。 9 | 10 | このリポジトリの特徴は以下の通りです: 11 | - Unity上で`ros2_control`を使用してロボットを制御する方法を示します。 12 | - UnityとROS2 Humbleが共存できるDockerfileを提供します。 13 | - 位置と速度制御を使用する直動および回転ジョイントをサポートしています。 14 | - Unityから`ros2_control`にジョイント状態(位置、速度、力)を送信します。 15 | - 希望するタイミングで希望する位置にURDFモデルを生成できます。 16 | - URDF記述から剛性、減衰、および摩擦を設定できます。 17 | 18 | ## 前提条件 19 | 1. Docker 20 | 1. Unityアカウント 21 | 22 | ## Dockerコンテナの準備 23 | 1. このリポジトリをクローン 24 | ``` 25 | git clone https://github.com/hijimasa/ros2-tools-to-use-unity-like-gazebo.git 26 | ``` 27 | 2. Gitサブモジュールの初期化 28 | ``` 29 | cd ros2-tools-to-use-unity-like-gazebo/ 30 | git submodule update --init --recursive 31 | ``` 32 | 3. dockerディレクトリに移動 33 | ``` 34 | cd docker 35 | ``` 36 | 4. Dockerイメージをビルド 37 | ``` 38 | ./build-dokcer-image.bash 39 | ``` 40 | 5. Dockerコンテナを実行 41 | ``` 42 | ./run-docker-container.bash 43 | ``` 44 | 6. UnityHubを起動 45 | ``` 46 | unityhub 47 | ``` 48 | 7. Unityにサインイン 49 | 50 | ## 使用方法 51 | 52 | ヒント: 別のDockerターミナルを開くには、以下のコマンドを使用します 53 | ``` 54 | docker exec -it ros-humble-unity /bin/bash 55 | ``` 56 | 57 | 1. Unityを起動 58 | ```bash 59 | ros2 run unity_ros2_scripts launcher 60 | ``` 61 | 62 | 2. URDFをインポート 63 | ``` 64 | ros2 launch unity_diffbot_sim diffbot_spawn.launch.py 65 | ``` 66 | 67 | 3. `ros_tcp_endpoint`を起動 68 | ``` 69 | ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=0.0.0.0 70 | ``` 71 | 72 | 4. 地面として使用する「3D Object Plane」を追加 73 | 74 | 5. シミュレーションを実行 75 | 76 | 6. `teleop_twist_keyboard`を起動 77 | ``` 78 | ros2 run teleop_twist_keyboard teleop_twist_keyboard 79 | ``` 80 | -------------------------------------------------------------------------------- /colcon_ws/src/diffbot_description/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | project(diffbot_description) 3 | 4 | # Default to C99 5 | if(NOT CMAKE_C_STANDARD) 6 | set(CMAKE_C_STANDARD 99) 7 | endif() 8 | 9 | # Default to C++14 10 | if(NOT CMAKE_CXX_STANDARD) 11 | set(CMAKE_CXX_STANDARD 14) 12 | endif() 13 | 14 | if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") 15 | add_compile_options(-Wall -Wextra -Wpedantic) 16 | endif() 17 | 18 | # find dependencies 19 | find_package(ament_cmake REQUIRED) 20 | find_package(xacro REQUIRED) 21 | find_package(robot_state_publisher REQUIRED) 22 | # uncomment the following section in order to fill in 23 | # further dependencies manually. 24 | # find_package( REQUIRED) 25 | 26 | #xacro_add_files( 27 | # robots/head_in.urdf.xacro 28 | # INSTALL DESTINATION robots 29 | #) 30 | 31 | # add_custom_target(urdf ALL COMMAND "ros2" "launch" ${PROJECT_NAME} "wamv_description.launch.py") 32 | 33 | install(DIRECTORY robots/ 34 | DESTINATION share/${PROJECT_NAME}/robots) 35 | 36 | install(DIRECTORY unity/ 37 | DESTINATION share/${PROJECT_NAME}/unity) 38 | 39 | install(DIRECTORY ros2_control/ 40 | DESTINATION share/${PROJECT_NAME}/ros2_control) 41 | 42 | install(DIRECTORY config/ 43 | DESTINATION share/${PROJECT_NAME}/config) 44 | 45 | install(DIRECTORY launch 46 | DESTINATION share/${PROJECT_NAME} 47 | ) 48 | 49 | if(BUILD_TESTING) 50 | find_package(ament_lint_auto REQUIRED) 51 | # the following line skips the linter which checks for copyrights 52 | # uncomment the line when a copyright and license is not present in all source files 53 | #set(ament_cmake_copyright_FOUND TRUE) 54 | # the following line skips cpplint (only works in a git repo) 55 | # uncomment the line when this package is not in a git repo 56 | #set(ament_cmake_cpplint_FOUND TRUE) 57 | ament_lint_auto_find_test_dependencies() 58 | endif() 59 | 60 | ament_package() 61 | -------------------------------------------------------------------------------- /colcon_ws/src/diffbot_description/config/diffbot_config.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz_common/Displays 3 | Help Height: 78 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Global Options1 8 | - /Status1 9 | - /RobotModel1 10 | - /Image2 11 | Splitter Ratio: 0.5 12 | Tree Height: 276 13 | - Class: rviz_common/Selection 14 | Name: Selection 15 | - Class: rviz_common/Tool Properties 16 | Expanded: 17 | - /2D Goal Pose1 18 | - /Publish Point1 19 | Name: Tool Properties 20 | Splitter Ratio: 0.5886790156364441 21 | - Class: rviz_common/Views 22 | Expanded: 23 | - /Current View1 24 | Name: Views 25 | Splitter Ratio: 0.5 26 | Visualization Manager: 27 | Class: "" 28 | Displays: 29 | - Alpha: 0.5 30 | Cell Size: 1 31 | Class: rviz_default_plugins/Grid 32 | Color: 160; 160; 164 33 | Enabled: true 34 | Line Style: 35 | Line Width: 0.029999999329447746 36 | Value: Lines 37 | Name: Grid 38 | Normal Cell Count: 0 39 | Offset: 40 | X: 0 41 | Y: 0 42 | Z: 0 43 | Plane: XY 44 | Plane Cell Count: 10 45 | Reference Frame: 46 | Value: true 47 | - Alpha: 1 48 | Class: rviz_default_plugins/RobotModel 49 | Collision Enabled: false 50 | Description File: "" 51 | Description Source: Topic 52 | Description Topic: 53 | Depth: 5 54 | Durability Policy: Volatile 55 | History Policy: Keep Last 56 | Reliability Policy: Reliable 57 | Value: /robot_description 58 | Enabled: true 59 | Links: 60 | All Links Enabled: true 61 | Expand Joint Details: false 62 | Expand Link Details: false 63 | Expand Tree: false 64 | Link Tree Style: Links in Alphabetic Order 65 | ball_link: 66 | Alpha: 1 67 | Show Axes: false 68 | Show Trail: false 69 | Value: true 70 | base_link: 71 | Alpha: 1 72 | Show Axes: false 73 | Show Trail: false 74 | body_link: 75 | Alpha: 1 76 | Show Axes: false 77 | Show Trail: false 78 | Value: true 79 | camera_link: 80 | Alpha: 1 81 | Show Axes: false 82 | Show Trail: false 83 | Value: true 84 | depth_camera_link: 85 | Alpha: 1 86 | Show Axes: false 87 | Show Trail: false 88 | Value: true 89 | left_wheel_link: 90 | Alpha: 1 91 | Show Axes: false 92 | Show Trail: false 93 | Value: true 94 | lidar_link: 95 | Alpha: 1 96 | Show Axes: false 97 | Show Trail: false 98 | Value: true 99 | right_wheel_link: 100 | Alpha: 1 101 | Show Axes: false 102 | Show Trail: false 103 | Value: true 104 | Mass Properties: 105 | Inertia: false 106 | Mass: false 107 | Name: RobotModel 108 | TF Prefix: "" 109 | Update Interval: 0 110 | Value: true 111 | Visual Enabled: true 112 | - Alpha: 1 113 | Autocompute Intensity Bounds: true 114 | Autocompute Value Bounds: 115 | Max Value: 10 116 | Min Value: -10 117 | Value: true 118 | Axis: Z 119 | Channel Name: intensity 120 | Class: rviz_default_plugins/LaserScan 121 | Color: 255; 255; 255 122 | Color Transformer: Intensity 123 | Decay Time: 0 124 | Enabled: true 125 | Invert Rainbow: false 126 | Max Color: 255; 255; 255 127 | Max Intensity: -999999 128 | Min Color: 0; 0; 0 129 | Min Intensity: 999999 130 | Name: LaserScan 131 | Position Transformer: XYZ 132 | Selectable: true 133 | Size (Pixels): 3 134 | Size (m): 0.009999999776482582 135 | Style: Flat Squares 136 | Topic: 137 | Depth: 5 138 | Durability Policy: Volatile 139 | Filter size: 10 140 | History Policy: Keep Last 141 | Reliability Policy: Reliable 142 | Value: /scan 143 | Use Fixed Frame: true 144 | Use rainbow: true 145 | Value: true 146 | - Class: rviz_default_plugins/Image 147 | Enabled: true 148 | Max Value: 1 149 | Median window: 5 150 | Min Value: 0 151 | Name: Image 152 | Normalize Range: true 153 | Topic: 154 | Depth: 5 155 | Durability Policy: Volatile 156 | History Policy: Keep Last 157 | Reliability Policy: Reliable 158 | Value: /image_raw 159 | Value: true 160 | - Class: rviz_default_plugins/Image 161 | Enabled: true 162 | Max Value: 1 163 | Median window: 5 164 | Min Value: 0 165 | Name: Image 166 | Normalize Range: false 167 | Topic: 168 | Depth: 5 169 | Durability Policy: Volatile 170 | History Policy: Keep Last 171 | Reliability Policy: Reliable 172 | Value: /depth_camera/image_raw 173 | Value: true 174 | Enabled: true 175 | Global Options: 176 | Background Color: 48; 48; 48 177 | Fixed Frame: base_link 178 | Frame Rate: 30 179 | Name: root 180 | Tools: 181 | - Class: rviz_default_plugins/Interact 182 | Hide Inactive Objects: true 183 | - Class: rviz_default_plugins/MoveCamera 184 | - Class: rviz_default_plugins/Select 185 | - Class: rviz_default_plugins/FocusCamera 186 | - Class: rviz_default_plugins/Measure 187 | Line color: 128; 128; 0 188 | - Class: rviz_default_plugins/SetInitialPose 189 | Covariance x: 0.25 190 | Covariance y: 0.25 191 | Covariance yaw: 0.06853891909122467 192 | Topic: 193 | Depth: 5 194 | Durability Policy: Volatile 195 | History Policy: Keep Last 196 | Reliability Policy: Reliable 197 | Value: /initialpose 198 | - Class: rviz_default_plugins/SetGoal 199 | Topic: 200 | Depth: 5 201 | Durability Policy: Volatile 202 | History Policy: Keep Last 203 | Reliability Policy: Reliable 204 | Value: /goal_pose 205 | - Class: rviz_default_plugins/PublishPoint 206 | Single click: true 207 | Topic: 208 | Depth: 5 209 | Durability Policy: Volatile 210 | History Policy: Keep Last 211 | Reliability Policy: Reliable 212 | Value: /clicked_point 213 | Transformation: 214 | Current: 215 | Class: rviz_default_plugins/TF 216 | Value: true 217 | Views: 218 | Current: 219 | Class: rviz_default_plugins/Orbit 220 | Distance: 1.8420875072479248 221 | Enable Stereo Rendering: 222 | Stereo Eye Separation: 0.05999999865889549 223 | Stereo Focal Distance: 1 224 | Swap Stereo Eyes: false 225 | Value: false 226 | Focal Point: 227 | X: 0 228 | Y: 0 229 | Z: 0 230 | Focal Shape Fixed Size: true 231 | Focal Shape Size: 0.05000000074505806 232 | Invert Z Axis: false 233 | Name: Current View 234 | Near Clip Distance: 0.009999999776482582 235 | Pitch: 0.5203982591629028 236 | Target Frame: 237 | Value: Orbit (rviz) 238 | Yaw: 0.6903942823410034 239 | Saved: ~ 240 | Window Geometry: 241 | Displays: 242 | collapsed: false 243 | Height: 846 244 | Hide Left Dock: false 245 | Hide Right Dock: false 246 | Image: 247 | collapsed: false 248 | QMainWindow State: 000000ff00000000fd000000040000000000000156000002f8fc020000000afb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003b0000019d000000c700fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d00610067006501000001de0000008e0000002800fffffffb0000000a0049006d0061006700650100000272000000c10000002800ffffff000000010000010f000002f8fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003b000002f8000000a000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004420000003efc0100000002fb0000000800540069006d00650100000000000004420000000000000000fb0000000800540069006d006501000000000000045000000000000000000000023f000002f800000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 249 | Selection: 250 | collapsed: false 251 | Tool Properties: 252 | collapsed: false 253 | Views: 254 | collapsed: false 255 | Width: 1200 256 | X: 615 257 | Y: 132 258 | -------------------------------------------------------------------------------- /colcon_ws/src/diffbot_description/config/diffbot_sim.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 1000 # Hz 4 | 5 | diff_drive_controller: 6 | type: diff_drive_controller/DiffDriveController 7 | 8 | joint_state_broadcaster: 9 | type: joint_state_broadcaster/JointStateBroadcaster 10 | 11 | diff_drive_controller: 12 | ros__parameters: 13 | left_wheel_names : ['left_wheel_joint'] 14 | right_wheel_names : ['right_wheel_joint'] 15 | 16 | wheel_separation : 0.46 17 | wheel_radius : 0.19 18 | wheel_separation_multiplier : 1.0 19 | left_wheel_radius_multiplier : 1.0 20 | right_wheel_radius_multiplier : 1.0 21 | 22 | odom_frame_id: odom 23 | base_frame_id: base_link 24 | 25 | pose_covariance_diagonal : [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0] 26 | twist_covariance_diagonal: [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0] 27 | 28 | enable_odom_tf: true 29 | 30 | cmd_vel_timeout: 3.0 31 | publish_limited_velocity: true 32 | velocity_rolling_window_size: 10 33 | 34 | # limits 35 | linear.x.has_velocity_limits: true 36 | linear.x.has_acceleration_limits: false 37 | linear.x.has_jerk_limits: false 38 | linear.x.max_velocity: 1.0 39 | linear.x.min_velocity: -1.0 40 | linear.x.max_acceleration: 0.4 41 | linear.x.min_acceleration: -0.4 42 | linear.x.max_jerk: 0.5 43 | linear.x.min_jerk: -0.5 44 | 45 | angular.z.has_velocity_limits: true 46 | angular.z.has_acceleration_limits: false 47 | angular.z.has_jerk_limits: false 48 | angular.z.max_velocity: 1.5 49 | angular.z.min_velocity: -1.5 50 | angular.z.max_acceleration: 0.8 51 | angular.z.min_acceleration: -0.8 52 | angular.z.max_jerk: 0.5 53 | angular.z.min_jerk: -0.5 54 | 55 | -------------------------------------------------------------------------------- /colcon_ws/src/diffbot_description/launch/diffbot_description.launch.py: -------------------------------------------------------------------------------- 1 | import os 2 | from ament_index_python.packages import get_package_share_directory 3 | from launch import LaunchDescription 4 | from launch.actions import IncludeLaunchDescription 5 | import launch 6 | import launch_ros.actions 7 | import xacro 8 | from launch_ros.substitutions import FindPackageShare 9 | 10 | share_dir_path = os.path.join(get_package_share_directory('diffbot_description')) 11 | xacro_path = os.path.join(share_dir_path, 'robots', 'diffbot.urdf.xacro') 12 | urdf_path = os.path.join(share_dir_path, 'robots', 'diffbot.urdf') 13 | rviz_config_file = os.path.join(share_dir_path, 'config', 'diffbot_config.rviz') 14 | 15 | def generate_launch_description(): 16 | # xacroをロード 17 | doc = xacro.process_file(xacro_path) 18 | # xacroを展開してURDFを生成 19 | robot_desc = doc.toprettyxml(indent=' ') 20 | # urdf_pathに対してurdfを書き出し 21 | f = open(urdf_path, 'w') 22 | f.write(robot_desc) 23 | f.close() 24 | rsp = launch_ros.actions.Node(package='robot_state_publisher', 25 | executable='robot_state_publisher', 26 | output='both', 27 | remappings=[('robot_description', 'robot_description')], 28 | # argumentsでURDFを出力したパスを指定 29 | arguments=[urdf_path]) 30 | jsp = launch_ros.actions.Node(package='joint_state_publisher_gui', 31 | executable='joint_state_publisher_gui', 32 | output='both', 33 | remappings=[('robot_description', 'robot_description')], 34 | # argumentsでURDFを出力したパスを指定 35 | arguments=[urdf_path]) 36 | 37 | rviz = launch_ros.actions.Node( 38 | package="rviz2", 39 | executable="rviz2", 40 | name="rviz2", 41 | output="log", 42 | arguments=["-d", rviz_config_file], 43 | ) 44 | 45 | return launch.LaunchDescription([rsp, jsp, rviz]) 46 | -------------------------------------------------------------------------------- /colcon_ws/src/diffbot_description/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | diffbot_description 5 | 0.0.0 6 | TODO: Package description 7 | 8 | Masaaki Hijikata 9 | 10 | MIT 11 | 12 | ament_cmake 13 | 14 | xacro 15 | robot_state_publisher 16 | joint_state_publisher_gui 17 | 18 | ament_lint_auto 19 | ament_lint_common 20 | 21 | 22 | ament_cmake 23 | 24 | 25 | -------------------------------------------------------------------------------- /colcon_ws/src/diffbot_description/robots/diffbot.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /colcon_ws/src/diffbot_description/robots/diffbot_description.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 183 | 184 | 185 | 186 | 187 | -------------------------------------------------------------------------------- /colcon_ws/src/diffbot_description/ros2_control/diffbot.ros2_control.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | fake_components/GenericSystem 10 | ${fake_sensor_commands} 11 | 0.0 12 | 13 | 14 | topic_based_ros2_control/TopicBasedSystem 15 | /${name}/joint_command 16 | /${name}/joint_states 17 | true 18 | 19 | 20 | 21 | 22 | -1 23 | 1 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -1 32 | 1 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /colcon_ws/src/diffbot_description/unity/diffbot.unity.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 10 | 11 | 12 | 13 | 400 14 | 1 15 | -3.1415 16 | 3.1415 17 | 18 | 19 | 20 | 0.05 21 | 20.0 22 | 0.01 23 | 24 | 25 | gaussian 26 | 0.0 27 | 0.01 28 | 29 | 30 | /lidar/scan 31 | lidar_link 32 | 33 | 34 | 35 | 30.0 36 | 1.3962634 37 | 38 | 800 39 | 600 40 | 41 | 42 | 0.02 43 | 300 44 | 45 | /camera 46 | image_raw 47 | camera_info 48 | camera_link 49 | 50 | 51 | 52 | 10.0 53 | 1.3962634 54 | 55 | 320 56 | 240 57 | 58 | 59 | 0.02 60 | 300 61 | 62 | /depth_camera 63 | depth_image_raw 64 | depth_camera_info 65 | depth_camera_link 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_diffbot_sim/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | project(unity_diffbot_sim) 3 | 4 | # Default to C99 5 | if(NOT CMAKE_C_STANDARD) 6 | set(CMAKE_C_STANDARD 99) 7 | endif() 8 | 9 | # Default to C++14 10 | if(NOT CMAKE_CXX_STANDARD) 11 | set(CMAKE_CXX_STANDARD 14) 12 | endif() 13 | 14 | if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") 15 | add_compile_options(-Wall -Wextra -Wpedantic) 16 | endif() 17 | 18 | # find dependencies 19 | find_package(ament_cmake REQUIRED) 20 | find_package(xacro REQUIRED) 21 | find_package(rclpy REQUIRED) 22 | # uncomment the following section in order to fill in 23 | # further dependencies manually. 24 | # find_package( REQUIRED) 25 | 26 | install(DIRECTORY launch 27 | DESTINATION share/${PROJECT_NAME} 28 | ) 29 | 30 | install(DIRECTORY config 31 | DESTINATION share/${PROJECT_NAME} 32 | ) 33 | 34 | if(BUILD_TESTING) 35 | find_package(ament_lint_auto REQUIRED) 36 | # the following line skips the linter which checks for copyrights 37 | # uncomment the line when a copyright and license is not present in all source files 38 | #set(ament_cmake_copyright_FOUND TRUE) 39 | # the following line skips cpplint (only works in a git repo) 40 | # uncomment the line when this package is not in a git repo 41 | #set(ament_cmake_cpplint_FOUND TRUE) 42 | ament_lint_auto_find_test_dependencies() 43 | endif() 44 | 45 | ament_package() 46 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_diffbot_sim/config/unity_diffbot.yaml: -------------------------------------------------------------------------------- 1 | controller_manager: 2 | ros__parameters: 3 | update_rate: 100 # Hz 4 | 5 | diff_drive_controller: 6 | type: diff_drive_controller/DiffDriveController 7 | 8 | joint_state_broadcaster: 9 | type: joint_state_broadcaster/JointStateBroadcaster 10 | 11 | diff_drive_controller: 12 | ros__parameters: 13 | left_wheel_names : ['left_wheel_joint'] 14 | right_wheel_names : ['right_wheel_joint'] 15 | 16 | wheel_separation : 0.46 17 | wheel_radius : 0.19 18 | wheel_separation_multiplier : 1.0 19 | left_wheel_radius_multiplier : 1.0 20 | right_wheel_radius_multiplier : 1.0 21 | 22 | odom_frame_id: odom 23 | base_frame_id: base_link 24 | 25 | pose_covariance_diagonal : [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0] 26 | twist_covariance_diagonal: [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0] 27 | 28 | enable_odom_tf: true 29 | 30 | cmd_vel_timeout: 3.0 31 | publish_limited_velocity: true 32 | velocity_rolling_window_size: 10 33 | 34 | # limits 35 | linear.x.has_velocity_limits: true 36 | linear.x.has_acceleration_limits: true 37 | linear.x.has_jerk_limits: false 38 | linear.x.max_velocity: 1.0 39 | linear.x.min_velocity: -1.0 40 | linear.x.max_acceleration: 0.4 41 | linear.x.min_acceleration: -0.4 42 | linear.x.max_jerk: 0.5 43 | linear.x.min_jerk: -0.5 44 | 45 | angular.z.has_velocity_limits: true 46 | angular.z.has_acceleration_limits: true 47 | angular.z.has_jerk_limits: false 48 | angular.z.max_velocity: 1.5 49 | angular.z.min_velocity: -1.5 50 | angular.z.max_acceleration: 0.8 51 | angular.z.min_acceleration: -0.8 52 | angular.z.max_jerk: 0.5 53 | angular.z.min_jerk: -0.5 54 | 55 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_diffbot_sim/launch/diffbot_spawn.launch.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pathlib 3 | 4 | from ament_index_python.packages import get_package_share_directory 5 | 6 | 7 | from launch import LaunchDescription 8 | from launch.substitutions import Command, FindExecutable, PathJoinSubstitution 9 | from launch.actions import ExecuteProcess, IncludeLaunchDescription, RegisterEventHandler 10 | from launch.event_handlers import OnProcessExit 11 | from launch.launch_description_sources import PythonLaunchDescriptionSource 12 | 13 | from launch_ros.actions import Node 14 | from launch_ros.substitutions import FindPackageShare 15 | from launch_ros.actions import ComposableNodeContainer 16 | from launch_ros.descriptions import ComposableNode 17 | 18 | import xacro 19 | 20 | def generate_launch_description(): 21 | isaac_diffbot_description_path = os.path.join( 22 | get_package_share_directory('diffbot_description')) 23 | 24 | xacro_file = os.path.join(isaac_diffbot_description_path, 25 | 'robots', 26 | 'diffbot.urdf.xacro') 27 | urdf_path = os.path.join(isaac_diffbot_description_path, 'robots', 'diffbot.urdf') 28 | # xacroをロード 29 | doc = xacro.process_file(xacro_file, mappings={'use_sim' : 'true'}) 30 | # xacroを展開してURDFを生成 31 | robot_desc = doc.toprettyxml(indent=' ') 32 | f = open(urdf_path, 'w') 33 | f.write(robot_desc) 34 | f.close() 35 | relative_urdf_path = pathlib.Path(urdf_path).relative_to(os.getcwd()) 36 | 37 | params = {'robot_description': robot_desc} 38 | 39 | robot_controllers = PathJoinSubstitution( 40 | [ 41 | FindPackageShare("unity_diffbot_sim"), 42 | "config", 43 | "unity_diffbot.yaml", 44 | ] 45 | ) 46 | 47 | control_node = Node( 48 | package="controller_manager", 49 | executable="ros2_control_node", 50 | parameters=[params, robot_controllers], 51 | output={ 52 | "stdout": "screen", 53 | "stderr": "screen", 54 | }, 55 | ) 56 | 57 | node_robot_state_publisher = Node( 58 | package='robot_state_publisher', 59 | executable='robot_state_publisher', 60 | output='screen', 61 | parameters=[params] 62 | ) 63 | 64 | joint_state_broadcaster_spawner = Node( 65 | package="controller_manager", 66 | executable="spawner", 67 | arguments=["joint_state_broadcaster", "--controller-manager", "/controller_manager"], 68 | ) 69 | 70 | diff_drive_controller_spawner = Node( 71 | package="controller_manager", 72 | executable="spawner", 73 | arguments=["diff_drive_controller", "--controller-manager", "/controller_manager"], 74 | ) 75 | 76 | velocity_converter = Node( 77 | package='velocity_pub', 78 | name='velocity_pub', 79 | executable='velocity_pub', 80 | remappings=[ 81 | ('cmd_vel_stamped', '/diff_drive_controller/cmd_vel'), 82 | ], 83 | ) 84 | 85 | isaac_spawn_robot = Node( 86 | package="unity_ros2_scripts", 87 | executable="spawn_robot", 88 | parameters=[{'urdf_path': urdf_path, 89 | 'package_name' : "diffbot_description", 90 | 'unity_project_path' : "~/work/Robot_Unity_App", 91 | 'x' : 0.0, 92 | 'y' : 0.0, 93 | 'z' : 0.0, 94 | 'R' : 0.0, 95 | 'P' : 0.0, 96 | 'Y' : 1.57, 97 | }], 98 | ) 99 | 100 | image_republish = Node( 101 | package='image_transport', 102 | executable='republish', 103 | name='image_republisher', 104 | arguments=['compressed', 'raw'], 105 | remappings=[ 106 | ('in/compressed', '/diffbot/camera_link/image_raw'), 107 | ('out', '/camera_link/image_raw'), 108 | ], 109 | output='screen', 110 | ) 111 | 112 | depth_image_republish = Node( 113 | package='image_transport', 114 | executable='republish', 115 | name='depth_image_republisher', 116 | arguments=['compressed', 'raw'], 117 | remappings=[ 118 | ('in/compressed', '/diffbot/depth_camera_link/depth_image_raw'), 119 | ('out', '/depth_camera_link/depth_image_raw'), 120 | ], 121 | output='screen', 122 | ) 123 | 124 | return LaunchDescription([ 125 | control_node, 126 | node_robot_state_publisher, 127 | joint_state_broadcaster_spawner, 128 | diff_drive_controller_spawner, 129 | velocity_converter, 130 | isaac_spawn_robot, 131 | image_republish, 132 | depth_image_republish, 133 | ]) 134 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_diffbot_sim/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | unity_diffbot_sim 5 | 0.0.0 6 | TODO: Package description 7 | 8 | Masaaki Hijikata 9 | 10 | MIT 11 | 12 | ament_cmake 13 | ament_cmake_python 14 | 15 | ament_index_python 16 | control_msgs 17 | effort_controllers 18 | hardware_interface 19 | joint_trajectory_controller 20 | joint_state_broadcaster 21 | launch 22 | launch_ros 23 | robot_state_publisher 24 | ros2_control 25 | ros2_controllers 26 | rclcpp 27 | std_msgs 28 | velocity_controllers 29 | xacro 30 | 31 | ament_lint_auto 32 | ament_lint_common 33 | 34 | 35 | ament_cmake 36 | 37 | 38 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_ros2_utils/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Masaaki Hijikata 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_ros2_utils/README.md: -------------------------------------------------------------------------------- 1 | # ROS 2 utilities for Unity 2 | 3 | This repository provides utilities to use [Unity](https://unity.com/) like [Gazebo classic](https://classic.gazebosim.org/). 4 | 5 | ## Features 6 | 7 | - This spawns URDF model at the desired timing and position. 8 | - This provide ros2_control plugin to use ros2_controller, for example diff_drive_controller. 9 | - This supports rotational and prismatic joints using position and velocity control. 10 | - This sends joint status (position, velocity and effort) to ros2_control from Isaac Sim. 11 | - This launches sensors from URDF description. 12 | - This launchs sensors and controller at the desired timing. 13 | - This sets stiffness, damping and friction from URDF description. 14 | 15 | ## System Requirements 16 | 17 | | Element | Minimum Spec | 18 | |----|--------------------| 19 | | OS | Ubuntu 22.04 | 20 | | CPU | Intel Core i7 (7th Generation)
AMD Ryzen 5 | 21 | | Cores | 4 | 22 | | RAM | 32GB | 23 | | Storage | 50GB SSD | 24 | | GPU | GeForce RTX 2070 | 25 | | VRAM | 8GB | 26 | | ROS 2 | Humble | 27 | 28 | ## How to Use 29 | 30 | Please check [this document](https://hijimasa.github.io/unity_ros2_utils/). 31 | 32 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_ros2_utils/unity_ros2_scripts/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | unity_ros2_scripts 5 | 0.0.0 6 | TODO: Package description 7 | Masaaki Hijikata 8 | TODO: License declaration 9 | 10 | rclpy 11 | std_msgs 12 | 13 | ament_copyright 14 | ament_flake8 15 | ament_pep257 16 | python3-pytest 17 | 18 | 19 | ament_python 20 | 21 | 22 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_ros2_utils/unity_ros2_scripts/resource/unity_ros2_scripts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hijimasa/ros2-tools-to-use-unity-like-gazebo/e741e250fbe92d732ba220696c9ea22ebb207404/colcon_ws/src/unity_ros2_utils/unity_ros2_scripts/resource/unity_ros2_scripts -------------------------------------------------------------------------------- /colcon_ws/src/unity_ros2_utils/unity_ros2_scripts/setup.cfg: -------------------------------------------------------------------------------- 1 | [develop] 2 | script_dir=$base/lib/unity_ros2_scripts 3 | [install] 4 | install_scripts=$base/lib/unity_ros2_scripts 5 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_ros2_utils/unity_ros2_scripts/setup.py: -------------------------------------------------------------------------------- 1 | import os 2 | from glob import glob 3 | from setuptools import find_packages, setup 4 | 5 | package_name = 'unity_ros2_scripts' 6 | 7 | setup( 8 | name=package_name, 9 | version='0.0.0', 10 | packages=find_packages(exclude=['test']), 11 | data_files=[ 12 | ('share/ament_index/resource_index/packages', 13 | ['resource/' + package_name]), 14 | ('share/' + package_name, ['package.xml']), 15 | ], 16 | install_requires=['setuptools'], 17 | zip_safe=True, 18 | maintainer='root', 19 | maintainer_email='root@todo.todo', 20 | description='TODO: Package description', 21 | license='TODO: License declaration', 22 | tests_require=['pytest'], 23 | entry_points={ 24 | 'console_scripts': [ 25 | 'launcher = unity_ros2_scripts.launcher:main', 26 | 'spawn_robot = unity_ros2_scripts.spawn_robot:main', 27 | 'add_usd = unity_ros2_scripts.add_usd:main', 28 | ], 29 | }, 30 | ) 31 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_ros2_utils/unity_ros2_scripts/test/test_copyright.py: -------------------------------------------------------------------------------- 1 | # Copyright 2015 Open Source Robotics Foundation, Inc. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from ament_copyright.main import main 16 | import pytest 17 | 18 | 19 | # Remove the `skip` decorator once the source file(s) have a copyright header 20 | @pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') 21 | @pytest.mark.copyright 22 | @pytest.mark.linter 23 | def test_copyright(): 24 | rc = main(argv=['.', 'test']) 25 | assert rc == 0, 'Found errors' 26 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_ros2_utils/unity_ros2_scripts/test/test_flake8.py: -------------------------------------------------------------------------------- 1 | # Copyright 2017 Open Source Robotics Foundation, Inc. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from ament_flake8.main import main_with_errors 16 | import pytest 17 | 18 | 19 | @pytest.mark.flake8 20 | @pytest.mark.linter 21 | def test_flake8(): 22 | rc, errors = main_with_errors(argv=[]) 23 | assert rc == 0, \ 24 | 'Found %d code style errors / warnings:\n' % len(errors) + \ 25 | '\n'.join(errors) 26 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_ros2_utils/unity_ros2_scripts/test/test_pep257.py: -------------------------------------------------------------------------------- 1 | # Copyright 2015 Open Source Robotics Foundation, Inc. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | from ament_pep257.main import main 16 | import pytest 17 | 18 | 19 | @pytest.mark.linter 20 | @pytest.mark.pep257 21 | def test_pep257(): 22 | rc = main(argv=['.', 'test']) 23 | assert rc == 0, 'Found code style errors / warnings' 24 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_ros2_utils/unity_ros2_scripts/unity_ros2_scripts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hijimasa/ros2-tools-to-use-unity-like-gazebo/e741e250fbe92d732ba220696c9ea22ebb207404/colcon_ws/src/unity_ros2_utils/unity_ros2_scripts/unity_ros2_scripts/__init__.py -------------------------------------------------------------------------------- /colcon_ws/src/unity_ros2_utils/unity_ros2_scripts/unity_ros2_scripts/add_usd.py: -------------------------------------------------------------------------------- 1 | import os 2 | import rclpy 3 | from rclpy.node import Node 4 | import subprocess 5 | from ament_index_python.packages import get_package_share_directory 6 | 7 | class SimLancher(Node): 8 | def __init__(self): 9 | super().__init__('sim_launcher') 10 | 11 | self.declare_parameter('usd_path', '') 12 | usd_path = self.get_parameter('usd_path').get_parameter_value().string_value 13 | if usd_path == '': 14 | return 15 | self.declare_parameter('usd_name', '') 16 | usd_name = self.get_parameter('usd_name').get_parameter_value().string_value 17 | if usd_name == '': 18 | usd_name = os.path.splitext(os.path.basename(usd_path))[0] 19 | self.declare_parameter('x', 0.0) 20 | robot_x = self.get_parameter('x').get_parameter_value().double_value 21 | self.declare_parameter('y', 0.0) 22 | robot_y = self.get_parameter('y').get_parameter_value().double_value 23 | self.declare_parameter('z', 0.0) 24 | robot_z = self.get_parameter('z').get_parameter_value().double_value 25 | self.declare_parameter('R', 0.0) 26 | robot_roll = self.get_parameter('R').get_parameter_value().double_value 27 | self.declare_parameter('P', 0.0) 28 | robot_pitch = self.get_parameter('P').get_parameter_value().double_value 29 | self.declare_parameter('Y', 0.0) 30 | robot_yaw = self.get_parameter('Y').get_parameter_value().double_value 31 | 32 | self.sensor_proc = None 33 | 34 | spawn_command_path = os.path.join( 35 | get_package_share_directory('isaac_ros2_scripts'), 'add_usd_command.sh') 36 | temp_spawn_command_path = os.path.join("/tmp", 'add_usd_command.sh') 37 | 38 | with open(spawn_command_path, encoding="utf-8") as f: 39 | data_lines = f.read() 40 | 41 | data_lines = data_lines.replace("USD_PATH", usd_path) 42 | data_lines = data_lines.replace("USD_NAME", usd_name) 43 | data_lines = data_lines.replace("USD_ROLL", str(robot_roll)) 44 | data_lines = data_lines.replace("USD_PITCH", str(robot_pitch)) 45 | data_lines = data_lines.replace("USD_YAW", str(robot_yaw)) 46 | data_lines = data_lines.replace("USD_X", str(robot_x)) 47 | data_lines = data_lines.replace("USD_Y", str(robot_y)) 48 | data_lines = data_lines.replace("USD_Z", str(robot_z)) 49 | 50 | with open(temp_spawn_command_path, mode="w", encoding="utf-8") as f: 51 | f.write(data_lines) 52 | 53 | command = ["bash", temp_spawn_command_path] 54 | print(command) 55 | self.get_logger().info("command start") 56 | self.sensor_proc = subprocess.Popen(command) 57 | self.sensor_proc.wait() 58 | if not self.sensor_proc.stdout == None: 59 | lines = self.sensor_proc.stdout.read() 60 | for line in lines: 61 | print(line) 62 | self.get_logger().info("command end") 63 | 64 | def __del__(self): 65 | if not self.sensor_proc == None: 66 | if self.sensor_proc.poll() is None: 67 | killcmd = "kill {pid}".format(pid=self.sensor_proc.pid) 68 | subprocess.run(killcmd,shell=True) 69 | 70 | def main(args=None): 71 | rclpy.init(args=args) 72 | 73 | minimal_publisher = SimLancher() 74 | minimal_publisher.get_logger().info("node start") 75 | 76 | minimal_publisher.destroy_node() 77 | 78 | rclpy.shutdown() 79 | 80 | 81 | if __name__ == '__main__': 82 | main() 83 | 84 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_ros2_utils/unity_ros2_scripts/unity_ros2_scripts/launcher.py: -------------------------------------------------------------------------------- 1 | import os 2 | import glob 3 | import signal 4 | import rclpy 5 | from rclpy.node import Node 6 | import subprocess 7 | from ament_index_python.packages import get_package_share_directory 8 | from os.path import expanduser 9 | 10 | def find_unity_executable(base_dir="~/Unity/Hub/Editor"): 11 | # Expand user directory in the base path 12 | base_dir = os.path.expanduser(base_dir) 13 | 14 | # Search for the Unity executable within any version folder 15 | unity_executable_pattern = os.path.join(base_dir, "*/Editor/Unity") 16 | unity_executables = glob.glob(unity_executable_pattern) 17 | 18 | if unity_executables: 19 | print("Unity executable(s) found:") 20 | for executable in unity_executables: 21 | print(executable) 22 | return str(unity_executables[0]) 23 | else: 24 | print("No Unity executable found.") 25 | return None 26 | 27 | class SimLancher(Node): 28 | def __init__(self): 29 | super().__init__('sim_launcher') 30 | self.proc = None 31 | 32 | self.declare_parameter('unity_path', '') 33 | unity_path = self.get_parameter('unity_path').get_parameter_value().string_value 34 | found_unity_path = find_unity_executable() 35 | if (unity_path == '') and (not found_unity_path == None): 36 | unity_path = found_unity_path 37 | if not os.path.isfile(unity_path): 38 | self.get_logger().fatal('Unity not found!!') 39 | return 40 | 41 | self.declare_parameter('project_path', str(os.path.expanduser("~")) + '/work/Robot_Unity_App/') 42 | project_path = self.get_parameter('project_path').get_parameter_value().string_value 43 | 44 | self.declare_parameter('open_file_path', '') 45 | open_file_path = self.get_parameter('open_file_path').get_parameter_value().string_value 46 | 47 | command = [unity_path, "-projectPath", project_path] 48 | if not open_file_path == '': 49 | command.append('-openfile') 50 | command.append(open_file_path) 51 | print(command) 52 | self.proc = subprocess.Popen(command, preexec_fn=os.setsid) 53 | 54 | def __del__(self): 55 | if not self.proc == None: 56 | if self.proc.poll() is None: 57 | os.killpg(os.getpgid(self.proc.pid), signal.SIGKILL) 58 | 59 | def main(args=None): 60 | rclpy.init(args=args) 61 | 62 | minimal_publisher = SimLancher() 63 | 64 | rclpy.spin(minimal_publisher) 65 | 66 | # Destroy the node explicitly 67 | # (optional - otherwise it will be done automatically 68 | # when the garbage collector destroys the node object) 69 | minimal_publisher.destroy_node() 70 | 71 | rclpy.shutdown() 72 | 73 | 74 | if __name__ == '__main__': 75 | main() 76 | 77 | -------------------------------------------------------------------------------- /colcon_ws/src/unity_ros2_utils/unity_ros2_scripts/unity_ros2_scripts/spawn_robot.py: -------------------------------------------------------------------------------- 1 | import os 2 | import socket 3 | import rclpy 4 | from rclpy.node import Node 5 | import subprocess 6 | from ament_index_python.packages import get_package_share_directory 7 | import shutil 8 | import xml.etree.ElementTree as ET 9 | 10 | class SimLancher(Node): 11 | def __init__(self): 12 | super().__init__('sim_launcher') 13 | 14 | self.declare_parameter('urdf_path', '') 15 | urdf_path = self.get_parameter('urdf_path').get_parameter_value().string_value 16 | if urdf_path == '': 17 | return 18 | urdf_file_name = os.path.basename(urdf_path) 19 | self.declare_parameter('package_name', '') 20 | package_name = self.get_parameter('package_name').get_parameter_value().string_value 21 | if package_name == '': 22 | return 23 | self.declare_parameter('unity_project_path', '') 24 | unity_project_path = self.get_parameter('unity_project_path').get_parameter_value().string_value 25 | if unity_project_path == '': 26 | return 27 | unity_project_path = os.path.expanduser(unity_project_path.rstrip('/')) 28 | self.get_logger().info(unity_project_path) 29 | self.declare_parameter('x', 0.0) 30 | robot_x = self.get_parameter('x').get_parameter_value().double_value 31 | self.declare_parameter('y', 0.0) 32 | robot_y = self.get_parameter('y').get_parameter_value().double_value 33 | self.declare_parameter('z', 0.0) 34 | robot_z = self.get_parameter('z').get_parameter_value().double_value 35 | self.declare_parameter('R', 0.0) 36 | robot_roll = self.get_parameter('R').get_parameter_value().double_value 37 | self.declare_parameter('P', 0.0) 38 | robot_pitch = self.get_parameter('P').get_parameter_value().double_value 39 | self.declare_parameter('Y', 0.0) 40 | robot_yaw = self.get_parameter('Y').get_parameter_value().double_value 41 | self.declare_parameter('fixed', False) 42 | robot_fixed = self.get_parameter('fixed').get_parameter_value().bool_value 43 | if robot_fixed: 44 | robot_fixed_string = "true" 45 | else: 46 | robot_fixed_string = "false" 47 | 48 | self.get_logger().info("command start") 49 | 50 | # Copy URDF file 51 | os.makedirs(unity_project_path + "/Assets/Urdf/" + package_name, exist_ok=True) 52 | shutil.copy(urdf_path, unity_project_path + "/Assets/Urdf/" + package_name + "/" + urdf_file_name) 53 | 54 | # XMLファイルの読み込み 55 | tree = ET.parse(urdf_path) 56 | root = tree.getroot() 57 | 58 | # 全ての タグの中の filename 属性の値をもとにstlファイルを転送 59 | filenames = [mesh.get('filename').replace('package://', '') for mesh in root.findall('.//mesh')] 60 | for filename in filenames: 61 | stl_package_name, stl_file_path = filename.split('/', 1) 62 | stl_directory_path, stl_file_name = os.path.split(filename) 63 | os.makedirs(unity_project_path + "/Assets/Urdf/" + package_name + "/" + stl_directory_path, exist_ok=True) 64 | package_path = os.path.join(get_package_share_directory(stl_package_name)) 65 | shutil.copy(package_path.rstrip('/') + "/" + stl_file_path , unity_project_path + "/Assets/Urdf/" + package_name + "/" + filename) 66 | 67 | self.send_urdf_import_settings("URDF_IMPORT " + unity_project_path + "/Assets/Urdf/" + package_name + "/" + urdf_file_name + " " + str(robot_x) + " " + str(robot_y) + " " + str(robot_z) + " " + str(robot_roll) + " " + str(robot_pitch) + " " + str(robot_yaw) + " " + robot_fixed_string) 68 | self.get_logger().info("command end") 69 | 70 | def __del__(self): 71 | pass 72 | 73 | def send_urdf_import_settings(self, urdf_import_settings): 74 | host = 'localhost' # Unity Editorを実行しているPCのIPアドレス 75 | port = 5000 76 | 77 | with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: 78 | s.connect((host, port)) 79 | s.sendall(urdf_import_settings.encode('utf-8')) 80 | 81 | def main(args=None): 82 | rclpy.init(args=args) 83 | 84 | minimal_publisher = SimLancher() 85 | minimal_publisher.get_logger().info("node start") 86 | 87 | minimal_publisher.destroy_node() 88 | 89 | rclpy.shutdown() 90 | 91 | 92 | if __name__ == '__main__': 93 | main() 94 | 95 | -------------------------------------------------------------------------------- /colcon_ws/src/velocity_pub/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | project(velocity_pub) 3 | 4 | # Default to C99 5 | if(NOT CMAKE_C_STANDARD) 6 | set(CMAKE_C_STANDARD 99) 7 | endif() 8 | 9 | # Default to C++14 10 | if(NOT CMAKE_CXX_STANDARD) 11 | set(CMAKE_CXX_STANDARD 14) 12 | endif() 13 | 14 | if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") 15 | add_compile_options(-Wall -Wextra -Wpedantic) 16 | endif() 17 | 18 | # find dependencies 19 | find_package(ament_cmake REQUIRED) 20 | find_package(rclcpp REQUIRED) 21 | find_package(geometry_msgs REQUIRED) 22 | # uncomment the following section in order to fill in 23 | # further dependencies manually. 24 | # find_package( REQUIRED) 25 | 26 | add_executable(velocity_pub src/velocity_pub.cpp) 27 | ament_target_dependencies(velocity_pub rclcpp geometry_msgs) 28 | 29 | install(TARGETS 30 | velocity_pub 31 | DESTINATION lib/${PROJECT_NAME}) 32 | 33 | if(BUILD_TESTING) 34 | find_package(ament_lint_auto REQUIRED) 35 | # the following line skips the linter which checks for copyrights 36 | # uncomment the line when a copyright and license is not present in all source files 37 | #set(ament_cmake_copyright_FOUND TRUE) 38 | # the following line skips cpplint (only works in a git repo) 39 | # uncomment the line when this package is not in a git repo 40 | #set(ament_cmake_cpplint_FOUND TRUE) 41 | ament_lint_auto_find_test_dependencies() 42 | endif() 43 | 44 | ament_package() 45 | -------------------------------------------------------------------------------- /colcon_ws/src/velocity_pub/README.txt: -------------------------------------------------------------------------------- 1 | run command is below 2 | ros2 run velocity_pub velocity_pub --ros-args -r cmd_vel:=/my_robot_diff_drive_controller/cmd_vel 3 | -------------------------------------------------------------------------------- /colcon_ws/src/velocity_pub/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | velocity_pub 5 | 0.0.0 6 | TODO: Package description 7 | root 8 | TODO: License declaration 9 | 10 | ament_cmake 11 | 12 | rclcpp 13 | geometry_msgs 14 | 15 | ament_lint_auto 16 | ament_lint_common 17 | 18 | 19 | ament_cmake 20 | 21 | 22 | -------------------------------------------------------------------------------- /colcon_ws/src/velocity_pub/src/velocity_pub.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | #include "rclcpp/rclcpp.hpp" 7 | #include "geometry_msgs/msg/twist.hpp" 8 | #include "geometry_msgs/msg/twist_stamped.hpp" 9 | 10 | using namespace std::chrono_literals; 11 | using std::placeholders::_1; 12 | 13 | /* This example creates a subclass of Node and uses std::bind() to register a 14 | * member function as a callback from the timer. */ 15 | 16 | class MinimalPublisher : public rclcpp::Node 17 | { 18 | public: 19 | MinimalPublisher() 20 | : Node("minimal_publisher"), count_(0) 21 | { 22 | publisher_ = this->create_publisher("cmd_vel_stamped", 10); 23 | subscription_ = this->create_subscription( 24 | "cmd_vel", 10, std::bind(&MinimalPublisher::cmd_vel_callback, this, _1)); 25 | timer_ = this->create_wall_timer( 26 | 500ms, std::bind(&MinimalPublisher::timer_callback, this)); 27 | } 28 | 29 | private: 30 | void timer_callback() 31 | { 32 | auto message = geometry_msgs::msg::TwistStamped(); 33 | message.header.stamp = this->get_clock()->now(); 34 | message.twist.linear.x = input_cmd_vel_.linear.x; 35 | message.twist.linear.y = input_cmd_vel_.linear.y; 36 | message.twist.angular.z = input_cmd_vel_.angular.z; 37 | // RCLCPP_INFO(this->get_logger(), "Publishing: '%f'", message.twist.linear.x); 38 | publisher_->publish(message); 39 | } 40 | 41 | void cmd_vel_callback(const geometry_msgs::msg::Twist::SharedPtr msg) 42 | { 43 | input_cmd_vel_.linear.x = msg->linear.x; 44 | input_cmd_vel_.linear.y = msg->linear.y; 45 | input_cmd_vel_.angular.z = msg->angular.z; 46 | // RCLCPP_INFO(this->get_logger(), "I heard: %f", msg->linear.x); 47 | } 48 | rclcpp::TimerBase::SharedPtr timer_; 49 | rclcpp::Publisher::SharedPtr publisher_; 50 | rclcpp::Subscription::SharedPtr subscription_; 51 | geometry_msgs::msg::Twist input_cmd_vel_; 52 | size_t count_; 53 | }; 54 | 55 | int main(int argc, char * argv[]) 56 | { 57 | rclcpp::init(argc, argv); 58 | rclcpp::spin(std::make_shared()); 59 | rclcpp::shutdown(); 60 | return 0; 61 | } 62 | 63 | -------------------------------------------------------------------------------- /docker/.config/google-chrome/.gitkeeper: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hijimasa/ros2-tools-to-use-unity-like-gazebo/e741e250fbe92d732ba220696c9ea22ebb207404/docker/.config/google-chrome/.gitkeeper -------------------------------------------------------------------------------- /docker/.config/unity3d/.gitkeeper: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hijimasa/ros2-tools-to-use-unity-like-gazebo/e741e250fbe92d732ba220696c9ea22ebb207404/docker/.config/unity3d/.gitkeeper -------------------------------------------------------------------------------- /docker/.config/unityhub/.gitkeeper: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hijimasa/ros2-tools-to-use-unity-like-gazebo/e741e250fbe92d732ba220696c9ea22ebb207404/docker/.config/unityhub/.gitkeeper -------------------------------------------------------------------------------- /docker/.local/share/unity3d/prefs: -------------------------------------------------------------------------------- 1 | 2 | 3 3 | 1920 4 | U2NlbmUvQmFja2dyb3VuZCBmb3IgUHJlZmFiczswLjEzMjswLjIzMTswLjMzOzE= 5 | QWRhcHRpdmUgUHJvYmUgVm9sdW1lcy9MZXZlbCA1IFN1YmRpdmlzaW9uOzAuNzg0MzEzNzswLjg5MDE5NjE7MC4xNTI5NDEyOzE= 6 | 1017 7 | 717 8 | 1 9 | 10 | 11 | MkQvVGlsZSBQYWxldHRlIEJhY2tncm91bmQ7MC4zMjU0OTAyOzAuMzI1NDkwMjswLjMyNTQ5MDI7MC40OTgwMzkyOzAuMTY4NjI3NTswLjE2ODYyNzU7MC4xNjg2Mjc1OzAuNDk4MDM5Mg== 12 | 0 13 | 0 14 | 1017 15 | U2NlbmUvR3JpZDswLjU7MC41OzAuNTswLjQ= 16 | 0 17 | U2NlbmUvWSBBeGlzOzAuNjAzOTIxNjswLjk1Mjk0MTI7MC4yODIzNTM7MC45Mw== 18 | 1043 19 | U2NlbmUvU2VsZWN0ZWQgT3V0bGluZTsxOzAuNDswOzA= 20 | 1 21 | QW5pbWF0aW9uL1Byb3BlcnR5IENhbmRpZGF0ZTsxOzAuNzswLjY7MTsxOzAuNjc7MC40Mzsx 22 | 1 23 | 1 24 | U2NlbmUvU2VsZWN0ZWQgQ2hpbGRyZW4gT3V0bGluZTswLjM2ODYyNzU7MC40NjY2NjY3OzAuNjA3ODQzMjsw 25 | L2hvbWUvdW5pdHkvd29yay9Sb2JvdF9Vbml0eV9BcHA= 26 | 0 27 | 0 28 | 0 29 | 757 30 | 31 | 33 32 | Q2xvdGgvU2VsZiBvciBJbnRlciBDb2xsaXNpb24gUGFydGljbGUgQ29sb3IgMjswLjU2ODYyNzU7MC45NTY4NjI3OzAuNTQ1MDk4MTswLjU= 33 | 241 34 | 400 35 | 1 36 | VHJhaWwgUmVuZGVyZXIvQm91bmRzOzE7MC45MjE1Njg2OzAuMDE1Njg2Mjg7MQ== 37 | U2NlbmUvQ29uc3RyYWluIFByb3BvcnRpb25zIFNjYWxlIEhhbmRsZTswLjc0NTA5ODE7MC43NDUwOTgxOzAuNzQ1MDk4MTsx 38 | U2NlbmUvUHJlc2VsZWN0aW9uIEhpZ2hsaWdodDswLjc4ODIzNTM7MC43ODQzMTM3OzAuNTY0NzA1OTswLjg5 39 | U2NlbmUvV2lyZWZyYW1lIE92ZXJsYXk7MDswOzA7MC4yNQ== 40 | U2NlbmUvV2lyZWZyYW1lIFNlbGVjdGVkOzAuMzY4NjI3NTswLjQ2NjY2Njc7MC42MDc4NDMyOzAuMjUwOTgwNA== 41 | 3400 42 | QWRhcHRpdmUgUHJvYmUgVm9sdW1lcy9MZXZlbCAyIFN1YmRpdmlzaW9uOzE7MC4zOTIxNTY5OzAuMTc2NDcwNjsx 43 | MkQvVGlsZSBQYWxldHRlIEdyaWQ7MTsxOzE7MC4x 44 | 45 | 3255 46 | 47 | 48 | 330 49 | 287 50 | VHJhaWwgUmVuZGVyZXIvU2hhcGUgR2l6bW9zOzAuNTgwMzkyMjswLjg5ODAzOTI7MTswLjk= 51 | U2NlbmUvVUkgQ29sbGlkZXIgSGFuZGxlOzAuNTY4NjI3NTswLjk1Njg2Mjc7MC41NDUwOTgxOzAuODIzNTI5NA== 52 | U2NlbmUvVm9sdW1lIEdpem1vOzAuMjswLjg7MC4xOzAuMTI1 53 | 54 | 0 55 | 56 | 57 | Q3VzdG9tIFRvb2w= 58 | U2NlbmUvQmFjay1GYWNpbmcgR2VvbWV0cnk7MC40OTQxMTc2OzAuMTgwMzkyMjswLjg1MDk4MDQ7MQ== 59 | 37 60 | QWRhcHRpdmUgUHJvYmUgVm9sdW1lcy9MZXZlbCA0IFN1YmRpdmlzaW9uOzE7MC4yNzg0MzE0OzAuMzgwMzkyMjsx 61 | U2NlbmUvV2lyZWZyYW1lOzA7MDswOzAuNQ== 62 | 0 63 | 2832 64 | RW5nbGlzaA== 65 | 976 66 | QWRhcHRpdmUgUHJvYmUgVm9sdW1lcy9MZXZlbCAzIFN1YmRpdmlzaW9uOzAuMjAzOTIxNjswLjM0MTE3NjU7MTsx 67 | 101 68 | 69 | 70 | Q2xvdGgvQnJ1c2ggQ29sb3IgMjswOzA7MDswLjI= 71 | 0 72 | U2NlbmUvWCBBeGlzOzAuODU4ODIzNTswLjI0MzEzNzM7MC4xMTM3MjU1OzAuOTM= 73 | 508 74 | Q2xvdGgvVW5zZWxlY3RlZCBTZWxmIG9yIEludGVyIENvbGxpc2lvbiBQYXJ0aWNsZSBDb2xvciAyOzAuMTswLjE7MC4xOzAuNQ== 75 | 0 76 | L2hvbWUvdW5pdHkvd29yay9Sb2JvdF9Vbml0eV9BcHA= 77 | 37 78 | 0 79 | 0 80 | 1920 81 | L2hvbWUvdW5pdHkvd29yay9Sb2JvdF9Vbml0eV9BcHA= 82 | 83 | 350 84 | U2NlbmUvU2VsZWN0ZWQgQXhpczswLjk2NDcwNTk7MC45NDkwMTk2OzAuMTk2MDc4NDswLjg5 85 | 0 86 | U2NlbmUvRGVjYWw7MTsxOzE7MC4wMzEzNzI1NQ== 87 | 330 88 | 0 89 | UHJlZmVyZW5jZXMvU2NlbmUgVmlldw== 90 | 0 91 | 0 92 | 0 93 | QWRhcHRpdmUgUHJvYmUgVm9sdW1lcy9MZXZlbCAxIFN1YmRpdmlzaW9uOzAuMjExNzY0NzswLjgxNTY4NjM7MC44OTQxMTc3OzE= 94 | 1 95 | 1 96 | UGxheW1vZGUgdGludDswLjg7MC44OzAuODsx 97 | U2NlbmUvTWF0ZXJpYWwgVmFsaWRhdG9yIFZhbHVlIFRvbyBMb3c7MTswOzA7MQ== 98 | 225 99 | 1920 100 | 37 101 | QWRhcHRpdmUgUHJvYmUgVm9sdW1lcy9MZXZlbCAwIFN1YmRpdmlzaW9uOzAuNTI5NDExODswLjEzNzI1NDk7MTsx 102 | U2NlbmUvQmFja2dyb3VuZDswLjI3ODQzMTswLjI3ODQzMTswLjI3ODQzMTsx 103 | 350 104 | 3432 105 | 1 106 | MTA= 107 | 108 | 1 109 | 1 110 | U2NlbmUvWiBBeGlzOzAuMjI3NDUxOzAuNDc4NDMxNDswLjk3MjU0OTswLjkz 111 | 112 | 2668 113 | 1 114 | 0.2 115 | U2NlbmUvQ2VudGVyIEF4aXM7MC44OzAuODswLjg7MC45Mw== 116 | U2NlbmUvUmVjZWl2ZSArIENvbnRyaWJ1dGUgR0kgKExpZ2h0bWFwcyk7MC4xODQzMTM3OzAuNjswLjE2MDc4NDM7MQ== 117 | QW5pbWF0aW9uL1Byb3BlcnR5IEFuaW1hdGVkOzAuODI7MC45NzsxOzE7MC41NDswLjg1OzE7MQ== 118 | 318 119 | 120 | QW5pbWF0aW9uL1Byb3BlcnR5IFJlY29yZGVkOzE7MC42OzAuNjsxOzE7MC41OzAuNTsx 121 | 62 122 | 123 | MkQvVGlsZSBQYWxldHRlIEJhY2tncm91bmQgRWRpdDswLjAwMzkyMTU2OTswLjEzNzI1NDk7MC4zNTI5NDEyOzAuNDk4MDM5MjswLjAwMzkyMTU2OTswLjEzNzI1NDk7MC4zNTI5NDEyOzAuNDk4MDM5Mg== 124 | U2NlbmUvR3VpZGUgTGluZTswLjU7MC41OzAuNTswLjI= 125 | 1 126 | MzQ3NzIwMTA3MjU4NTA3MzQ2MA== 127 | 128 | 415 129 | SW5Qcm9qZWN0 130 | 0 131 | 2044 132 | 24 133 | 440 134 | 135 | U2NlbmUvR3JpZCBDb21wb25lbnQ7MTsxOzE7MC4x 136 | 1920 137 | 0 138 | 0 139 | e30= 140 | 1 141 | X01hc2tUZXgsX05vcm1hbE1hcA== 142 | 0 143 | 250 144 | U2NlbmUvUmVjZWl2ZSArIENvbnRyaWJ1dGUgR0kgKExpZ2h0IFByb2Jlcyk7MC4xMzcyNTQ5OzAuMDU4ODIzNTM7MC42OzE= 145 | 1 146 | 200 147 | 148 | Q2xvdGgvU2VsZWN0ZWQgU2VsZiBvciBJbnRlciBDb2xsaXNpb24gUGFydGljbGUgQ29sb3IgMjswLjI1MDk4MDQ7MC42Mjc0NTE7MTswLjU= 149 | 0 150 | 3251 151 | 1 152 | U2NlbmUvTWF0ZXJpYWwgVmFsaWRhdG9yIFZhbHVlIFRvbyBIaWdoOzA7MDsxOzE= 153 | 0 154 | 1920 155 | 156 | 59 157 | 1920 158 | 10 159 | U2NlbmUvUmVjZWl2ZSBHSSBPbmx5IChMaWdodCBQcm9iZXMpOzAuOTAxOTYwODswLjM4ODIzNTM7MC4wOTgwMzkyMjsx 160 | 1 161 | 0 162 | U2NlbmUvU2VsZWN0ZWQgTWF0ZXJpYWwgSGlnaGxpZ2h0OzAuNzg0MzEzNzswOzA7MC4zOTIxNTY5 163 | 1733154912 164 | 246 165 | U2NlbmUvTWF0ZXJpYWwgVmFsaWRhdG9yIFB1cmUgTWV0YWw7MTsxOzA7MQ== 166 | 1 167 | -------------------------------------------------------------------------------- /docker/Unity/.gitkeeper: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hijimasa/ros2-tools-to-use-unity-like-gazebo/e741e250fbe92d732ba220696c9ea22ebb207404/docker/Unity/.gitkeeper -------------------------------------------------------------------------------- /docker/build-dokcer-image.bash: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | file_dir=`dirname $0` 4 | 5 | # get parameter from system 6 | user=`id -un` 7 | group=`id -gn` 8 | uid=`id -u` 9 | gid=`id -g` 10 | 11 | # build docker images 12 | docker build -t ${user}/ros-humble-jammy-unity \ 13 | --build-arg USER=unity \ 14 | --build-arg UID=${uid} \ 15 | --build-arg GROUP=${group} \ 16 | --build-arg GID=${gid} \ 17 | ${file_dir} 18 | -------------------------------------------------------------------------------- /docker/config/terminator/config: -------------------------------------------------------------------------------- 1 | [global_config] 2 | title_receive_bg_color = "#64d8ff" 3 | enabled_plugins = TerminalShot, LaunchpadCodeURLHandler, APTURLHandler, Logger, LaunchpadBugURLHandler 4 | title_transmit_bg_color = "#15b0dc" 5 | [keybindings] 6 | switch_to_tab_1=1 7 | switch_to_tab_2=2 8 | switch_to_tab_3=3 9 | switch_to_tab_4=4 10 | switch_to_tab_5=5 11 | switch_to_tab_6=6 12 | switch_to_tab_7=7 13 | [profiles] 14 | [[default]] 15 | use_system_font = False 16 | background_darkness = 0.75 17 | background_type = image 18 | scroll_background = False 19 | font = Monospace 12 20 | scrollback_infinite = True 21 | use_custom_command = False 22 | [layouts] 23 | [[default]] 24 | [[[child1]]] 25 | type = Terminal 26 | parent = window0 27 | [[[window0]]] 28 | type = Window 29 | parent = "" 30 | [plugins] 31 | -------------------------------------------------------------------------------- /docker/dockerfile: -------------------------------------------------------------------------------- 1 | FROM ros:humble-ros-base-jammy 2 | 3 | # Arguments 4 | ARG USER=initial 5 | ARG GROUP=initial 6 | ARG UID=1000 7 | ARG GID=${UID} 8 | ARG SHELL=/bin/bash 9 | 10 | # Replace apt urls 11 | RUN sed -i 's@archive.ubuntu.com@ftp.jaist.ac.jp/pub/Linux@g' /etc/apt/sources.list 12 | 13 | # Install packages 14 | RUN apt-get update && apt-get install -y --no-install-recommends \ 15 | wget curl ssh \ 16 | zsh terminator gnome-terminal git vim tig \ 17 | dbus-x11 libglvnd0 libgl1 libglx0 libegl1 libxext6 libx11-6 \ 18 | ros-humble-desktop \ 19 | ros-humble-ament-cmake ros-humble-angles ros-humble-controller-manager \ 20 | ros-humble-pluginlib ros-humble-urdf ros-humble-yaml-cpp-vendor ros-humble-joint-state-pub* \ 21 | ros-humble-cv-bridge ros-humble-diagnostic-updater \ 22 | ros-humble-moveit ros-humble-rosbridge-server ros-humble-urdf-launch ros-humble-urdf-tutorial \ 23 | ros-humble-xacro ros-humble-realtime-tools ros-humble-control-toolbox ros-humble-ros2-control* ros-humble-ros-testing \ 24 | ros-humble-teleop-twist-keyboard ros-humble-vision-msgs ros-humble-image-transport* \ 25 | && apt-get clean \ 26 | && rm -rf /var/lib/apt/lists/* 27 | 28 | # Env vars for the nvidia-container-runtime. 29 | ENV NVIDIA_VISIBLE_DEVICES=all 30 | ENV NVIDIA_DRIVER_CAPABILITIES=graphics,utility,compute 31 | 32 | # Setup users and groups 33 | RUN groupadd --gid ${GID} ${GROUP} \ 34 | && useradd --gid ${GID} --uid ${UID} -ms ${SHELL} ${USER} \ 35 | && mkdir -p /etc/sudoers.d \ 36 | && echo "${USER}:x:${UID}:${UID}:${USER},,,:$HOME:${shell}" >> /etc/passwd \ 37 | && echo "${USER}:x:${UID}:" >> /etc/group \ 38 | && echo "${USER} ALL=(ALL) NOPASSWD: ALL" > "/etc/sudoers.d/${USER}" \ 39 | && chmod 0440 "/etc/sudoers.d/${USER}" 40 | 41 | # copy entrypoint 42 | COPY entrypoint.bash /entrypoint.bash 43 | RUN chmod 777 /entrypoint.bash 44 | 45 | # setup terminator config 46 | RUN mkdir -p /home/${USER}/.config/terminator 47 | COPY config/terminator/config /home/${USER}/.config/terminator 48 | RUN sudo chown -R ${USER}:${GROUP} /home/${USER}/.config 49 | 50 | # Install unityhub 51 | RUN wget -qO - https://hub.unity3d.com/linux/keys/public | gpg --dearmor | sudo tee /usr/share/keyrings/Unity_Technologies_ApS.gpg > /dev/null \ 52 | && sh -c 'echo "deb [signed-by=/usr/share/keyrings/Unity_Technologies_ApS.gpg] https://hub.unity3d.com/linux/repos/deb stable main" > /etc/apt/sources.list.d/unityhub.list' \ 53 | && apt update \ 54 | && apt-get install -y --no-install-recommends unityhub 55 | 56 | RUN wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 57 | RUN apt-get install -y ./google-chrome-stable_current_amd64.deb 58 | 59 | RUN ln -s /usr/lib/x86_64-linux-gnu/libdl.so.2 /usr/lib/x86_64-linux-gnu/libdl.so 60 | 61 | # Switch user to ${USER} 62 | USER ${USER} 63 | 64 | # Make SSH available 65 | EXPOSE 22 66 | 67 | # Switch to user's HOME folder 68 | WORKDIR /home/${USER}/colcon_ws 69 | 70 | RUN echo 'source /opt/ros/humble/setup.bash' >> ~/.bashrc 71 | RUN echo "source /home/${USER}/colcon_ws/install/setup.sh" >> ~/.bashrc 72 | 73 | # CMD ["terminator"] 74 | #ENTRYPOINT ["/entrypoint.bash", "terminator"] 75 | ENTRYPOINT ["/bin/bash"] 76 | -------------------------------------------------------------------------------- /docker/entrypoint.bash: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | source /opt/ros/foxy/setup.bash 4 | exec $@ 5 | -------------------------------------------------------------------------------- /docker/run-docker-container.bash: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | file_dir=`dirname $0` 4 | 5 | # start sharing xhost 6 | xhost +local:root 7 | user=`id -un` 8 | 9 | if type nvidia-container-runtime >/dev/null 2>&1; then 10 | GPU_OPT="--gpus all" 11 | fi 12 | 13 | # run docker 14 | docker run -it --rm \ 15 | --net=host \ 16 | --ipc=host \ 17 | ${GPU_OPT} \ 18 | --privileged \ 19 | -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ 20 | -v $HOME/.Xauthority:$docker/.Xauthority \ 21 | -v ${file_dir}/../work:/home/unity/work \ 22 | -v ${file_dir}/../colcon_ws:/home/unity/colcon_ws \ 23 | -e XAUTHORITY=$home_folder/.Xauthority \ 24 | -e DISPLAY=$DISPLAY \ 25 | -e QT_X11_NO_MITSHM=1 \ 26 | -v /run/dbus/system_bus_socket:/run/dbus/system_bus_socket \ 27 | -v ${file_dir}/.config/unityhub:/home/unity/.config/unityhub \ 28 | -v ${file_dir}/.config/unity3d:/home/unity/.config/unity3d \ 29 | -v ${file_dir}/.config/google-chrome:/home/unity/.config/google-chrome \ 30 | -v ${file_dir}/.local/share/unity3d:/home/unity/.local/share/unity3d \ 31 | -v ${file_dir}/Unity:/home/unity/Unity \ 32 | -it --name "ros-humble-unity" ${user}/ros-humble-jammy-unity 33 | -------------------------------------------------------------------------------- /figs/ros2_unity_demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hijimasa/ros2-tools-to-use-unity-like-gazebo/e741e250fbe92d732ba220696c9ea22ebb207404/figs/ros2_unity_demo.gif -------------------------------------------------------------------------------- /figs/unity_camera_demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hijimasa/ros2-tools-to-use-unity-like-gazebo/e741e250fbe92d732ba220696c9ea22ebb207404/figs/unity_camera_demo.gif -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/InputSystem_Actions.inputactions.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 289c1b55c9541489481df5cc06664110 3 | ScriptedImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 2 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3} 11 | generateWrapperCode: 0 12 | wrapperCodePath: 13 | wrapperClassName: 14 | wrapperCodeNamespace: 15 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Resources.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 111e3782166ab66caae3c73f76986786 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Resources/GeometryCompassSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: 6ad8cf01110e54df290b36a418e91285, type: 3} 13 | m_Name: GeometryCompassSettings 14 | m_EditorClassIdentifier: 15 | m_ZAxisDirection: 0 16 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Resources/GeometryCompassSettings.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a74d6994c6fc1a6f3b7f502f5b6008da 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Resources/ROSConnectionPrefab.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &1374715271904848737 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 7299788588563233463} 12 | - component: {fileID: 1161867812003107743} 13 | m_Layer: 0 14 | m_Name: ROSConnectionPrefab 15 | m_TagString: Untagged 16 | m_Icon: {fileID: 0} 17 | m_NavMeshLayer: 0 18 | m_StaticEditorFlags: 0 19 | m_IsActive: 1 20 | --- !u!4 &7299788588563233463 21 | Transform: 22 | m_ObjectHideFlags: 0 23 | m_CorrespondingSourceObject: {fileID: 0} 24 | m_PrefabInstance: {fileID: 0} 25 | m_PrefabAsset: {fileID: 0} 26 | m_GameObject: {fileID: 1374715271904848737} 27 | serializedVersion: 2 28 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 29 | m_LocalPosition: {x: 0, y: 0, z: 0} 30 | m_LocalScale: {x: 1, y: 1, z: 1} 31 | m_ConstrainProportionsScale: 0 32 | m_Children: [] 33 | m_Father: {fileID: 0} 34 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 35 | --- !u!114 &1161867812003107743 36 | MonoBehaviour: 37 | m_ObjectHideFlags: 0 38 | m_CorrespondingSourceObject: {fileID: 0} 39 | m_PrefabInstance: {fileID: 0} 40 | m_PrefabAsset: {fileID: 0} 41 | m_GameObject: {fileID: 1374715271904848737} 42 | m_Enabled: 1 43 | m_EditorHideFlags: 0 44 | m_Script: {fileID: 11500000, guid: 7acef0b79454c9b4dae3f8139bc4ba77, type: 3} 45 | m_Name: 46 | m_EditorClassIdentifier: 47 | m_RosIPAddress: 127.0.0.1 48 | m_RosPort: 10000 49 | m_ConnectOnStart: 1 50 | m_KeepaliveTime: 1 51 | m_NetworkTimeoutSeconds: 2 52 | m_SleepTimeSeconds: 0.01 53 | m_ShowHUD: 1 54 | m_TFTopics: 55 | - /tf 56 | listenForTFMessages: 1 57 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Resources/ROSConnectionPrefab.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 443a3457615cb18b294ac018372df617 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9c53962885c2c4f449125a979d6ad240 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scenes/SampleScene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 705507994} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 12 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 1 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 500 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 2 83 | m_PVRDenoiserTypeDirect: 0 84 | m_PVRDenoiserTypeIndirect: 0 85 | m_PVRDenoiserTypeAO: 0 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 0 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_LightingSettings: {fileID: 0} 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | debug: 122 | m_Flags: 0 123 | m_NavMeshData: {fileID: 0} 124 | --- !u!1 &705507993 125 | GameObject: 126 | m_ObjectHideFlags: 0 127 | m_CorrespondingSourceObject: {fileID: 0} 128 | m_PrefabInternal: {fileID: 0} 129 | serializedVersion: 6 130 | m_Component: 131 | - component: {fileID: 705507995} 132 | - component: {fileID: 705507994} 133 | m_Layer: 0 134 | m_Name: Directional Light 135 | m_TagString: Untagged 136 | m_Icon: {fileID: 0} 137 | m_NavMeshLayer: 0 138 | m_StaticEditorFlags: 0 139 | m_IsActive: 1 140 | --- !u!108 &705507994 141 | Light: 142 | m_ObjectHideFlags: 0 143 | m_CorrespondingSourceObject: {fileID: 0} 144 | m_PrefabInternal: {fileID: 0} 145 | m_GameObject: {fileID: 705507993} 146 | m_Enabled: 1 147 | serializedVersion: 8 148 | m_Type: 1 149 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} 150 | m_Intensity: 1 151 | m_Range: 10 152 | m_SpotAngle: 30 153 | m_CookieSize: 10 154 | m_Shadows: 155 | m_Type: 2 156 | m_Resolution: -1 157 | m_CustomResolution: -1 158 | m_Strength: 1 159 | m_Bias: 0.05 160 | m_NormalBias: 0.4 161 | m_NearPlane: 0.2 162 | m_Cookie: {fileID: 0} 163 | m_DrawHalo: 0 164 | m_Flare: {fileID: 0} 165 | m_RenderMode: 0 166 | m_CullingMask: 167 | serializedVersion: 2 168 | m_Bits: 4294967295 169 | m_Lightmapping: 1 170 | m_LightShadowCasterMode: 0 171 | m_AreaSize: {x: 1, y: 1} 172 | m_BounceIntensity: 1 173 | m_ColorTemperature: 6570 174 | m_UseColorTemperature: 0 175 | m_ShadowRadius: 0 176 | m_ShadowAngle: 0 177 | --- !u!4 &705507995 178 | Transform: 179 | m_ObjectHideFlags: 0 180 | m_CorrespondingSourceObject: {fileID: 0} 181 | m_PrefabInternal: {fileID: 0} 182 | m_GameObject: {fileID: 705507993} 183 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} 184 | m_LocalPosition: {x: 0, y: 3, z: 0} 185 | m_LocalScale: {x: 1, y: 1, z: 1} 186 | m_Children: [] 187 | m_Father: {fileID: 0} 188 | m_RootOrder: 1 189 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} 190 | --- !u!1 &963194225 191 | GameObject: 192 | m_ObjectHideFlags: 0 193 | m_CorrespondingSourceObject: {fileID: 0} 194 | m_PrefabInternal: {fileID: 0} 195 | serializedVersion: 6 196 | m_Component: 197 | - component: {fileID: 963194228} 198 | - component: {fileID: 963194227} 199 | - component: {fileID: 963194226} 200 | m_Layer: 0 201 | m_Name: Main Camera 202 | m_TagString: MainCamera 203 | m_Icon: {fileID: 0} 204 | m_NavMeshLayer: 0 205 | m_StaticEditorFlags: 0 206 | m_IsActive: 1 207 | --- !u!81 &963194226 208 | AudioListener: 209 | m_ObjectHideFlags: 0 210 | m_CorrespondingSourceObject: {fileID: 0} 211 | m_PrefabInternal: {fileID: 0} 212 | m_GameObject: {fileID: 963194225} 213 | m_Enabled: 1 214 | --- !u!20 &963194227 215 | Camera: 216 | m_ObjectHideFlags: 0 217 | m_CorrespondingSourceObject: {fileID: 0} 218 | m_PrefabInternal: {fileID: 0} 219 | m_GameObject: {fileID: 963194225} 220 | m_Enabled: 1 221 | serializedVersion: 2 222 | m_ClearFlags: 1 223 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 224 | m_projectionMatrixMode: 1 225 | m_SensorSize: {x: 36, y: 24} 226 | m_LensShift: {x: 0, y: 0} 227 | m_GateFitMode: 2 228 | m_FocalLength: 50 229 | m_NormalizedViewPortRect: 230 | serializedVersion: 2 231 | x: 0 232 | y: 0 233 | width: 1 234 | height: 1 235 | near clip plane: 0.3 236 | far clip plane: 1000 237 | field of view: 60 238 | orthographic: 0 239 | orthographic size: 5 240 | m_Depth: -1 241 | m_CullingMask: 242 | serializedVersion: 2 243 | m_Bits: 4294967295 244 | m_RenderingPath: -1 245 | m_TargetTexture: {fileID: 0} 246 | m_TargetDisplay: 0 247 | m_TargetEye: 3 248 | m_HDR: 1 249 | m_AllowMSAA: 1 250 | m_AllowDynamicResolution: 0 251 | m_ForceIntoRT: 0 252 | m_OcclusionCulling: 1 253 | m_StereoConvergence: 10 254 | m_StereoSeparation: 0.022 255 | --- !u!4 &963194228 256 | Transform: 257 | m_ObjectHideFlags: 0 258 | m_CorrespondingSourceObject: {fileID: 0} 259 | m_PrefabInternal: {fileID: 0} 260 | m_GameObject: {fileID: 963194225} 261 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 262 | m_LocalPosition: {x: 0, y: 1, z: -10} 263 | m_LocalScale: {x: 1, y: 1, z: 1} 264 | m_Children: [] 265 | m_Father: {fileID: 0} 266 | m_RootOrder: 0 267 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 268 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scenes/SampleScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9fc0d4010bbf28b4594072e72b8655ab 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 80466b41a15df7f1eb8be59da0ce1b67 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scripts/CameraMover.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | using UnityEngine.SocialPlatforms; 6 | using System.Text; 7 | using System.Threading; 8 | using System.Threading.Tasks; 9 | using UnityEditor; 10 | 11 | [System.Serializable] 12 | public class PreviousScenePosition 13 | { 14 | public Vector3 editorCamPosition; 15 | public Quaternion editorCamRotation; 16 | } 17 | 18 | public class CameraMover : MonoBehaviour 19 | { 20 | [SerializeField, Range(0.1f, 10.0f)] 21 | private float _positionStep = 2.0f; 22 | [SerializeField, Range(30.0f, 150.0f)] 23 | private float _mouseSensitive = 90.0f; 24 | 25 | private bool _cameraMoveActive = true; 26 | private Transform _camTransform; 27 | private Vector3 _startMousePos; 28 | private Vector3 _presentCamRotation; 29 | private Vector3 _presentCamPos; 30 | private Quaternion _initialCamRotation; 31 | private bool _uiMessageActiv; 32 | private GameObject mainCamera = null; 33 | 34 | private void OnEnable() 35 | { 36 | EditorApplication.playModeStateChanged += OnPlayModeChanged; 37 | } 38 | 39 | private void OnPlayModeChanged(PlayModeStateChange state) 40 | { 41 | if (state == PlayModeStateChange.ExitingPlayMode) 42 | { 43 | if (mainCamera == null) 44 | { 45 | mainCamera = GameObject.Find("Main Camera"); 46 | } 47 | Selection.activeGameObject = mainCamera; 48 | EditorApplication.ExecuteMenuItem( 49 | "GameObject/Align View to Selected"); 50 | } 51 | else if (state == PlayModeStateChange.EnteredPlayMode) 52 | { 53 | if (mainCamera == null) 54 | { 55 | mainCamera = GameObject.Find("Main Camera"); 56 | } 57 | Selection.activeGameObject = mainCamera; 58 | EditorApplication.ExecuteMenuItem( 59 | "GameObject/Align With View"); 60 | } 61 | } 62 | 63 | void Start() 64 | { 65 | _camTransform = this.gameObject.transform; 66 | if (mainCamera == null) 67 | { 68 | mainCamera = GameObject.Find("Main Camera"); 69 | } 70 | if (mainCamera != null) 71 | { 72 | mainCamera.transform.SetParent(this.transform); 73 | Debug.Log("Main Camera is set under CameraMover"); 74 | } 75 | else 76 | { 77 | Debug.LogWarning("Main Camera not found"); 78 | } 79 | 80 | _initialCamRotation = this.gameObject.transform.rotation; 81 | } 82 | 83 | void Update() 84 | { 85 | CamControlIsActive(); 86 | if (_cameraMoveActive) 87 | { 88 | ResetCameraRotation(); 89 | CameraRotationMouseControl(); 90 | CameraSlideMouseControl(); 91 | CameraPositionKeyControl(); 92 | CameraZoomMouseScroll(); 93 | } 94 | } 95 | 96 | public void CamControlIsActive() 97 | { 98 | if (Input.GetKeyDown(KeyCode.Space)) 99 | { 100 | _cameraMoveActive = !_cameraMoveActive; 101 | 102 | if (_uiMessageActiv == false) 103 | { 104 | StartCoroutine(DisplayUiMessage()); 105 | } 106 | Debug.Log("CamControl : " + _cameraMoveActive); 107 | } 108 | } 109 | 110 | private void ResetCameraRotation() 111 | { 112 | if(Input.GetKeyDown(KeyCode.P)) 113 | { 114 | this.gameObject.transform.rotation = _initialCamRotation; 115 | Debug.Log("Cam Rotate : " + _initialCamRotation.ToString()); 116 | } 117 | } 118 | 119 | private void CameraRotationMouseControl() 120 | { 121 | if (Input.GetMouseButtonDown(1)) 122 | { 123 | _startMousePos = Input.mousePosition; 124 | _presentCamRotation.x = _camTransform.transform.eulerAngles.x; 125 | _presentCamRotation.y = _camTransform.transform.eulerAngles.y; 126 | } 127 | 128 | if (Input.GetMouseButton(1)) 129 | { 130 | float x = (_startMousePos.x - Input.mousePosition.x) / Screen.width; 131 | float y = (_startMousePos.y - Input.mousePosition.y) / Screen.height; 132 | float eulerX = _presentCamRotation.x + y * _mouseSensitive; 133 | float eulerY = _presentCamRotation.y + x * _mouseSensitive; 134 | _camTransform.rotation = Quaternion.Euler(eulerX, eulerY, 0); 135 | } 136 | } 137 | 138 | private void CameraSlideMouseControl() 139 | { 140 | if (Input.GetMouseButtonDown(2)) 141 | { 142 | _startMousePos = Input.mousePosition; 143 | _presentCamPos = _camTransform.position; 144 | } 145 | 146 | if (Input.GetMouseButton(2)) 147 | { 148 | float x = (_startMousePos.x - Input.mousePosition.x) / Screen.width; 149 | float y = (_startMousePos.y - Input.mousePosition.y) / Screen.height; 150 | x = x * _positionStep; 151 | y = y * _positionStep; 152 | Vector3 velocity = _camTransform.rotation * new Vector3(x, y, 0); 153 | velocity = velocity + _presentCamPos; 154 | _camTransform.position = velocity; 155 | } 156 | } 157 | 158 | private void CameraZoomMouseScroll() 159 | { 160 | float scrollInput = Input.GetAxis("Mouse ScrollWheel"); 161 | _camTransform.position += _camTransform.forward * scrollInput * _positionStep; 162 | } 163 | 164 | private void CameraPositionKeyControl() 165 | { 166 | Vector3 campos = _camTransform.position; 167 | 168 | if (Input.GetKey(KeyCode.D)) { campos += _camTransform.right * Time.deltaTime * _positionStep; } 169 | if (Input.GetKey(KeyCode.A)) { campos -= _camTransform.right * Time.deltaTime * _positionStep; } 170 | if (Input.GetKey(KeyCode.E)) { campos += _camTransform.up * Time.deltaTime * _positionStep; } 171 | if (Input.GetKey(KeyCode.Q)) { campos -= _camTransform.up * Time.deltaTime * _positionStep; } 172 | if (Input.GetKey(KeyCode.W)) { campos += _camTransform.forward * Time.deltaTime * _positionStep; } 173 | if (Input.GetKey(KeyCode.S)) { campos -= _camTransform.forward * Time.deltaTime * _positionStep; } 174 | 175 | _camTransform.position = campos; 176 | } 177 | 178 | private IEnumerator DisplayUiMessage() 179 | { 180 | _uiMessageActiv = true; 181 | float time = 0; 182 | while (time < 2) 183 | { 184 | time = time + Time.deltaTime; 185 | yield return null; 186 | } 187 | _uiMessageActiv = false; 188 | } 189 | 190 | void OnGUI() 191 | { 192 | if (_uiMessageActiv == false) { return; } 193 | GUI.color = Color.black; 194 | if (_cameraMoveActive == true) 195 | { 196 | GUI.Label(new Rect(Screen.width / 2 - 50, Screen.height - 30, 100, 20), "カメラ操作 有効"); 197 | } 198 | 199 | if (_cameraMoveActive == false) 200 | { 201 | GUI.Label(new Rect(Screen.width / 2 - 50, Screen.height - 30, 100, 20), "カメラ操作 無効"); 202 | } 203 | } 204 | } 205 | 206 | [InitializeOnLoad] 207 | public class CameraMoverPlacer 208 | { 209 | private static CameraMover instance = null; 210 | 211 | private class StartUpData : ScriptableSingleton 212 | { 213 | [SerializeField] 214 | private int _callCount; 215 | public bool IsStartUp() 216 | { 217 | return _callCount++ == 0; 218 | } 219 | } 220 | 221 | static CameraMoverPlacer() 222 | { 223 | EditorApplication.update += CameraMoverPlacer.Initialize; 224 | } 225 | 226 | private static void Initialize() 227 | { 228 | if (!StartUpData.instance.IsStartUp()) 229 | return; 230 | 231 | if (instance != null) return; 232 | 233 | GameObject obj = new GameObject("CameraMover"); 234 | instance = obj.AddComponent(); 235 | 236 | EditorApplication.update -= CameraMoverPlacer.Initialize; 237 | } 238 | 239 | } 240 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scripts/CameraMover.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 695ce8e4aa4f5c260b4982563a6715f1 -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scripts/Clock.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | 4 | namespace Unity.Robotics.Core 5 | { 6 | public static class Clock 7 | { 8 | // Since UnityScaled is the default Unity Time mode, we'll use that for this project 9 | // None of the other time modes are fully validated and guaranteed to be without issues 10 | public enum ClockMode 11 | { 12 | // Time delta scaled by simulation speed to the start of the current frame, since the beginning of the game 13 | UnityScaled, 14 | // Real time delta to the exact moment this function is called, since beginning of the game 15 | // UnityUnscaled, 16 | // Real time delta since the Unix Epoch (1/1/1970 @ midnight) 17 | // UnixEpoch, 18 | // Examples of other potentially useful clock modes... 19 | // UnixEpochUtc, 20 | // DateTimeNow, 21 | // DateTimeNowUtc, 22 | // ExternalClock 23 | } 24 | 25 | public const double k_NanoSecondsInSeconds = 1e9; 26 | 27 | static readonly DateTime k_UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0); 28 | // Time the application started, relative to Unix Epoch 29 | static readonly double k_StartTimeEpochSeconds = SecondsSinceUnixEpoch - Time.realtimeSinceStartupAsDouble; 30 | 31 | static double SecondsSinceUnixEpoch => (DateTime.Now - k_UnixEpoch).TotalSeconds; 32 | static double UnityUnscaledTimeSinceFrameStart => 33 | Time.realtimeSinceStartupAsDouble - Time.unscaledTimeAsDouble; 34 | 35 | public static double TimeSinceFrameStart => Now - FrameStartTimeInSeconds; 36 | 37 | public static double FrameStartTimeInSeconds 38 | { 39 | get 40 | { 41 | return Mode switch 42 | { 43 | // This might be an approximation... needs testing. 44 | ClockMode.UnityScaled => Time.timeAsDouble, 45 | // ClockMode.UnityUnscaled => Time.unscaledTimeAsDouble, 46 | // ClockMode.UnixEpoch => k_StartTimeEpochSeconds + UnityUnscaledTimeSinceFrameStart, 47 | _ => throw new NotImplementedException() 48 | }; 49 | } 50 | } 51 | 52 | public static double NowTimeInSeconds 53 | { 54 | get 55 | { 56 | return Mode switch 57 | { 58 | ClockMode.UnityScaled => Time.timeAsDouble + UnityUnscaledTimeSinceFrameStart * Time.timeScale, 59 | // ClockMode.UnityUnscaled => Time.realtimeSinceStartupAsDouble, 60 | // ClockMode.UnixEpoch => SecondsSinceUnixEpoch, 61 | _ => throw new NotImplementedException() 62 | }; 63 | } 64 | } 65 | 66 | // NOTE: Precision loss vs. other time measurements due to no deltaTimeAsDouble interface 67 | public static float DeltaTimeInSeconds 68 | { 69 | get 70 | { 71 | return Mode switch 72 | { 73 | ClockMode.UnityScaled => Time.deltaTime, 74 | _ => Time.unscaledDeltaTime, 75 | }; 76 | } 77 | } 78 | 79 | public static ClockMode Mode = ClockMode.UnityScaled; 80 | 81 | // Simple interfaces for supporting commonly used vocabulary 82 | public static double Now => NowTimeInSeconds; 83 | public static double time => FrameStartTimeInSeconds; 84 | public static float deltaTime => DeltaTimeInSeconds; 85 | 86 | // WARNING: These functions could potentially mess up threaded access to this clock class. 87 | // Would need to include some mutex locking to keep these calls thread-safe 88 | public static double GetFrameTime(ClockMode temporaryMode) 89 | { 90 | var originalMode = Mode; 91 | Mode = temporaryMode; 92 | var t = FrameStartTimeInSeconds; 93 | Mode = originalMode; 94 | return t; 95 | } 96 | 97 | public static double GetNowTime(ClockMode temporaryMode) 98 | { 99 | var originalMode = Mode; 100 | Mode = temporaryMode; 101 | var t = NowTimeInSeconds; 102 | Mode = originalMode; 103 | return t; 104 | } 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scripts/Clock.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3d81ee60e65bf09559d904f3b92ceac7 -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scripts/JointStatePub.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using Unity.Robotics.ROSTCPConnector; 5 | using RosMessageTypes.Sensor; 6 | using RosMessageTypes.Std; 7 | using RosMessageTypes.BuiltinInterfaces; 8 | 9 | using Unity.Robotics.Core; 10 | 11 | public class JointStatePub : MonoBehaviour 12 | { 13 | public ArticulationBody[] articulationBodies; 14 | public string topicName = "/joint_states"; 15 | public int jointLength = 19; 16 | private ROSConnection ros; 17 | 18 | float time; 19 | 20 | public string frameId = ""; 21 | public string[] jointName = new string[] {}; 22 | public double[] position = new double[] {}; 23 | public double[] velocity = new double[] {}; 24 | public double[] effort = new double[] {}; 25 | 26 | void Start() 27 | { 28 | ros = ROSConnection.GetOrCreateInstance(); 29 | ros.RegisterPublisher(topicName, 15); 30 | 31 | position = new double[jointName.Length]; 32 | velocity = new double[jointName.Length]; 33 | effort = new double[jointName.Length]; 34 | } 35 | 36 | void FixedUpdate() 37 | { 38 | time += Time.deltaTime; 39 | if (time<0.05f) return; 40 | time = 0.0f; 41 | var timestamp = new TimeStamp(Clock.Now); 42 | 43 | for (int i = 0; i < articulationBodies.Length; i++) 44 | { 45 | ArticulationDrive xDrive = this.articulationBodies[i].xDrive; 46 | position[i] = articulationBodies[i].jointPosition[0]/Mathf.Rad2Deg; 47 | velocity[i] = articulationBodies[i].jointVelocity[0]/Mathf.Rad2Deg; 48 | effort[i] = articulationBodies[i].driveForce[0]/Mathf.Rad2Deg; 49 | } 50 | 51 | JointStateMsg joint_msg = new JointStateMsg{ 52 | header = new HeaderMsg 53 | { 54 | frame_id = frameId, 55 | stamp = new TimeMsg{ 56 | sec = timestamp.Seconds, 57 | nanosec = timestamp.NanoSeconds, 58 | }, 59 | }, 60 | name = jointName, 61 | position = position, 62 | velocity = velocity, 63 | effort = effort, 64 | }; 65 | 66 | ros.Publish(topicName, joint_msg); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scripts/JointStatePub.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 623eceee14198ef6a91ebe39247aa5c2 -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scripts/JointStateSub.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using Unity.Robotics.ROSTCPConnector; 5 | using RosMessageTypes.Sensor; 6 | 7 | public class JointStateSub : MonoBehaviour 8 | { 9 | public ArticulationBody[] articulationBodies; 10 | public string[] jointName; 11 | public string topicName = "/joint_states"; 12 | public int jointLength = 19; 13 | private List jointNameList; 14 | private ROSConnection ros; 15 | 16 | // Set Parameters 17 | public float stiffness = 0F; 18 | public float damping = 10000000F; 19 | public float forceLimit = float.MaxValue; 20 | 21 | void Start() 22 | { 23 | ros = ROSConnection.GetOrCreateInstance(); 24 | ros.Subscribe(topicName, Callback); 25 | 26 | jointNameList = new List(jointName); 27 | } 28 | 29 | void Callback(JointStateMsg msg) 30 | { 31 | int index; 32 | for (int i = 0; i < msg.name.Length; i++) 33 | { 34 | index = jointNameList.IndexOf(msg.name[i]); 35 | if (index != -1) 36 | { 37 | ArticulationDrive aDrive = articulationBodies[index].xDrive; 38 | if (i < msg.position.Length) 39 | aDrive.target = Mathf.Rad2Deg * (float)msg.position[i]; 40 | if (i < msg.velocity.Length) 41 | aDrive.targetVelocity = Mathf.Rad2Deg * (float)msg.velocity[i]; 42 | float effort = float.NaN; 43 | if (i < msg.effort.Length) 44 | effort = (float) msg.effort[i]; 45 | articulationBodies[index].xDrive = aDrive; 46 | } 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scripts/JointStateSub.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c348625a04b6f6e86aca4424b937ddbb -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scripts/RemoteCommandListener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0f1e87bcaf0d78e8ebbe4489dd302513 -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scripts/TimeStamp.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | using RosMessageTypes.BuiltinInterfaces; 4 | 5 | namespace Unity.Robotics.Core 6 | { 7 | public readonly struct TimeStamp 8 | { 9 | public const double k_NanosecondsInSecond = 1e9f; 10 | 11 | // TODO: specify base time this stamp is measured against (Sim 0, time since application start, etc.) 12 | public readonly int Seconds; 13 | public readonly uint NanoSeconds; 14 | 15 | // (From Unity Time.time) 16 | public TimeStamp(double timeInSeconds) 17 | { 18 | var sec = Math.Floor(timeInSeconds); 19 | var nsec = (timeInSeconds - sec) * k_NanosecondsInSecond; 20 | // TODO: Check for negatives to ensure safe cast 21 | Seconds = (int)sec; 22 | NanoSeconds = (uint)nsec; 23 | } 24 | 25 | // (From a ROS2 Time message) 26 | TimeStamp(int sec, uint nsec) 27 | { 28 | Seconds = sec; 29 | NanoSeconds = nsec; 30 | } 31 | 32 | // NOTE: We could define these operators in a transport-specific extension package 33 | public static implicit operator TimeMsg(TimeStamp stamp) 34 | { 35 | return new TimeMsg(stamp.Seconds, stamp.NanoSeconds); 36 | } 37 | 38 | public static implicit operator TimeStamp(TimeMsg stamp) 39 | { 40 | return new TimeStamp(stamp.sec, stamp.nanosec); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Scripts/TimeStamp.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d5560fa08a5007e268d93e51b7f335f1 -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Urdf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5729ce2db2c08a3cbb2a30921f875cfc 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Assets/Urdf/.gitkeeper: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hijimasa/ros2-tools-to-use-unity-like-gazebo/e741e250fbe92d732ba220696c9ea22ebb207404/work/Robot_Unity_App/Assets/Urdf/.gitkeeper -------------------------------------------------------------------------------- /work/Robot_Unity_App/Logs/.gitkeeper: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hijimasa/ros2-tools-to-use-unity-like-gazebo/e741e250fbe92d732ba220696c9ea22ebb207404/work/Robot_Unity_App/Logs/.gitkeeper -------------------------------------------------------------------------------- /work/Robot_Unity_App/Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.frj.unity-sensors": "file:/home/unity/work/UnitySensors/Assets/UnitySensors", 4 | "com.frj.unity-sensors-ros": "file:/home/unity/work/UnitySensors/Assets/UnitySensorsROS", 5 | "com.unity.collab-proxy": "2.5.2", 6 | "com.unity.feature.development": "1.0.2", 7 | "com.unity.inputsystem": "1.11.2", 8 | "com.unity.multiplayer.center": "1.0.0", 9 | "com.unity.robotics.ros-tcp-connector": "https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector", 10 | "com.unity.robotics.urdf-importer": "https://github.com/Unity-Technologies/URDF-Importer.git?path=/com.unity.robotics.urdf-importer#v0.5.2", 11 | "com.unity.robotics.visualizations": "https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.visualizations", 12 | "com.unity.timeline": "1.8.7", 13 | "com.unity.ugui": "2.0.0", 14 | "com.unity.visualscripting": "1.9.4", 15 | "com.unity.modules.accessibility": "1.0.0", 16 | "com.unity.modules.ai": "1.0.0", 17 | "com.unity.modules.androidjni": "1.0.0", 18 | "com.unity.modules.animation": "1.0.0", 19 | "com.unity.modules.assetbundle": "1.0.0", 20 | "com.unity.modules.audio": "1.0.0", 21 | "com.unity.modules.cloth": "1.0.0", 22 | "com.unity.modules.director": "1.0.0", 23 | "com.unity.modules.imageconversion": "1.0.0", 24 | "com.unity.modules.imgui": "1.0.0", 25 | "com.unity.modules.jsonserialize": "1.0.0", 26 | "com.unity.modules.particlesystem": "1.0.0", 27 | "com.unity.modules.physics": "1.0.0", 28 | "com.unity.modules.physics2d": "1.0.0", 29 | "com.unity.modules.screencapture": "1.0.0", 30 | "com.unity.modules.terrain": "1.0.0", 31 | "com.unity.modules.terrainphysics": "1.0.0", 32 | "com.unity.modules.tilemap": "1.0.0", 33 | "com.unity.modules.ui": "1.0.0", 34 | "com.unity.modules.uielements": "1.0.0", 35 | "com.unity.modules.umbra": "1.0.0", 36 | "com.unity.modules.unityanalytics": "1.0.0", 37 | "com.unity.modules.unitywebrequest": "1.0.0", 38 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 39 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 40 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 41 | "com.unity.modules.unitywebrequestwww": "1.0.0", 42 | "com.unity.modules.vehicles": "1.0.0", 43 | "com.unity.modules.video": "1.0.0", 44 | "com.unity.modules.vr": "1.0.0", 45 | "com.unity.modules.wind": "1.0.0", 46 | "com.unity.modules.xr": "1.0.0" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/Packages/packages-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.frj.unity-sensors": { 4 | "version": "file:/home/unity/work/UnitySensors/Assets/UnitySensors", 5 | "depth": 0, 6 | "source": "local", 7 | "dependencies": { 8 | "com.unity.burst": "1.6.6" 9 | } 10 | }, 11 | "com.frj.unity-sensors-ros": { 12 | "version": "file:/home/unity/work/UnitySensors/Assets/UnitySensorsROS", 13 | "depth": 0, 14 | "source": "local", 15 | "dependencies": { 16 | "com.frj.unity-sensors": "2.0.4", 17 | "com.unity.robotics.ros-tcp-connector": "0.7.0-preview" 18 | } 19 | }, 20 | "com.unity.burst": { 21 | "version": "1.8.18", 22 | "depth": 1, 23 | "source": "registry", 24 | "dependencies": { 25 | "com.unity.mathematics": "1.2.1", 26 | "com.unity.modules.jsonserialize": "1.0.0" 27 | }, 28 | "url": "https://packages.unity.com" 29 | }, 30 | "com.unity.collab-proxy": { 31 | "version": "2.5.2", 32 | "depth": 0, 33 | "source": "registry", 34 | "dependencies": {}, 35 | "url": "https://packages.unity.com" 36 | }, 37 | "com.unity.editorcoroutines": { 38 | "version": "1.0.0", 39 | "depth": 1, 40 | "source": "registry", 41 | "dependencies": {}, 42 | "url": "https://packages.unity.com" 43 | }, 44 | "com.unity.ext.nunit": { 45 | "version": "2.0.5", 46 | "depth": 2, 47 | "source": "registry", 48 | "dependencies": {}, 49 | "url": "https://packages.unity.com" 50 | }, 51 | "com.unity.feature.development": { 52 | "version": "1.0.2", 53 | "depth": 0, 54 | "source": "builtin", 55 | "dependencies": { 56 | "com.unity.ide.visualstudio": "2.0.22", 57 | "com.unity.ide.rider": "3.0.31", 58 | "com.unity.editorcoroutines": "1.0.0", 59 | "com.unity.performance.profile-analyzer": "1.2.2", 60 | "com.unity.test-framework": "1.4.5", 61 | "com.unity.testtools.codecoverage": "1.2.6" 62 | } 63 | }, 64 | "com.unity.ide.rider": { 65 | "version": "3.0.31", 66 | "depth": 1, 67 | "source": "registry", 68 | "dependencies": { 69 | "com.unity.ext.nunit": "1.0.6" 70 | }, 71 | "url": "https://packages.unity.com" 72 | }, 73 | "com.unity.ide.visualstudio": { 74 | "version": "2.0.22", 75 | "depth": 1, 76 | "source": "registry", 77 | "dependencies": { 78 | "com.unity.test-framework": "1.1.9" 79 | }, 80 | "url": "https://packages.unity.com" 81 | }, 82 | "com.unity.inputsystem": { 83 | "version": "1.11.2", 84 | "depth": 0, 85 | "source": "registry", 86 | "dependencies": { 87 | "com.unity.modules.uielements": "1.0.0" 88 | }, 89 | "url": "https://packages.unity.com" 90 | }, 91 | "com.unity.mathematics": { 92 | "version": "1.3.2", 93 | "depth": 2, 94 | "source": "registry", 95 | "dependencies": {}, 96 | "url": "https://packages.unity.com" 97 | }, 98 | "com.unity.multiplayer.center": { 99 | "version": "1.0.0", 100 | "depth": 0, 101 | "source": "builtin", 102 | "dependencies": { 103 | "com.unity.modules.uielements": "1.0.0" 104 | } 105 | }, 106 | "com.unity.performance.profile-analyzer": { 107 | "version": "1.2.2", 108 | "depth": 1, 109 | "source": "registry", 110 | "dependencies": {}, 111 | "url": "https://packages.unity.com" 112 | }, 113 | "com.unity.robotics.ros-tcp-connector": { 114 | "version": "https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector", 115 | "depth": 0, 116 | "source": "git", 117 | "dependencies": {}, 118 | "hash": "c27f00c6cf750d2d0564349b3039d19aa3925e7c" 119 | }, 120 | "com.unity.robotics.urdf-importer": { 121 | "version": "https://github.com/Unity-Technologies/URDF-Importer.git?path=/com.unity.robotics.urdf-importer#v0.5.2", 122 | "depth": 0, 123 | "source": "git", 124 | "dependencies": { 125 | "com.unity.editorcoroutines": "1.0.0" 126 | }, 127 | "hash": "90f353e4352aae4df52fa2c05e49b804631d2a63" 128 | }, 129 | "com.unity.robotics.visualizations": { 130 | "version": "https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.visualizations", 131 | "depth": 0, 132 | "source": "git", 133 | "dependencies": {}, 134 | "hash": "c27f00c6cf750d2d0564349b3039d19aa3925e7c" 135 | }, 136 | "com.unity.settings-manager": { 137 | "version": "2.0.1", 138 | "depth": 2, 139 | "source": "registry", 140 | "dependencies": {}, 141 | "url": "https://packages.unity.com" 142 | }, 143 | "com.unity.test-framework": { 144 | "version": "1.4.5", 145 | "depth": 1, 146 | "source": "registry", 147 | "dependencies": { 148 | "com.unity.ext.nunit": "2.0.3", 149 | "com.unity.modules.imgui": "1.0.0", 150 | "com.unity.modules.jsonserialize": "1.0.0" 151 | }, 152 | "url": "https://packages.unity.com" 153 | }, 154 | "com.unity.testtools.codecoverage": { 155 | "version": "1.2.6", 156 | "depth": 1, 157 | "source": "registry", 158 | "dependencies": { 159 | "com.unity.test-framework": "1.0.16", 160 | "com.unity.settings-manager": "1.0.1" 161 | }, 162 | "url": "https://packages.unity.com" 163 | }, 164 | "com.unity.timeline": { 165 | "version": "1.8.7", 166 | "depth": 0, 167 | "source": "registry", 168 | "dependencies": { 169 | "com.unity.modules.audio": "1.0.0", 170 | "com.unity.modules.director": "1.0.0", 171 | "com.unity.modules.animation": "1.0.0", 172 | "com.unity.modules.particlesystem": "1.0.0" 173 | }, 174 | "url": "https://packages.unity.com" 175 | }, 176 | "com.unity.ugui": { 177 | "version": "2.0.0", 178 | "depth": 0, 179 | "source": "builtin", 180 | "dependencies": { 181 | "com.unity.modules.ui": "1.0.0", 182 | "com.unity.modules.imgui": "1.0.0" 183 | } 184 | }, 185 | "com.unity.visualscripting": { 186 | "version": "1.9.4", 187 | "depth": 0, 188 | "source": "registry", 189 | "dependencies": { 190 | "com.unity.ugui": "1.0.0", 191 | "com.unity.modules.jsonserialize": "1.0.0" 192 | }, 193 | "url": "https://packages.unity.com" 194 | }, 195 | "com.unity.modules.accessibility": { 196 | "version": "1.0.0", 197 | "depth": 0, 198 | "source": "builtin", 199 | "dependencies": {} 200 | }, 201 | "com.unity.modules.ai": { 202 | "version": "1.0.0", 203 | "depth": 0, 204 | "source": "builtin", 205 | "dependencies": {} 206 | }, 207 | "com.unity.modules.androidjni": { 208 | "version": "1.0.0", 209 | "depth": 0, 210 | "source": "builtin", 211 | "dependencies": {} 212 | }, 213 | "com.unity.modules.animation": { 214 | "version": "1.0.0", 215 | "depth": 0, 216 | "source": "builtin", 217 | "dependencies": {} 218 | }, 219 | "com.unity.modules.assetbundle": { 220 | "version": "1.0.0", 221 | "depth": 0, 222 | "source": "builtin", 223 | "dependencies": {} 224 | }, 225 | "com.unity.modules.audio": { 226 | "version": "1.0.0", 227 | "depth": 0, 228 | "source": "builtin", 229 | "dependencies": {} 230 | }, 231 | "com.unity.modules.cloth": { 232 | "version": "1.0.0", 233 | "depth": 0, 234 | "source": "builtin", 235 | "dependencies": { 236 | "com.unity.modules.physics": "1.0.0" 237 | } 238 | }, 239 | "com.unity.modules.director": { 240 | "version": "1.0.0", 241 | "depth": 0, 242 | "source": "builtin", 243 | "dependencies": { 244 | "com.unity.modules.audio": "1.0.0", 245 | "com.unity.modules.animation": "1.0.0" 246 | } 247 | }, 248 | "com.unity.modules.hierarchycore": { 249 | "version": "1.0.0", 250 | "depth": 1, 251 | "source": "builtin", 252 | "dependencies": {} 253 | }, 254 | "com.unity.modules.imageconversion": { 255 | "version": "1.0.0", 256 | "depth": 0, 257 | "source": "builtin", 258 | "dependencies": {} 259 | }, 260 | "com.unity.modules.imgui": { 261 | "version": "1.0.0", 262 | "depth": 0, 263 | "source": "builtin", 264 | "dependencies": {} 265 | }, 266 | "com.unity.modules.jsonserialize": { 267 | "version": "1.0.0", 268 | "depth": 0, 269 | "source": "builtin", 270 | "dependencies": {} 271 | }, 272 | "com.unity.modules.particlesystem": { 273 | "version": "1.0.0", 274 | "depth": 0, 275 | "source": "builtin", 276 | "dependencies": {} 277 | }, 278 | "com.unity.modules.physics": { 279 | "version": "1.0.0", 280 | "depth": 0, 281 | "source": "builtin", 282 | "dependencies": {} 283 | }, 284 | "com.unity.modules.physics2d": { 285 | "version": "1.0.0", 286 | "depth": 0, 287 | "source": "builtin", 288 | "dependencies": {} 289 | }, 290 | "com.unity.modules.screencapture": { 291 | "version": "1.0.0", 292 | "depth": 0, 293 | "source": "builtin", 294 | "dependencies": { 295 | "com.unity.modules.imageconversion": "1.0.0" 296 | } 297 | }, 298 | "com.unity.modules.subsystems": { 299 | "version": "1.0.0", 300 | "depth": 1, 301 | "source": "builtin", 302 | "dependencies": { 303 | "com.unity.modules.jsonserialize": "1.0.0" 304 | } 305 | }, 306 | "com.unity.modules.terrain": { 307 | "version": "1.0.0", 308 | "depth": 0, 309 | "source": "builtin", 310 | "dependencies": {} 311 | }, 312 | "com.unity.modules.terrainphysics": { 313 | "version": "1.0.0", 314 | "depth": 0, 315 | "source": "builtin", 316 | "dependencies": { 317 | "com.unity.modules.physics": "1.0.0", 318 | "com.unity.modules.terrain": "1.0.0" 319 | } 320 | }, 321 | "com.unity.modules.tilemap": { 322 | "version": "1.0.0", 323 | "depth": 0, 324 | "source": "builtin", 325 | "dependencies": { 326 | "com.unity.modules.physics2d": "1.0.0" 327 | } 328 | }, 329 | "com.unity.modules.ui": { 330 | "version": "1.0.0", 331 | "depth": 0, 332 | "source": "builtin", 333 | "dependencies": {} 334 | }, 335 | "com.unity.modules.uielements": { 336 | "version": "1.0.0", 337 | "depth": 0, 338 | "source": "builtin", 339 | "dependencies": { 340 | "com.unity.modules.ui": "1.0.0", 341 | "com.unity.modules.imgui": "1.0.0", 342 | "com.unity.modules.jsonserialize": "1.0.0", 343 | "com.unity.modules.hierarchycore": "1.0.0" 344 | } 345 | }, 346 | "com.unity.modules.umbra": { 347 | "version": "1.0.0", 348 | "depth": 0, 349 | "source": "builtin", 350 | "dependencies": {} 351 | }, 352 | "com.unity.modules.unityanalytics": { 353 | "version": "1.0.0", 354 | "depth": 0, 355 | "source": "builtin", 356 | "dependencies": { 357 | "com.unity.modules.unitywebrequest": "1.0.0", 358 | "com.unity.modules.jsonserialize": "1.0.0" 359 | } 360 | }, 361 | "com.unity.modules.unitywebrequest": { 362 | "version": "1.0.0", 363 | "depth": 0, 364 | "source": "builtin", 365 | "dependencies": {} 366 | }, 367 | "com.unity.modules.unitywebrequestassetbundle": { 368 | "version": "1.0.0", 369 | "depth": 0, 370 | "source": "builtin", 371 | "dependencies": { 372 | "com.unity.modules.assetbundle": "1.0.0", 373 | "com.unity.modules.unitywebrequest": "1.0.0" 374 | } 375 | }, 376 | "com.unity.modules.unitywebrequestaudio": { 377 | "version": "1.0.0", 378 | "depth": 0, 379 | "source": "builtin", 380 | "dependencies": { 381 | "com.unity.modules.unitywebrequest": "1.0.0", 382 | "com.unity.modules.audio": "1.0.0" 383 | } 384 | }, 385 | "com.unity.modules.unitywebrequesttexture": { 386 | "version": "1.0.0", 387 | "depth": 0, 388 | "source": "builtin", 389 | "dependencies": { 390 | "com.unity.modules.unitywebrequest": "1.0.0", 391 | "com.unity.modules.imageconversion": "1.0.0" 392 | } 393 | }, 394 | "com.unity.modules.unitywebrequestwww": { 395 | "version": "1.0.0", 396 | "depth": 0, 397 | "source": "builtin", 398 | "dependencies": { 399 | "com.unity.modules.unitywebrequest": "1.0.0", 400 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 401 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 402 | "com.unity.modules.audio": "1.0.0", 403 | "com.unity.modules.assetbundle": "1.0.0", 404 | "com.unity.modules.imageconversion": "1.0.0" 405 | } 406 | }, 407 | "com.unity.modules.vehicles": { 408 | "version": "1.0.0", 409 | "depth": 0, 410 | "source": "builtin", 411 | "dependencies": { 412 | "com.unity.modules.physics": "1.0.0" 413 | } 414 | }, 415 | "com.unity.modules.video": { 416 | "version": "1.0.0", 417 | "depth": 0, 418 | "source": "builtin", 419 | "dependencies": { 420 | "com.unity.modules.audio": "1.0.0", 421 | "com.unity.modules.ui": "1.0.0", 422 | "com.unity.modules.unitywebrequest": "1.0.0" 423 | } 424 | }, 425 | "com.unity.modules.vr": { 426 | "version": "1.0.0", 427 | "depth": 0, 428 | "source": "builtin", 429 | "dependencies": { 430 | "com.unity.modules.jsonserialize": "1.0.0", 431 | "com.unity.modules.physics": "1.0.0", 432 | "com.unity.modules.xr": "1.0.0" 433 | } 434 | }, 435 | "com.unity.modules.wind": { 436 | "version": "1.0.0", 437 | "depth": 0, 438 | "source": "builtin", 439 | "dependencies": {} 440 | }, 441 | "com.unity.modules.xr": { 442 | "version": "1.0.0", 443 | "depth": 0, 444 | "source": "builtin", 445 | "dependencies": { 446 | "com.unity.modules.physics": "1.0.0", 447 | "com.unity.modules.jsonserialize": "1.0.0", 448 | "com.unity.modules.subsystems": "1.0.0" 449 | } 450 | } 451 | } 452 | } 453 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Volume: 1 8 | Rolloff Scale: 1 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_SampleRate: 0 12 | m_DSPBufferSize: 1024 13 | m_VirtualVoiceCount: 512 14 | m_RealVoiceCount: 32 15 | m_SpatializerPlugin: 16 | m_AmbisonicDecoderPlugin: 17 | m_DisableAudio: 0 18 | m_VirtualizeEffects: 1 19 | m_RequestedDSPBufferSize: 1024 20 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 17 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_DefaultMaxDepenetrationVelocity: 10 11 | m_SleepThreshold: 0.005 12 | m_DefaultContactOffset: 0.01 13 | m_DefaultSolverIterations: 120 14 | m_DefaultSolverVelocityIterations: 120 15 | m_QueriesHitBackfaces: 0 16 | m_QueriesHitTriggers: 1 17 | m_EnableAdaptiveForce: 1 18 | m_ClothInterCollisionDistance: 0 19 | m_ClothInterCollisionStiffness: 0 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_SimulationMode: 0 22 | m_AutoSyncTransforms: 0 23 | m_ReuseCollisionCallbacks: 1 24 | m_InvokeCollisionCallbacks: 1 25 | m_ClothInterCollisionSettingsToggle: 0 26 | m_ClothGravity: {x: 0, y: -9.81, z: 0} 27 | m_ContactPairsMode: 0 28 | m_BroadphaseType: 0 29 | m_FrictionType: 0 30 | m_EnableEnhancedDeterminism: 0 31 | m_EnableUnifiedHeightmaps: 1 32 | m_ImprovedPatchFriction: 1 33 | m_SolverType: 1 34 | m_DefaultMaxAngularSpeed: 7 35 | m_ScratchBufferChunkCount: 4 36 | m_CurrentBackendId: 4072204805 37 | m_FastMotionThreshold: 3.4028235e+38 38 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: [] 8 | m_configObjects: 9 | com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 289c1b55c9541489481df5cc06664110, type: 3} 10 | m_UseUCBPForAssetBundles: 0 11 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_SerializationMode: 2 8 | m_LineEndingsForNewScripts: 0 9 | m_DefaultBehaviorMode: 0 10 | m_PrefabRegularEnvironment: {fileID: 0} 11 | m_PrefabUIEnvironment: {fileID: 0} 12 | m_SpritePackerMode: 0 13 | m_SpritePackerCacheSize: 10 14 | m_SpritePackerPaddingPower: 1 15 | m_Bc7TextureCompressor: 0 16 | m_EtcTextureCompressorBehavior: 1 17 | m_EtcTextureFastCompressor: 1 18 | m_EtcTextureNormalCompressor: 2 19 | m_EtcTextureBestCompressor: 4 20 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref 21 | m_ProjectGenerationRootNamespace: 22 | m_EnableTextureStreamingInEditMode: 1 23 | m_EnableTextureStreamingInPlayMode: 1 24 | m_EnableEditorAsyncCPUTextureLoading: 0 25 | m_AsyncShaderCompilation: 1 26 | m_PrefabModeAllowAutoSave: 1 27 | m_EnterPlayModeOptionsEnabled: 1 28 | m_EnterPlayModeOptions: 0 29 | m_GameObjectNamingDigits: 1 30 | m_GameObjectNamingScheme: 0 31 | m_AssetNamingUsesSpace: 1 32 | m_InspectorUseIMGUIDefaultInspector: 0 33 | m_UseLegacyProbeSampleCount: 0 34 | m_SerializeInlineMappingsOnOneLine: 1 35 | m_DisableCookiesInLightmapper: 0 36 | m_AssetPipelineMode: 1 37 | m_RefreshImportMode: 0 38 | m_CacheServerMode: 0 39 | m_CacheServerEndpoint: 40 | m_CacheServerNamespacePrefix: default 41 | m_CacheServerEnableDownload: 1 42 | m_CacheServerEnableUpload: 1 43 | m_CacheServerEnableAuth: 0 44 | m_CacheServerEnableTls: 0 45 | m_CacheServerValidationMode: 2 46 | m_CacheServerDownloadBatchSize: 128 47 | m_EnableEnlightenBakedGI: 0 48 | m_ReferencedClipsExactNaming: 1 49 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | m_PreloadedShaders: [] 39 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 40 | type: 0} 41 | m_CustomRenderPipeline: {fileID: 0} 42 | m_TransparencySortMode: 0 43 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 44 | m_DefaultRenderingPath: 1 45 | m_DefaultMobileRenderingPath: 1 46 | m_TierSettings: [] 47 | m_LightmapStripping: 0 48 | m_FogStripping: 0 49 | m_InstancingStripping: 0 50 | m_LightmapKeepPlain: 1 51 | m_LightmapKeepDirCombined: 1 52 | m_LightmapKeepDynamicPlain: 1 53 | m_LightmapKeepDynamicDirCombined: 1 54 | m_LightmapKeepShadowMask: 1 55 | m_LightmapKeepSubtractive: 1 56 | m_FogKeepLinear: 1 57 | m_FogKeepExp: 1 58 | m_FogKeepExp2: 1 59 | m_AlbedoSwatchInfos: [] 60 | m_LightsUseLinearIntensity: 0 61 | m_LightsUseColorTemperature: 0 62 | m_LogWhenShaderIsCompiled: 0 63 | m_AllowEnlightenSupportForUpgradedProject: 0 64 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/MemorySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!387306366 &1 4 | MemorySettings: 5 | m_ObjectHideFlags: 0 6 | m_EditorMemorySettings: 7 | m_MainAllocatorBlockSize: -1 8 | m_ThreadAllocatorBlockSize: -1 9 | m_MainGfxBlockSize: -1 10 | m_ThreadGfxBlockSize: -1 11 | m_CacheBlockSize: -1 12 | m_TypetreeBlockSize: -1 13 | m_ProfilerBlockSize: -1 14 | m_ProfilerEditorBlockSize: -1 15 | m_BucketAllocatorGranularity: -1 16 | m_BucketAllocatorBucketsCount: -1 17 | m_BucketAllocatorBlockSize: -1 18 | m_BucketAllocatorBlockCount: -1 19 | m_ProfilerBucketAllocatorGranularity: -1 20 | m_ProfilerBucketAllocatorBucketsCount: -1 21 | m_ProfilerBucketAllocatorBlockSize: -1 22 | m_ProfilerBucketAllocatorBlockCount: -1 23 | m_TempAllocatorSizeMain: -1 24 | m_JobTempAllocatorBlockSize: -1 25 | m_BackgroundJobTempAllocatorBlockSize: -1 26 | m_JobTempAllocatorReducedBlockSize: -1 27 | m_TempAllocatorSizeGIBakingWorker: -1 28 | m_TempAllocatorSizeNavMeshWorker: -1 29 | m_TempAllocatorSizeAudioWorker: -1 30 | m_TempAllocatorSizeCloudWorker: -1 31 | m_TempAllocatorSizeGfx: -1 32 | m_TempAllocatorSizeJobWorker: -1 33 | m_TempAllocatorSizeBackgroundWorker: -1 34 | m_TempAllocatorSizePreloadManager: -1 35 | m_PlatformMemorySettings: {} 36 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/MultiplayerManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!655991488 &1 4 | MultiplayerManager: 5 | m_ObjectHideFlags: 0 6 | m_EnableMultiplayerRoles: 0 7 | m_StrippingTypes: {} 8 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_EnablePreReleasePackages: 0 16 | m_EnablePackageDependencies: 0 17 | m_AdvancedSettingsExpanded: 1 18 | m_ScopedRegistriesSettingsExpanded: 1 19 | m_SeeAllPackageVersions: 0 20 | oneTimeWarningShown: 0 21 | m_Registries: 22 | - m_Id: main 23 | m_Name: 24 | m_Url: https://packages.unity.com 25 | m_Scopes: [] 26 | m_IsDefault: 1 27 | m_Capabilities: 7 28 | m_UserSelectedRegistryName: 29 | m_UserAddingNewScopedRegistry: 0 30 | m_RegistryInfoDraft: 31 | m_Modified: 0 32 | m_ErrorMessage: 33 | m_UserModificationsInstanceId: -830 34 | m_OriginalInstanceId: -832 35 | m_LoadAssets: 0 36 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "m_Dictionary": { 3 | "m_DictionaryValues": [] 4 | } 5 | } -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 6 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_BounceThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_ContactThreshold: 0 23 | m_JobOptions: 24 | serializedVersion: 2 25 | useMultithreading: 0 26 | useConsistencySorting: 0 27 | m_InterpolationPosesPerJob: 100 28 | m_NewContactsPerJob: 30 29 | m_CollideContactsPerJob: 100 30 | m_ClearFlagsPerJob: 200 31 | m_ClearBodyForcesPerJob: 200 32 | m_SyncDiscreteFixturesPerJob: 50 33 | m_SyncContinuousFixturesPerJob: 50 34 | m_FindNearestContactsPerJob: 100 35 | m_UpdateTriggerContactsPerJob: 100 36 | m_IslandSolverCostThreshold: 100 37 | m_IslandSolverBodyCostScale: 1 38 | m_IslandSolverContactCostScale: 10 39 | m_IslandSolverJointCostScale: 10 40 | m_IslandSolverBodiesPerJob: 50 41 | m_IslandSolverContactsPerJob: 50 42 | m_SimulationMode: 0 43 | m_SimulationLayers: 44 | serializedVersion: 2 45 | m_Bits: 4294967295 46 | m_MaxSubStepCount: 4 47 | m_MinSubStepFPS: 30 48 | m_UseSubStepping: 0 49 | m_UseSubStepContacts: 0 50 | m_QueriesHitTriggers: 1 51 | m_QueriesStartInColliders: 1 52 | m_CallbacksOnDisable: 1 53 | m_ReuseCollisionCallbacks: 1 54 | m_AutoSyncTransforms: 0 55 | m_GizmoOptions: 10 56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 57 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 28 7 | productGUID: 02854ba967deb565ebb2c417c7b1d4ba 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: Robot_Unity_App 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1920 46 | defaultScreenHeight: 1080 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 1 51 | unsupportedMSAAFallback: 0 52 | m_SpriteBatchMaxVertexCount: 65535 53 | m_SpriteBatchVertexThreshold: 300 54 | m_MTRendering: 1 55 | mipStripping: 0 56 | numberOfMipsStripped: 0 57 | numberOfMipsStrippedPerMipmapLimitGroup: {} 58 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 59 | iosShowActivityIndicatorOnLoading: -1 60 | androidShowActivityIndicatorOnLoading: -1 61 | iosUseCustomAppBackgroundBehavior: 0 62 | allowedAutorotateToPortrait: 1 63 | allowedAutorotateToPortraitUpsideDown: 1 64 | allowedAutorotateToLandscapeRight: 1 65 | allowedAutorotateToLandscapeLeft: 1 66 | useOSAutorotation: 1 67 | use32BitDisplayBuffer: 1 68 | preserveFramebufferAlpha: 0 69 | disableDepthAndStencilBuffers: 0 70 | androidStartInFullscreen: 1 71 | androidRenderOutsideSafeArea: 1 72 | androidUseSwappy: 1 73 | androidBlitType: 0 74 | androidResizeableActivity: 1 75 | androidDefaultWindowWidth: 1920 76 | androidDefaultWindowHeight: 1080 77 | androidMinimumWindowWidth: 400 78 | androidMinimumWindowHeight: 300 79 | androidFullscreenMode: 1 80 | androidAutoRotationBehavior: 1 81 | androidPredictiveBackSupport: 0 82 | androidApplicationEntry: 2 83 | defaultIsNativeResolution: 1 84 | macRetinaSupport: 1 85 | runInBackground: 1 86 | muteOtherAudioSources: 0 87 | Prepare IOS For Recording: 0 88 | Force IOS Speakers When Recording: 0 89 | deferSystemGesturesMode: 0 90 | hideHomeButton: 0 91 | submitAnalytics: 1 92 | usePlayerLog: 1 93 | dedicatedServerOptimizations: 1 94 | bakeCollisionMeshes: 0 95 | forceSingleInstance: 0 96 | useFlipModelSwapchain: 1 97 | resizableWindow: 0 98 | useMacAppStoreValidation: 0 99 | macAppStoreCategory: public.app-category.games 100 | gpuSkinning: 1 101 | meshDeformation: 2 102 | xboxPIXTextureCapture: 0 103 | xboxEnableAvatar: 0 104 | xboxEnableKinect: 0 105 | xboxEnableKinectAutoTracking: 0 106 | xboxEnableFitness: 0 107 | visibleInBackground: 1 108 | allowFullscreenSwitch: 1 109 | fullscreenMode: 1 110 | xboxSpeechDB: 0 111 | xboxEnableHeadOrientation: 0 112 | xboxEnableGuest: 0 113 | xboxEnablePIXSampling: 0 114 | metalFramebufferOnly: 0 115 | xboxOneResolution: 0 116 | xboxOneSResolution: 0 117 | xboxOneXResolution: 3 118 | xboxOneMonoLoggingLevel: 0 119 | xboxOneLoggingLevel: 1 120 | xboxOneDisableEsram: 0 121 | xboxOneEnableTypeOptimization: 0 122 | xboxOnePresentImmediateThreshold: 0 123 | switchQueueCommandMemory: 0 124 | switchQueueControlMemory: 16384 125 | switchQueueComputeMemory: 262144 126 | switchNVNShaderPoolsGranularity: 33554432 127 | switchNVNDefaultPoolsGranularity: 16777216 128 | switchNVNOtherPoolsGranularity: 16777216 129 | switchGpuScratchPoolGranularity: 2097152 130 | switchAllowGpuScratchShrinking: 0 131 | switchNVNMaxPublicTextureIDCount: 0 132 | switchNVNMaxPublicSamplerIDCount: 0 133 | switchMaxWorkerMultiple: 8 134 | switchNVNGraphicsFirmwareMemory: 32 135 | vulkanNumSwapchainBuffers: 3 136 | vulkanEnableSetSRGBWrite: 0 137 | vulkanEnablePreTransform: 1 138 | vulkanEnableLateAcquireNextImage: 0 139 | vulkanEnableCommandBufferRecycling: 1 140 | loadStoreDebugModeEnabled: 0 141 | visionOSBundleVersion: 1.0 142 | tvOSBundleVersion: 1.0 143 | bundleVersion: 0.1 144 | preloadedAssets: [] 145 | metroInputSource: 0 146 | wsaTransparentSwapchain: 0 147 | m_HolographicPauseOnTrackingLoss: 1 148 | xboxOneDisableKinectGpuReservation: 1 149 | xboxOneEnable7thCore: 1 150 | vrSettings: 151 | enable360StereoCapture: 0 152 | isWsaHolographicRemotingEnabled: 0 153 | enableFrameTimingStats: 0 154 | enableOpenGLProfilerGPURecorders: 1 155 | allowHDRDisplaySupport: 0 156 | useHDRDisplay: 0 157 | hdrBitDepth: 0 158 | m_ColorGamuts: 00000000 159 | targetPixelDensity: 30 160 | resolutionScalingMode: 0 161 | resetResolutionOnWindowResize: 0 162 | androidSupportedAspectRatio: 1 163 | androidMaxAspectRatio: 2.4 164 | androidMinAspectRatio: 1 165 | applicationIdentifier: 166 | Standalone: com.DefaultCompany.3D-Project 167 | buildNumber: 168 | Standalone: 0 169 | VisionOS: 0 170 | iPhone: 0 171 | tvOS: 0 172 | overrideDefaultApplicationIdentifier: 1 173 | AndroidBundleVersionCode: 1 174 | AndroidMinSdkVersion: 23 175 | AndroidTargetSdkVersion: 0 176 | AndroidPreferredInstallLocation: 1 177 | aotOptions: 178 | stripEngineCode: 1 179 | iPhoneStrippingLevel: 0 180 | iPhoneScriptCallOptimization: 0 181 | ForceInternetPermission: 0 182 | ForceSDCardPermission: 0 183 | CreateWallpaper: 0 184 | androidSplitApplicationBinary: 0 185 | keepLoadedShadersAlive: 0 186 | StripUnusedMeshComponents: 1 187 | strictShaderVariantMatching: 0 188 | VertexChannelCompressionMask: 4054 189 | iPhoneSdkVersion: 988 190 | iOSSimulatorArchitecture: 0 191 | iOSTargetOSVersionString: 13.0 192 | tvOSSdkVersion: 0 193 | tvOSSimulatorArchitecture: 0 194 | tvOSRequireExtendedGameController: 0 195 | tvOSTargetOSVersionString: 13.0 196 | VisionOSSdkVersion: 0 197 | VisionOSTargetOSVersionString: 1.0 198 | uIPrerenderedIcon: 0 199 | uIRequiresPersistentWiFi: 0 200 | uIRequiresFullScreen: 1 201 | uIStatusBarHidden: 1 202 | uIExitOnSuspend: 0 203 | uIStatusBarStyle: 0 204 | appleTVSplashScreen: {fileID: 0} 205 | appleTVSplashScreen2x: {fileID: 0} 206 | tvOSSmallIconLayers: [] 207 | tvOSSmallIconLayers2x: [] 208 | tvOSLargeIconLayers: [] 209 | tvOSLargeIconLayers2x: [] 210 | tvOSTopShelfImageLayers: [] 211 | tvOSTopShelfImageLayers2x: [] 212 | tvOSTopShelfImageWideLayers: [] 213 | tvOSTopShelfImageWideLayers2x: [] 214 | iOSLaunchScreenType: 0 215 | iOSLaunchScreenPortrait: {fileID: 0} 216 | iOSLaunchScreenLandscape: {fileID: 0} 217 | iOSLaunchScreenBackgroundColor: 218 | serializedVersion: 2 219 | rgba: 0 220 | iOSLaunchScreenFillPct: 100 221 | iOSLaunchScreenSize: 100 222 | iOSLaunchScreeniPadType: 0 223 | iOSLaunchScreeniPadImage: {fileID: 0} 224 | iOSLaunchScreeniPadBackgroundColor: 225 | serializedVersion: 2 226 | rgba: 0 227 | iOSLaunchScreeniPadFillPct: 100 228 | iOSLaunchScreeniPadSize: 100 229 | iOSLaunchScreenCustomStoryboardPath: 230 | iOSLaunchScreeniPadCustomStoryboardPath: 231 | iOSDeviceRequirements: [] 232 | iOSURLSchemes: [] 233 | macOSURLSchemes: [] 234 | iOSBackgroundModes: 0 235 | iOSMetalForceHardShadows: 0 236 | metalEditorSupport: 1 237 | metalAPIValidation: 1 238 | metalCompileShaderBinary: 0 239 | iOSRenderExtraFrameOnPause: 0 240 | iosCopyPluginsCodeInsteadOfSymlink: 0 241 | appleDeveloperTeamID: 242 | iOSManualSigningProvisioningProfileID: 243 | tvOSManualSigningProvisioningProfileID: 244 | VisionOSManualSigningProvisioningProfileID: 245 | iOSManualSigningProvisioningProfileType: 0 246 | tvOSManualSigningProvisioningProfileType: 0 247 | VisionOSManualSigningProvisioningProfileType: 0 248 | appleEnableAutomaticSigning: 0 249 | iOSRequireARKit: 0 250 | iOSAutomaticallyDetectAndAddCapabilities: 1 251 | appleEnableProMotion: 0 252 | shaderPrecisionModel: 0 253 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 254 | templatePackageId: com.unity.template.3d@9.0.2 255 | templateDefaultScene: Assets/Scenes/SampleScene.unity 256 | useCustomMainManifest: 0 257 | useCustomLauncherManifest: 0 258 | useCustomMainGradleTemplate: 0 259 | useCustomLauncherGradleManifest: 0 260 | useCustomBaseGradleTemplate: 0 261 | useCustomGradlePropertiesTemplate: 0 262 | useCustomGradleSettingsTemplate: 0 263 | useCustomProguardFile: 0 264 | AndroidTargetArchitectures: 2 265 | AndroidSplashScreenScale: 0 266 | androidSplashScreen: {fileID: 0} 267 | AndroidKeystoreName: 268 | AndroidKeyaliasName: 269 | AndroidEnableArmv9SecurityFeatures: 0 270 | AndroidEnableArm64MTE: 0 271 | AndroidBuildApkPerCpuArchitecture: 0 272 | AndroidTVCompatibility: 0 273 | AndroidIsGame: 1 274 | AndroidEnableTango: 0 275 | androidEnableBanner: 1 276 | androidUseLowAccuracyLocation: 0 277 | androidUseCustomKeystore: 0 278 | m_AndroidBanners: 279 | - width: 320 280 | height: 180 281 | banner: {fileID: 0} 282 | androidGamepadSupportLevel: 0 283 | AndroidMinifyRelease: 0 284 | AndroidMinifyDebug: 0 285 | AndroidValidateAppBundleSize: 1 286 | AndroidAppBundleSizeToValidate: 150 287 | AndroidReportGooglePlayAppDependencies: 1 288 | androidSymbolsSizeThreshold: 800 289 | m_BuildTargetIcons: [] 290 | m_BuildTargetPlatformIcons: [] 291 | m_BuildTargetBatching: 292 | - m_BuildTarget: Standalone 293 | m_StaticBatching: 1 294 | m_DynamicBatching: 0 295 | - m_BuildTarget: tvOS 296 | m_StaticBatching: 1 297 | m_DynamicBatching: 0 298 | - m_BuildTarget: Android 299 | m_StaticBatching: 1 300 | m_DynamicBatching: 0 301 | - m_BuildTarget: iPhone 302 | m_StaticBatching: 1 303 | m_DynamicBatching: 0 304 | - m_BuildTarget: WebGL 305 | m_StaticBatching: 0 306 | m_DynamicBatching: 0 307 | m_BuildTargetShaderSettings: [] 308 | m_BuildTargetGraphicsJobs: 309 | - m_BuildTarget: MacStandaloneSupport 310 | m_GraphicsJobs: 0 311 | - m_BuildTarget: Switch 312 | m_GraphicsJobs: 1 313 | - m_BuildTarget: MetroSupport 314 | m_GraphicsJobs: 1 315 | - m_BuildTarget: AppleTVSupport 316 | m_GraphicsJobs: 0 317 | - m_BuildTarget: BJMSupport 318 | m_GraphicsJobs: 1 319 | - m_BuildTarget: LinuxStandaloneSupport 320 | m_GraphicsJobs: 1 321 | - m_BuildTarget: PS4Player 322 | m_GraphicsJobs: 1 323 | - m_BuildTarget: iOSSupport 324 | m_GraphicsJobs: 0 325 | - m_BuildTarget: WindowsStandaloneSupport 326 | m_GraphicsJobs: 1 327 | - m_BuildTarget: XboxOnePlayer 328 | m_GraphicsJobs: 1 329 | - m_BuildTarget: LuminSupport 330 | m_GraphicsJobs: 0 331 | - m_BuildTarget: AndroidPlayer 332 | m_GraphicsJobs: 0 333 | - m_BuildTarget: WebGLSupport 334 | m_GraphicsJobs: 0 335 | m_BuildTargetGraphicsJobMode: 336 | - m_BuildTarget: PS4Player 337 | m_GraphicsJobMode: 0 338 | - m_BuildTarget: XboxOnePlayer 339 | m_GraphicsJobMode: 0 340 | m_BuildTargetGraphicsAPIs: 341 | - m_BuildTarget: AndroidPlayer 342 | m_APIs: 150000000b000000 343 | m_Automatic: 1 344 | - m_BuildTarget: iOSSupport 345 | m_APIs: 10000000 346 | m_Automatic: 1 347 | - m_BuildTarget: AppleTVSupport 348 | m_APIs: 10000000 349 | m_Automatic: 1 350 | - m_BuildTarget: WebGLSupport 351 | m_APIs: 0b000000 352 | m_Automatic: 1 353 | m_BuildTargetVRSettings: 354 | - m_BuildTarget: Standalone 355 | m_Enabled: 0 356 | m_Devices: 357 | - Oculus 358 | - OpenVR 359 | m_DefaultShaderChunkSizeInMB: 16 360 | m_DefaultShaderChunkCount: 0 361 | openGLRequireES31: 0 362 | openGLRequireES31AEP: 0 363 | openGLRequireES32: 0 364 | m_TemplateCustomTags: {} 365 | mobileMTRendering: 366 | Android: 1 367 | iPhone: 1 368 | tvOS: 1 369 | m_BuildTargetGroupLightmapEncodingQuality: 370 | - serializedVersion: 2 371 | m_BuildTarget: Android 372 | m_EncodingQuality: 1 373 | - serializedVersion: 2 374 | m_BuildTarget: iPhone 375 | m_EncodingQuality: 1 376 | - serializedVersion: 2 377 | m_BuildTarget: tvOS 378 | m_EncodingQuality: 1 379 | m_BuildTargetGroupLightmapSettings: [] 380 | m_BuildTargetGroupLoadStoreDebugModeSettings: [] 381 | m_BuildTargetNormalMapEncoding: 382 | - m_BuildTarget: Android 383 | m_Encoding: 1 384 | - m_BuildTarget: iPhone 385 | m_Encoding: 1 386 | - m_BuildTarget: tvOS 387 | m_Encoding: 1 388 | m_BuildTargetDefaultTextureCompressionFormat: 389 | - serializedVersion: 3 390 | m_BuildTarget: Android 391 | m_Formats: 03000000 392 | playModeTestRunnerEnabled: 0 393 | runPlayModeTestAsEditModeTest: 0 394 | actionOnDotNetUnhandledException: 1 395 | editorGfxJobOverride: 1 396 | enableInternalProfiler: 0 397 | logObjCUncaughtExceptions: 1 398 | enableCrashReportAPI: 0 399 | cameraUsageDescription: 400 | locationUsageDescription: 401 | microphoneUsageDescription: 402 | bluetoothUsageDescription: 403 | macOSTargetOSVersion: 11.0 404 | switchNMETAOverride: 405 | switchNetLibKey: 406 | switchSocketMemoryPoolSize: 6144 407 | switchSocketAllocatorPoolSize: 128 408 | switchSocketConcurrencyLimit: 14 409 | switchScreenResolutionBehavior: 2 410 | switchUseCPUProfiler: 0 411 | switchEnableFileSystemTrace: 0 412 | switchLTOSetting: 0 413 | switchApplicationID: 0x01004b9000490000 414 | switchNSODependencies: 415 | switchCompilerFlags: 416 | switchTitleNames_0: 417 | switchTitleNames_1: 418 | switchTitleNames_2: 419 | switchTitleNames_3: 420 | switchTitleNames_4: 421 | switchTitleNames_5: 422 | switchTitleNames_6: 423 | switchTitleNames_7: 424 | switchTitleNames_8: 425 | switchTitleNames_9: 426 | switchTitleNames_10: 427 | switchTitleNames_11: 428 | switchTitleNames_12: 429 | switchTitleNames_13: 430 | switchTitleNames_14: 431 | switchTitleNames_15: 432 | switchPublisherNames_0: 433 | switchPublisherNames_1: 434 | switchPublisherNames_2: 435 | switchPublisherNames_3: 436 | switchPublisherNames_4: 437 | switchPublisherNames_5: 438 | switchPublisherNames_6: 439 | switchPublisherNames_7: 440 | switchPublisherNames_8: 441 | switchPublisherNames_9: 442 | switchPublisherNames_10: 443 | switchPublisherNames_11: 444 | switchPublisherNames_12: 445 | switchPublisherNames_13: 446 | switchPublisherNames_14: 447 | switchPublisherNames_15: 448 | switchIcons_0: {fileID: 0} 449 | switchIcons_1: {fileID: 0} 450 | switchIcons_2: {fileID: 0} 451 | switchIcons_3: {fileID: 0} 452 | switchIcons_4: {fileID: 0} 453 | switchIcons_5: {fileID: 0} 454 | switchIcons_6: {fileID: 0} 455 | switchIcons_7: {fileID: 0} 456 | switchIcons_8: {fileID: 0} 457 | switchIcons_9: {fileID: 0} 458 | switchIcons_10: {fileID: 0} 459 | switchIcons_11: {fileID: 0} 460 | switchIcons_12: {fileID: 0} 461 | switchIcons_13: {fileID: 0} 462 | switchIcons_14: {fileID: 0} 463 | switchIcons_15: {fileID: 0} 464 | switchSmallIcons_0: {fileID: 0} 465 | switchSmallIcons_1: {fileID: 0} 466 | switchSmallIcons_2: {fileID: 0} 467 | switchSmallIcons_3: {fileID: 0} 468 | switchSmallIcons_4: {fileID: 0} 469 | switchSmallIcons_5: {fileID: 0} 470 | switchSmallIcons_6: {fileID: 0} 471 | switchSmallIcons_7: {fileID: 0} 472 | switchSmallIcons_8: {fileID: 0} 473 | switchSmallIcons_9: {fileID: 0} 474 | switchSmallIcons_10: {fileID: 0} 475 | switchSmallIcons_11: {fileID: 0} 476 | switchSmallIcons_12: {fileID: 0} 477 | switchSmallIcons_13: {fileID: 0} 478 | switchSmallIcons_14: {fileID: 0} 479 | switchSmallIcons_15: {fileID: 0} 480 | switchManualHTML: 481 | switchAccessibleURLs: 482 | switchLegalInformation: 483 | switchMainThreadStackSize: 1048576 484 | switchPresenceGroupId: 485 | switchLogoHandling: 0 486 | switchReleaseVersion: 0 487 | switchDisplayVersion: 1.0.0 488 | switchStartupUserAccount: 0 489 | switchSupportedLanguagesMask: 0 490 | switchLogoType: 0 491 | switchApplicationErrorCodeCategory: 492 | switchUserAccountSaveDataSize: 0 493 | switchUserAccountSaveDataJournalSize: 0 494 | switchApplicationAttribute: 0 495 | switchCardSpecSize: -1 496 | switchCardSpecClock: -1 497 | switchRatingsMask: 0 498 | switchRatingsInt_0: 0 499 | switchRatingsInt_1: 0 500 | switchRatingsInt_2: 0 501 | switchRatingsInt_3: 0 502 | switchRatingsInt_4: 0 503 | switchRatingsInt_5: 0 504 | switchRatingsInt_6: 0 505 | switchRatingsInt_7: 0 506 | switchRatingsInt_8: 0 507 | switchRatingsInt_9: 0 508 | switchRatingsInt_10: 0 509 | switchRatingsInt_11: 0 510 | switchRatingsInt_12: 0 511 | switchLocalCommunicationIds_0: 512 | switchLocalCommunicationIds_1: 513 | switchLocalCommunicationIds_2: 514 | switchLocalCommunicationIds_3: 515 | switchLocalCommunicationIds_4: 516 | switchLocalCommunicationIds_5: 517 | switchLocalCommunicationIds_6: 518 | switchLocalCommunicationIds_7: 519 | switchParentalControl: 0 520 | switchAllowsScreenshot: 1 521 | switchAllowsVideoCapturing: 1 522 | switchAllowsRuntimeAddOnContentInstall: 0 523 | switchDataLossConfirmation: 0 524 | switchUserAccountLockEnabled: 0 525 | switchSystemResourceMemory: 16777216 526 | switchSupportedNpadStyles: 22 527 | switchNativeFsCacheSize: 32 528 | switchIsHoldTypeHorizontal: 0 529 | switchSupportedNpadCount: 8 530 | switchEnableTouchScreen: 1 531 | switchSocketConfigEnabled: 0 532 | switchTcpInitialSendBufferSize: 32 533 | switchTcpInitialReceiveBufferSize: 64 534 | switchTcpAutoSendBufferSizeMax: 256 535 | switchTcpAutoReceiveBufferSizeMax: 256 536 | switchUdpSendBufferSize: 9 537 | switchUdpReceiveBufferSize: 42 538 | switchSocketBufferEfficiency: 4 539 | switchSocketInitializeEnabled: 1 540 | switchNetworkInterfaceManagerInitializeEnabled: 1 541 | switchDisableHTCSPlayerConnection: 0 542 | switchUseNewStyleFilepaths: 1 543 | switchUseLegacyFmodPriorities: 0 544 | switchUseMicroSleepForYield: 1 545 | switchEnableRamDiskSupport: 0 546 | switchMicroSleepForYieldTime: 25 547 | switchRamDiskSpaceSize: 12 548 | switchUpgradedPlayerSettingsToNMETA: 0 549 | ps4NPAgeRating: 12 550 | ps4NPTitleSecret: 551 | ps4NPTrophyPackPath: 552 | ps4ParentalLevel: 11 553 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 554 | ps4Category: 0 555 | ps4MasterVersion: 01.00 556 | ps4AppVersion: 01.00 557 | ps4AppType: 0 558 | ps4ParamSfxPath: 559 | ps4VideoOutPixelFormat: 0 560 | ps4VideoOutInitialWidth: 1920 561 | ps4VideoOutBaseModeInitialWidth: 1920 562 | ps4VideoOutReprojectionRate: 60 563 | ps4PronunciationXMLPath: 564 | ps4PronunciationSIGPath: 565 | ps4BackgroundImagePath: 566 | ps4StartupImagePath: 567 | ps4StartupImagesFolder: 568 | ps4IconImagesFolder: 569 | ps4SaveDataImagePath: 570 | ps4SdkOverride: 571 | ps4BGMPath: 572 | ps4ShareFilePath: 573 | ps4ShareOverlayImagePath: 574 | ps4PrivacyGuardImagePath: 575 | ps4ExtraSceSysFile: 576 | ps4NPtitleDatPath: 577 | ps4RemotePlayKeyAssignment: -1 578 | ps4RemotePlayKeyMappingDir: 579 | ps4PlayTogetherPlayerCount: 0 580 | ps4EnterButtonAssignment: 1 581 | ps4ApplicationParam1: 0 582 | ps4ApplicationParam2: 0 583 | ps4ApplicationParam3: 0 584 | ps4ApplicationParam4: 0 585 | ps4DownloadDataSize: 0 586 | ps4GarlicHeapSize: 2048 587 | ps4ProGarlicHeapSize: 2560 588 | playerPrefsMaxSize: 32768 589 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 590 | ps4pnSessions: 1 591 | ps4pnPresence: 1 592 | ps4pnFriends: 1 593 | ps4pnGameCustomData: 1 594 | playerPrefsSupport: 0 595 | enableApplicationExit: 0 596 | resetTempFolder: 1 597 | restrictedAudioUsageRights: 0 598 | ps4UseResolutionFallback: 0 599 | ps4ReprojectionSupport: 0 600 | ps4UseAudio3dBackend: 0 601 | ps4UseLowGarlicFragmentationMode: 1 602 | ps4SocialScreenEnabled: 0 603 | ps4ScriptOptimizationLevel: 0 604 | ps4Audio3dVirtualSpeakerCount: 14 605 | ps4attribCpuUsage: 0 606 | ps4PatchPkgPath: 607 | ps4PatchLatestPkgPath: 608 | ps4PatchChangeinfoPath: 609 | ps4PatchDayOne: 0 610 | ps4attribUserManagement: 0 611 | ps4attribMoveSupport: 0 612 | ps4attrib3DSupport: 0 613 | ps4attribShareSupport: 0 614 | ps4attribExclusiveVR: 0 615 | ps4disableAutoHideSplash: 0 616 | ps4videoRecordingFeaturesUsed: 0 617 | ps4contentSearchFeaturesUsed: 0 618 | ps4CompatibilityPS5: 0 619 | ps4AllowPS5Detection: 0 620 | ps4GPU800MHz: 1 621 | ps4attribEyeToEyeDistanceSettingVR: 0 622 | ps4IncludedModules: [] 623 | ps4attribVROutputEnabled: 0 624 | monoEnv: 625 | splashScreenBackgroundSourceLandscape: {fileID: 0} 626 | splashScreenBackgroundSourcePortrait: {fileID: 0} 627 | blurSplashScreenBackground: 1 628 | spritePackerPolicy: 629 | webGLMemorySize: 16 630 | webGLExceptionSupport: 1 631 | webGLNameFilesAsHashes: 0 632 | webGLShowDiagnostics: 0 633 | webGLDataCaching: 1 634 | webGLDebugSymbols: 0 635 | webGLEmscriptenArgs: 636 | webGLModulesDirectory: 637 | webGLTemplate: APPLICATION:Default 638 | webGLAnalyzeBuildSize: 0 639 | webGLUseEmbeddedResources: 0 640 | webGLCompressionFormat: 1 641 | webGLWasmArithmeticExceptions: 0 642 | webGLLinkerTarget: 1 643 | webGLThreadsSupport: 0 644 | webGLDecompressionFallback: 0 645 | webGLInitialMemorySize: 32 646 | webGLMaximumMemorySize: 2048 647 | webGLMemoryGrowthMode: 2 648 | webGLMemoryLinearGrowthStep: 16 649 | webGLMemoryGeometricGrowthStep: 0.2 650 | webGLMemoryGeometricGrowthCap: 96 651 | webGLEnableWebGPU: 0 652 | webGLPowerPreference: 2 653 | webGLWebAssemblyTable: 0 654 | webGLWebAssemblyBigInt: 0 655 | webGLCloseOnQuit: 0 656 | webWasm2023: 0 657 | scriptingDefineSymbols: 658 | Standalone: ROS2 659 | additionalCompilerArguments: {} 660 | platformArchitecture: {} 661 | scriptingBackend: 662 | Android: 1 663 | il2cppCompilerConfiguration: {} 664 | il2cppCodeGeneration: {} 665 | il2cppStacktraceInformation: {} 666 | managedStrippingLevel: {} 667 | incrementalIl2cppBuild: {} 668 | suppressCommonWarnings: 1 669 | allowUnsafeCode: 0 670 | useDeterministicCompilation: 1 671 | additionalIl2CppArgs: 672 | scriptingRuntimeVersion: 1 673 | gcIncremental: 1 674 | gcWBarrierValidation: 0 675 | apiCompatibilityLevelPerPlatform: {} 676 | editorAssembliesCompatibilityLevel: 2 677 | m_RenderingPath: 1 678 | m_MobileRenderingPath: 1 679 | metroPackageName: Robot_Unity_App 680 | metroPackageVersion: 681 | metroCertificatePath: 682 | metroCertificatePassword: 683 | metroCertificateSubject: 684 | metroCertificateIssuer: 685 | metroCertificateNotAfter: 0000000000000000 686 | metroApplicationDescription: Robot_Unity_App 687 | wsaImages: {} 688 | metroTileShortName: 689 | metroTileShowName: 0 690 | metroMediumTileShowName: 0 691 | metroLargeTileShowName: 0 692 | metroWideTileShowName: 0 693 | metroSupportStreamingInstall: 0 694 | metroLastRequiredScene: 0 695 | metroDefaultTileSize: 1 696 | metroTileForegroundText: 2 697 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 698 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} 699 | metroSplashScreenUseBackgroundColor: 0 700 | syncCapabilities: 0 701 | platformCapabilities: {} 702 | metroTargetDeviceFamilies: {} 703 | metroFTAName: 704 | metroFTAFileTypes: [] 705 | metroProtocolName: 706 | vcxProjDefaultLanguage: 707 | XboxOneProductId: 708 | XboxOneUpdateKey: 709 | XboxOneSandboxId: 710 | XboxOneContentId: 711 | XboxOneTitleId: 712 | XboxOneSCId: 713 | XboxOneGameOsOverridePath: 714 | XboxOnePackagingOverridePath: 715 | XboxOneAppManifestOverridePath: 716 | XboxOneVersion: 1.0.0.0 717 | XboxOnePackageEncryption: 0 718 | XboxOnePackageUpdateGranularity: 2 719 | XboxOneDescription: 720 | XboxOneLanguage: 721 | - enus 722 | XboxOneCapability: [] 723 | XboxOneGameRating: {} 724 | XboxOneIsContentPackage: 0 725 | XboxOneEnhancedXboxCompatibilityMode: 0 726 | XboxOneEnableGPUVariability: 1 727 | XboxOneSockets: {} 728 | XboxOneSplashScreen: {fileID: 0} 729 | XboxOneAllowedProductIds: [] 730 | XboxOnePersistentLocalStorageSize: 0 731 | XboxOneXTitleMemory: 8 732 | XboxOneOverrideIdentityName: 733 | XboxOneOverrideIdentityPublisher: 734 | vrEditorSettings: {} 735 | cloudServicesEnabled: 736 | UNet: 1 737 | luminIcon: 738 | m_Name: 739 | m_ModelFolderPath: 740 | m_PortalFolderPath: 741 | luminCert: 742 | m_CertPath: 743 | m_SignPackage: 1 744 | luminIsChannelApp: 0 745 | luminVersion: 746 | m_VersionCode: 1 747 | m_VersionName: 748 | hmiPlayerDataPath: 749 | hmiForceSRGBBlit: 0 750 | embeddedLinuxEnableGamepadInput: 0 751 | hmiCpuConfiguration: 752 | hmiLogStartupTiming: 0 753 | qnxGraphicConfPath: 754 | apiCompatibilityLevel: 3 755 | captureStartupLogs: {} 756 | activeInputHandler: 2 757 | windowsGamepadBackendHint: 0 758 | cloudProjectId: 759 | framebufferDepthMemorylessMode: 0 760 | qualitySettingsNames: [] 761 | projectName: 762 | organizationId: 763 | cloudEnabled: 0 764 | legacyClampBlendShapeWeights: 0 765 | hmiLoadingImage: {fileID: 0} 766 | platformRequiresReadableAssets: 0 767 | virtualTexturingSupportEnabled: 0 768 | insecureHttpOption: 0 769 | androidVulkanDenyFilterList: [] 770 | androidVulkanAllowFilterList: [] 771 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 6000.0.25f1 2 | m_EditorVersionWithRevision: 6000.0.25f1 (4859ab7b5a49) 3 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 5 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | blendWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | streamingMipmapsActive: 0 33 | streamingMipmapsAddAllCameras: 1 34 | streamingMipmapsMemoryBudget: 512 35 | streamingMipmapsRenderersPerFrame: 512 36 | streamingMipmapsMaxLevelReduction: 2 37 | streamingMipmapsMaxFileIORequests: 1024 38 | particleRaycastBudget: 4 39 | asyncUploadTimeSlice: 2 40 | asyncUploadBufferSize: 16 41 | asyncUploadPersistentBuffer: 1 42 | resolutionScalingFixedDPIFactor: 1 43 | excludedTargetPlatforms: [] 44 | - serializedVersion: 2 45 | name: Low 46 | pixelLightCount: 0 47 | shadows: 0 48 | shadowResolution: 0 49 | shadowProjection: 1 50 | shadowCascades: 1 51 | shadowDistance: 20 52 | shadowNearPlaneOffset: 3 53 | shadowCascade2Split: 0.33333334 54 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 55 | shadowmaskMode: 0 56 | blendWeights: 2 57 | textureQuality: 0 58 | anisotropicTextures: 0 59 | antiAliasing: 0 60 | softParticles: 0 61 | softVegetation: 0 62 | realtimeReflectionProbes: 0 63 | billboardsFaceCameraPosition: 0 64 | vSyncCount: 0 65 | lodBias: 0.4 66 | maximumLODLevel: 0 67 | streamingMipmapsActive: 0 68 | streamingMipmapsAddAllCameras: 1 69 | streamingMipmapsMemoryBudget: 512 70 | streamingMipmapsRenderersPerFrame: 512 71 | streamingMipmapsMaxLevelReduction: 2 72 | streamingMipmapsMaxFileIORequests: 1024 73 | particleRaycastBudget: 16 74 | asyncUploadTimeSlice: 2 75 | asyncUploadBufferSize: 16 76 | asyncUploadPersistentBuffer: 1 77 | resolutionScalingFixedDPIFactor: 1 78 | excludedTargetPlatforms: [] 79 | - serializedVersion: 2 80 | name: Medium 81 | pixelLightCount: 1 82 | shadows: 1 83 | shadowResolution: 0 84 | shadowProjection: 1 85 | shadowCascades: 1 86 | shadowDistance: 20 87 | shadowNearPlaneOffset: 3 88 | shadowCascade2Split: 0.33333334 89 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 90 | shadowmaskMode: 0 91 | blendWeights: 2 92 | textureQuality: 0 93 | anisotropicTextures: 1 94 | antiAliasing: 0 95 | softParticles: 0 96 | softVegetation: 0 97 | realtimeReflectionProbes: 0 98 | billboardsFaceCameraPosition: 0 99 | vSyncCount: 1 100 | lodBias: 0.7 101 | maximumLODLevel: 0 102 | streamingMipmapsActive: 0 103 | streamingMipmapsAddAllCameras: 1 104 | streamingMipmapsMemoryBudget: 512 105 | streamingMipmapsRenderersPerFrame: 512 106 | streamingMipmapsMaxLevelReduction: 2 107 | streamingMipmapsMaxFileIORequests: 1024 108 | particleRaycastBudget: 64 109 | asyncUploadTimeSlice: 2 110 | asyncUploadBufferSize: 16 111 | asyncUploadPersistentBuffer: 1 112 | resolutionScalingFixedDPIFactor: 1 113 | excludedTargetPlatforms: [] 114 | - serializedVersion: 2 115 | name: High 116 | pixelLightCount: 2 117 | shadows: 2 118 | shadowResolution: 1 119 | shadowProjection: 1 120 | shadowCascades: 2 121 | shadowDistance: 40 122 | shadowNearPlaneOffset: 3 123 | shadowCascade2Split: 0.33333334 124 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 125 | shadowmaskMode: 1 126 | blendWeights: 2 127 | textureQuality: 0 128 | anisotropicTextures: 1 129 | antiAliasing: 0 130 | softParticles: 0 131 | softVegetation: 1 132 | realtimeReflectionProbes: 1 133 | billboardsFaceCameraPosition: 1 134 | vSyncCount: 1 135 | lodBias: 1 136 | maximumLODLevel: 0 137 | streamingMipmapsActive: 0 138 | streamingMipmapsAddAllCameras: 1 139 | streamingMipmapsMemoryBudget: 512 140 | streamingMipmapsRenderersPerFrame: 512 141 | streamingMipmapsMaxLevelReduction: 2 142 | streamingMipmapsMaxFileIORequests: 1024 143 | particleRaycastBudget: 256 144 | asyncUploadTimeSlice: 2 145 | asyncUploadBufferSize: 16 146 | asyncUploadPersistentBuffer: 1 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Very High 151 | pixelLightCount: 3 152 | shadows: 2 153 | shadowResolution: 2 154 | shadowProjection: 1 155 | shadowCascades: 2 156 | shadowDistance: 70 157 | shadowNearPlaneOffset: 3 158 | shadowCascade2Split: 0.33333334 159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 160 | shadowmaskMode: 1 161 | blendWeights: 4 162 | textureQuality: 0 163 | anisotropicTextures: 2 164 | antiAliasing: 2 165 | softParticles: 1 166 | softVegetation: 1 167 | realtimeReflectionProbes: 1 168 | billboardsFaceCameraPosition: 1 169 | vSyncCount: 1 170 | lodBias: 1.5 171 | maximumLODLevel: 0 172 | streamingMipmapsActive: 0 173 | streamingMipmapsAddAllCameras: 1 174 | streamingMipmapsMemoryBudget: 512 175 | streamingMipmapsRenderersPerFrame: 512 176 | streamingMipmapsMaxLevelReduction: 2 177 | streamingMipmapsMaxFileIORequests: 1024 178 | particleRaycastBudget: 1024 179 | asyncUploadTimeSlice: 2 180 | asyncUploadBufferSize: 16 181 | asyncUploadPersistentBuffer: 1 182 | resolutionScalingFixedDPIFactor: 1 183 | excludedTargetPlatforms: [] 184 | - serializedVersion: 2 185 | name: Ultra 186 | pixelLightCount: 4 187 | shadows: 2 188 | shadowResolution: 2 189 | shadowProjection: 1 190 | shadowCascades: 4 191 | shadowDistance: 150 192 | shadowNearPlaneOffset: 3 193 | shadowCascade2Split: 0.33333334 194 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 195 | shadowmaskMode: 1 196 | blendWeights: 4 197 | textureQuality: 0 198 | anisotropicTextures: 2 199 | antiAliasing: 2 200 | softParticles: 1 201 | softVegetation: 1 202 | realtimeReflectionProbes: 1 203 | billboardsFaceCameraPosition: 1 204 | vSyncCount: 1 205 | lodBias: 2 206 | maximumLODLevel: 0 207 | streamingMipmapsActive: 0 208 | streamingMipmapsAddAllCameras: 1 209 | streamingMipmapsMemoryBudget: 512 210 | streamingMipmapsRenderersPerFrame: 512 211 | streamingMipmapsMaxLevelReduction: 2 212 | streamingMipmapsMaxFileIORequests: 1024 213 | particleRaycastBudget: 4096 214 | asyncUploadTimeSlice: 2 215 | asyncUploadBufferSize: 16 216 | asyncUploadPersistentBuffer: 1 217 | resolutionScalingFixedDPIFactor: 1 218 | excludedTargetPlatforms: [] 219 | m_PerPlatformDefaultQuality: 220 | Android: 2 221 | Lumin: 5 222 | GameCoreScarlett: 5 223 | GameCoreXboxOne: 5 224 | Nintendo 3DS: 5 225 | Nintendo Switch: 5 226 | PS4: 5 227 | PS5: 5 228 | Stadia: 5 229 | Standalone: 5 230 | WebGL: 3 231 | Windows Store Apps: 5 232 | XboxOne: 5 233 | iPhone: 2 234 | tvOS: 2 235 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 3 6 | tags: 7 | - robot 8 | layers: 9 | - Default 10 | - TransparentFX 11 | - Ignore Raycast 12 | - 13 | - Water 14 | - UI 15 | - robot 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | - 41 | m_SortingLayers: 42 | - name: Default 43 | uniqueID: 0 44 | locked: 0 45 | m_RenderingLayers: 46 | - Default 47 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 7 | m_Count: 705599 8 | m_Rate: 9 | m_Denominator: 1 10 | m_Numerator: 141120000 11 | Maximum Allowed Timestep: 0.33333334 12 | m_TimeScale: 1 13 | Maximum Particle Timestep: 0.03 14 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_DashboardUrl: https://dashboard.unity3d.com 13 | m_TestInitMode: 0 14 | CrashReportingSettings: 15 | m_EventUrl: https://perf-events.cloud.unity3d.com 16 | m_Enabled: 0 17 | m_LogBufferSize: 10 18 | m_CaptureEditorExceptions: 1 19 | UnityPurchasingSettings: 20 | m_Enabled: 0 21 | m_TestMode: 0 22 | UnityAnalyticsSettings: 23 | m_Enabled: 0 24 | m_TestMode: 0 25 | m_InitializeOnStartup: 1 26 | m_PackageRequiringCoreStatsPresent: 0 27 | UnityAdsSettings: 28 | m_Enabled: 0 29 | m_InitializeOnStartup: 1 30 | m_TestMode: 0 31 | m_IosGameId: 32 | m_AndroidGameId: 33 | m_GameIds: {} 34 | m_GameId: 35 | PerformanceReportingSettings: 36 | m_Enabled: 0 37 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_StripUpdateShader: {fileID: 0} 10 | m_RenderPipeSettingsPath: 11 | m_FixedTimeStep: 0.016666668 12 | m_MaxDeltaTime: 0.05 13 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/VersionControlSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!890905787 &1 4 | VersionControlSettings: 5 | m_ObjectHideFlags: 0 6 | m_Mode: Visible Meta Files 7 | m_CollabEditorSettings: 8 | inProgressEnabled: 1 9 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/ProjectSettings/XRSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_SettingKeys": [ 3 | "VR Device Disabled", 4 | "VR Device User Alert" 5 | ], 6 | "m_SettingValues": [ 7 | "False", 8 | "False" 9 | ] 10 | } -------------------------------------------------------------------------------- /work/Robot_Unity_App/UserSettings/EditorUserSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!162 &1 4 | EditorUserSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_ConfigSettings: 8 | RecentlyUsedSceneGuid-0: 9 | value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a 10 | flags: 0 11 | vcSharedLogLevel: 12 | value: 0d5e400f0650 13 | flags: 0 14 | m_VCAutomaticAdd: 1 15 | m_VCDebugCom: 0 16 | m_VCDebugCmd: 0 17 | m_VCDebugOut: 0 18 | m_SemanticMergeMode: 2 19 | m_DesiredImportWorkerCount: 8 20 | m_StandbyImportWorkerCount: 2 21 | m_IdleImportWorkerShutdownDelay: 60000 22 | m_VCShowFailedCheckout: 1 23 | m_VCOverwriteFailedCheckoutAssets: 1 24 | m_VCProjectOverlayIcons: 1 25 | m_VCHierarchyOverlayIcons: 1 26 | m_VCOtherOverlayIcons: 1 27 | m_VCAllowAsyncUpdate: 1 28 | m_VCScanLocalPackagesOnConnect: 1 29 | m_ArtifactGarbageCollection: 1 30 | m_CompressAssetsOnImport: 1 31 | -------------------------------------------------------------------------------- /work/Robot_Unity_App/UserSettings/Search.index: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Assets", 3 | "roots": ["Assets"], 4 | "includes": [], 5 | "excludes": ["Assets/Temp/", "Assets/External/"], 6 | "options": { 7 | "types": true, 8 | "properties": true, 9 | "extended": false, 10 | "dependencies": true 11 | }, 12 | "baseScore": 999 13 | } -------------------------------------------------------------------------------- /work/Robot_Unity_App/UserSettings/Search.settings: -------------------------------------------------------------------------------- 1 | trackSelection = true 2 | refreshSearchWindowsInPlayMode = false 3 | pickerAdvancedUI = false 4 | fetchPreview = true 5 | defaultFlags = 0 6 | keepOpen = true 7 | queryFolder = "Assets" 8 | onBoardingDoNotAskAgain = true 9 | showPackageIndexes = false 10 | showStatusBar = false 11 | scopes = { 12 | "picker_window_position_offset.075BCD15" = "343;35;320;550" 13 | "picker_visibility_flags.075BCD15" = "264" 14 | "picker_item_size.075BCD15" = "96" 15 | "picker_inspector.075BCD15" = "0" 16 | } 17 | providers = { 18 | asset = { 19 | active = true 20 | priority = 25 21 | defaultAction = null 22 | } 23 | scene = { 24 | active = true 25 | priority = 50 26 | defaultAction = null 27 | } 28 | adb = { 29 | active = false 30 | priority = 2500 31 | defaultAction = null 32 | } 33 | presets_provider = { 34 | active = false 35 | priority = -10 36 | defaultAction = null 37 | } 38 | find = { 39 | active = true 40 | priority = 25 41 | defaultAction = null 42 | } 43 | packages = { 44 | active = false 45 | priority = 90 46 | defaultAction = null 47 | } 48 | store = { 49 | active = false 50 | priority = 100 51 | defaultAction = null 52 | } 53 | profilermarkers = { 54 | active = false 55 | priority = 100 56 | defaultAction = null 57 | } 58 | performance = { 59 | active = false 60 | priority = 100 61 | defaultAction = null 62 | } 63 | log = { 64 | active = false 65 | priority = 210 66 | defaultAction = null 67 | } 68 | } 69 | objectSelectors = { 70 | } 71 | recentSearches = [ 72 | ] 73 | searchItemFavorites = [ 74 | ] 75 | savedSearchesSortOrder = 0 76 | showSavedSearchPanel = false 77 | hideTabs = false 78 | expandedQueries = [ 79 | ] 80 | queryBuilder = true 81 | ignoredProperties = "id;name;classname;imagecontentshash" 82 | helperWidgetCurrentArea = "all" 83 | disabledIndexers = "" 84 | minIndexVariations = 2 85 | findProviderIndexHelper = true --------------------------------------------------------------------------------