Author SHA1 Message Date
moscowsky 647fe4b9d4 change lidar pose 2026-07-27 18:11:33 +03:00
Leushina Vlada 248997e3f4 minot style update 2026-06-26 14:35:52 +03:00
Leushina Vlada 493c947318 изменила алгоритм установки системы 2026-06-26 14:30:15 +03:00
Leushina 2b678e41e6 update guide 2026-06-25 13:58:15 +03:00
Leushina 0cee59f95f add cam collision 2026-06-25 13:57:53 +03:00
5 changed files with 323 additions and 29 deletions
+245 -8
View File
@@ -21127,7 +21127,8 @@ Transform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Children:
- {fileID: 253584178}
m_Father: {fileID: 1529185470}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &194403289
@@ -28210,6 +28211,52 @@ Transform:
m_CorrespondingSourceObject: {fileID: 6112955746515834170, guid: 90ca804bb7e312d4db58291bb6ba9689, type: 3}
m_PrefabInstance: {fileID: 253181131}
m_PrefabAsset: {fileID: 0}
--- !u!1 &253584177
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 253584178}
- component: {fileID: 253584179}
m_Layer: 0
m_Name: unnamed
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &253584178
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 253584177}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 1456076438}
m_Father: {fileID: 194403288}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &253584179
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 253584177}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b2685e7e7719cd43814f41f35664c0b, type: 3}
m_Name:
m_EditorClassIdentifier:
geometryType: 0
--- !u!1001 &254064682
PrefabInstance:
m_ObjectHideFlags: 0
@@ -31975,6 +32022,59 @@ Transform:
m_CorrespondingSourceObject: {fileID: 2354269605054168132, guid: 76cc0077fca1a1a40bab14eebbcfbc66, type: 3}
m_PrefabInstance: {fileID: 286767493}
m_PrefabAsset: {fileID: 0}
--- !u!1 &286793321
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 286793322}
- component: {fileID: 286793323}
m_Layer: 0
m_Name: Box
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &286793322
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 286793321}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 654639876}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &286793323
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 286793321}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &287024167
PrefabInstance:
m_ObjectHideFlags: 0
@@ -73628,6 +73728,52 @@ Transform:
m_CorrespondingSourceObject: {fileID: 4330052477223677283, guid: 1dd4bdbf4e8b7b944a059fe7ce222141, type: 3}
m_PrefabInstance: {fileID: 652720985}
m_PrefabAsset: {fileID: 0}
--- !u!1 &654639875
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 654639876}
- component: {fileID: 654639877}
m_Layer: 0
m_Name: unnamed
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &654639876
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 654639875}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 286793322}
m_Father: {fileID: 1736627183}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &654639877
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 654639875}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1c0c8ba1123c5f949b20e50d5dd6afe4, type: 3}
m_Name:
m_EditorClassIdentifier:
geometryType: 0
--- !u!1001 &656910560
PrefabInstance:
m_ObjectHideFlags: 0
@@ -160294,6 +160440,96 @@ Transform:
m_CorrespondingSourceObject: {fileID: 2069072062727315986, guid: 83a3efb0a5e2b4844b28d6f4cdee4363, type: 3}
m_PrefabInstance: {fileID: 1456052519}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1456076437
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1456076438}
- component: {fileID: 1456076440}
- component: {fileID: 1456076439}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1456076438
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1456076437}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 253584178}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &1456076439
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1456076437}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1456076440
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1456076437}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1001 &1456835068
PrefabInstance:
m_ObjectHideFlags: 0
@@ -167229,7 +167465,7 @@ Transform:
m_GameObject: {fileID: 1529185469}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0.127, z: 0.363}
m_LocalPosition: {x: 0, y: 0.131, z: 0.363}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
@@ -167264,7 +167500,7 @@ ArticulationBody:
m_Enabled: 1
serializedVersion: 6
m_Mass: 0.1
m_ParentAnchorPosition: {x: 0, y: 0.12699997, z: 0.36300048}
m_ParentAnchorPosition: {x: 0, y: 0.13099997, z: 0.36300048}
m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1}
m_AnchorPosition: {x: 0, y: 0, z: 0}
m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1}
@@ -169745,7 +169981,7 @@ Transform:
m_GameObject: {fileID: 1549220080}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.31, z: 0}
m_LocalPosition: {x: 0, y: 0.103, z: 0.43}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
@@ -169779,7 +170015,7 @@ ArticulationBody:
m_Enabled: 1
serializedVersion: 6
m_Mass: 0.1
m_ParentAnchorPosition: {x: 0, y: 0.30999997, z: 0}
m_ParentAnchorPosition: {x: 0, y: 0.103, z: 0.4299988}
m_ParentAnchorRotation: {x: 0, y: 0, z: 0, w: 1}
m_AnchorPosition: {x: 0, y: 0, z: 0}
m_AnchorRotation: {x: 0, y: 0, z: 0, w: 1}
@@ -190392,7 +190628,8 @@ Transform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Children:
- {fileID: 654639876}
m_Father: {fileID: 1529185470}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1736627184
@@ -225483,7 +225720,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
laser_sensor_link: {fileID: 1549220080}
robot_base_link: {fileID: 915175386}
robot_base_link: {fileID: 1549220081}
point_cloud_topic: /point_cloud
pose_topic: /laser_scan_pose
_frequency: 10
@@ -225491,7 +225728,7 @@ MonoBehaviour:
RangeMetersMin: 0
RangeMetersMax: 100
fov_horizontal: 360
fov_vertical: 45
fov_vertical: 90
angularResolution_vertical: 1
angularResolution_horizontal: 1
showPointCloud: 0
+3 -1
View File
@@ -5,7 +5,7 @@
"com.unity.feature.development": "1.0.2",
"com.unity.inputsystem": "1.19.0",
"com.unity.mathematics": "1.3.3",
"com.unity.multiplayer.center": "1.0.0",
"com.unity.multiplayer.center": "1.0.1",
"com.unity.robotics.ros-tcp-connector": "https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector",
"com.unity.robotics.urdf-importer": "https://github.com/Unity-Technologies/URDF-Importer.git?path=/com.unity.robotics.urdf-importer#v0.5.2",
"com.unity.robotics.visualizations": "https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.visualizations",
@@ -13,6 +13,7 @@
"com.unity.ugui": "2.0.0",
"com.unity.visualscripting": "1.9.11",
"com.unity.modules.accessibility": "1.0.0",
"com.unity.modules.adaptiveperformance": "1.0.0",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0",
"com.unity.modules.animation": "1.0.0",
@@ -39,6 +40,7 @@
"com.unity.modules.unitywebrequestaudio": "1.0.0",
"com.unity.modules.unitywebrequesttexture": "1.0.0",
"com.unity.modules.unitywebrequestwww": "1.0.0",
"com.unity.modules.vectorgraphics": "1.0.0",
"com.unity.modules.vehicles": "1.0.0",
"com.unity.modules.video": "1.0.0",
"com.unity.modules.vr": "1.0.0",
+22 -3
View File
@@ -78,7 +78,7 @@
"url": "https://packages.unity.com"
},
"com.unity.multiplayer.center": {
"version": "1.0.0",
"version": "1.0.1",
"depth": 0,
"source": "builtin",
"dependencies": {
@@ -116,7 +116,7 @@
"hash": "c27f00c6cf750d2d0564349b3039d19aa3925e7c"
},
"com.unity.settings-manager": {
"version": "2.1.0",
"version": "2.1.1",
"depth": 2,
"source": "registry",
"dependencies": {},
@@ -179,6 +179,14 @@
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.adaptiveperformance": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.subsystems": "1.0.0"
}
},
"com.unity.modules.ai": {
"version": "1.0.0",
"depth": 0,
@@ -321,7 +329,8 @@
"com.unity.modules.ui": "1.0.0",
"com.unity.modules.imgui": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0",
"com.unity.modules.hierarchycore": "1.0.0"
"com.unity.modules.hierarchycore": "1.0.0",
"com.unity.modules.physics": "1.0.0"
}
},
"com.unity.modules.umbra": {
@@ -385,6 +394,16 @@
"com.unity.modules.imageconversion": "1.0.0"
}
},
"com.unity.modules.vectorgraphics": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.uielements": "1.0.0",
"com.unity.modules.imageconversion": "1.0.0",
"com.unity.modules.imgui": "1.0.0"
}
},
"com.unity.modules.vehicles": {
"version": "1.0.0",
"depth": 0,
+2 -2
View File
@@ -1,2 +1,2 @@
m_EditorVersion: 6000.0.77f1
m_EditorVersionWithRevision: 6000.0.77f1 (88f89d0d8b31)
m_EditorVersion: 6000.3.9f1
m_EditorVersionWithRevision: 6000.3.9f1 (7a9955a4f2fa)
+51 -15
View File
@@ -1,10 +1,22 @@
# Развертывание симуляции зоны ЧС в Unity
Если в процессе установки и развертывания симуляции возникли неописанные в инструкции ошибки, то, возможно, решение появившейся проблемы описано в [последнем разделе](https://git.robofob.ru/sirius/sirius_unity_sim#%D0%B8%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5-%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B-%D0%B8-%D0%B8%D1%85-%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F) этой инструкции.
Требования к системе прописаны на [сайте](https://docs.unity3d.com/6000.0/Documentation/Manual/system-requirements.html), дублирую ниже:
> RAM должна быть не меньше 8 Гб
| Operating system | Operating system version | CPU | Graphics API | Additional requirements |
|------------------ |------------------------------------------------------------------------------------------------------ |--------------------------------------------------------------------------------------------------------------------------- |---------------------------------------------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Windows | Windows 10 version 21H1 (build 19043) or newer (X64), Windows 11 21H2 (build 22000) or newer (Arm64) | X64 architecture with SSE2 instruction set support, Arm64 | DX10, DX11, DX12 or Vulkan capable GPUs | Hardware vendor officially supported drivers |
| macOS | Big Sur 11 or newer | X64 architecture with SSE2 instruction set support (Intel processors) Apple M1 or above (Apple silicon-based processors) | Metal-capable Intel and AMD GPUs | Apple officially supported drivers (Intel processor) Rosetta 2 is required for Apple silicon devices running on either Apple silicon or Intel versions of the Unity Editor |
| Linux | Ubuntu 22.04, Ubuntu 24.04 | X64 architecture with SSE2 instruction set support | OpenGL 3.2+ or Vulkan-capable, Nvidia and AMD GPUs | Gnome desktop environment running on top of X11 or Wayland windowing system, Nvidia official proprietary graphics driver, or AMD Mesa graphics driver. Other configurations and user environments as provided with the supported distribution (Kernel, Compositor, etc.)<br><br>Notes:<br>• Ubuntu 22.04: Wayland is supported with AMD graphics cards.<br>• Ubuntu 24.04: Wayland is supported with AMD graphics cards and Nvidia graphics cards utilizing Nvidia proprietary graphics drivers 550 and above. |
# 1. Установка UnityHub
Установка лаунчера подробно описано [на официальном сайте](https://docs.unity.com/en-us/hub/install-hub-linux#install-the-hub-on-an-ubuntu-linux-distribution). Дублирую информацию:
1.1 Проверяем наличие или устанавливаем при необходимости утилиту curl:
1.1 Проверяем наличие утилиты curl или при необходимости устанавливаем ее:
```
sudo apt install curl
```
@@ -24,25 +36,36 @@ sudo apt install unityhub
```
# 2. Установка Unity
Заходим в Unityhub и во вкладке `Installs` нажимаем `Install Editor`. В появившимся окне выбираем `Unity 6.0`, проверяем, достаточно ли свободного места на диске, никакие дополнительные модули не ставим и подтверждаем установку. При необходимости модули можно будет доставить потом.
Заходим в Unityhub и во вкладке `Installs` нажимаем `Install Editor`. В появившимся окне выбираем `Unity 6000.0.77`, проверяем, достаточно ли свободного места на диске, никакие дополнительные модули не ставим и подтверждаем установку. При необходимости модули можно будет доставить потом.
> Разработка среды велась на движке `Unity 6000.0.77f1`, если на данный момент эта версия не доступна, а клиент предлагает поставить версию `6000.0.+`, то выбираем ее. При первом запуске проекта откроется меню, которое сообщит вам об отстутсвии указанной версии, в разделе `Installs` выбираем установленную версию и открываем проект в более новой версии. Сразу после выскочит сообщение о том, что часть настроек проекта из-за более актуальной версии придется изменить, выбираем `Continue`
# 3. Развертывание симуляции
1. Склонировать симуляцию из [Git‑репозитория](https://git.robofob.ru/sirius/sirius_unity_sim.git) в любую удобную папку на диске:
> Скачиваем сначала без подпроекта `unity_robotics`, т.к. его нужно ставить после установки доп. пакетов через `Package Manager` в Unity (через меню `Window > Package manager`), иначе первый запуск симуляции может надолго застрять на стадии компиляции.
Рабочим воркспейсом будем считать `~/sirius_ws`.
```bash
git clone --recurse-submodules https://git.robofob.ru/sirius/sirius_unity_sim.git
cd ~/sirius_ws
git clone https://git.robofob.ru/sirius/sirius_unity_sim.git
```
Если репозиторий уже был склонирован без модуля, то выполнить:
```bash
git submodule init
git submodule update
2. Скачиваем модели мира [Industrial_Zone_Modular_Pack](https://disk.yandex.ru/d/leNWr7JXhXlNJQ), [AllSkyFree](https://disk.yandex.ru/d/WjRCJTkRmQfaCQ), [Vefects](https://disk.yandex.ru/d/pohMh5mcrlVngA) и разархивируем их в папку `Assets`. Должна получится струткура:
```
Assets/
├─ AllSkyFree/
├─ Industrial_Zone_Modular_Pack/
├─ Vefects
└─ ...
```
2. Скачиваем модели мира [Industrial_Zone_Modular_Pack](https://disk.yandex.ru/d/leNWr7JXhXlNJQ) и разархивируем ее в папку `Assets`. Должна получится струткура `Assets/Industrial_Zone_Modular_Pack`
3. В UnityHub добавляем проект `Add new project` и выбираем папку `sirius_unity_sim`.
4. Открываем проект и ждем процесса компиляции проекта. Unity не сможет скомпилировать некоторые скрипты и из-за этого предложит перейти в режим `Safe Mode`. Соглашаемся.
> При возникновении ошибки `...failed to initialize unity graphics...` должна помочь перезагрузка ПК. Если не помогло, то гугл в помощь.
4. Открываем проект и ждем процесса компиляции проекта. Для успешного завершения компилции Unity не хватает некоторых пакетов, из-за чего система предложит перейти в режим `Safe Mode`. Соглашаемся.
> При запросе Unity на обновление собственного(ых) пакета(ов) следуйте предоставленным инструкциям.
> Если по каким-то причинам все скомпилилось удачно, то это значит, что у вас уже есть недостающие пакеты. Переходите к п.№6
5. После открытия программы устанавливаемя дополнительные пакеты для организации свзяи ROS+Unity:
- Через меню `Window > Package manager` выбрать раздел `Unity Registry` и установить библиотеку `Mathematics`,`Burst`
- Через меню `Window > Package manager` выбрать раздел `Unity Registry` и установить библиотеку `Mathematics`,`Burst`: вбить в поисковике название, выбрать нужный проект и в открывшемся описании пакета нажать `Install`, если вместо нее отображается кнопка `Remove`, значит, пакет уже установлен.
- Через интерфейс "+" выбрать `Add package from git URL...` и ввести прикрепленные ниже ссылки
- [ROS-TCP-Connector](https://github.com/Unity-Technologies/ROS-TCP-Connector) - перессылка сообещинй из ROS в Unity и обратно
`https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector`.
@@ -50,10 +73,18 @@ git submodule update
`https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.visualizations`
- [URDF-Importer](https://github.com/Unity-Technologies/URDF-Importer)
`https://github.com/Unity-Technologies/URDF-Importer.git?path=/com.unity.robotics.urdf-importer#v0.5.2`
6. Если не все ошибки были исправленны, то выходим из режима `Safe Mode > Exit Safe Mode`. Во вкладке `Robotics > ROS Settings` переключаем на протокол `ROS2` и ждем компиляции проекта. После компиляции оставшихся скриптов не должно возникнуть никаких критических ошибок.
6. Докачиваем подпроект `unity_robotics`:
```bash
cd ~/sirius_ws
git submodule init
git submodule update
```
Ждем компиляции симуляции (для этого сделайте окно Unity активным).
7. Если Unity самостоятельно не вышел из безопасного режима, то выходим вручную `Safe Mode > Exit Safe Mode`.
8. Проверяем, что во вкладке `Robotics > ROS Settings` выбран протокол `ROS2`. Если нет, то выбираем `ROS2` и ждем компиляции проекта. По заверщении все критические ошибки должны исчезнуть.
# 4. ROS2: установка дополнительных пакетов
Рабочим воркспейсом будем считать `~/sirius_ws`.
1. В `sirius_ws/src` клонируем пакет [ROS TCP Endpoint](https://github.com/Unity-Technologies/ROS-TCP-Endpoint):
```bash
@@ -66,6 +97,9 @@ git clone -b main-ros2 https://github.com/Unity-Technologies/ROS-TCP-Endpoint.gi
cd ~/sirius_ws
colcon build --symlink-install
```
В симуляции используются сообщение пользовательского типа [LocationsOnMesh](https://git.robofob.ru/sirius/gen_locations_on_mesh), поэтому для корректной работы симуляции этот тип сообщения должен быть предварительно скомпилирован на стороне ROS2.
# 5. Запуск симуляции
1. На стороне ROS2 запускает TCP-сервер:
@@ -73,17 +107,19 @@ colcon build --symlink-install
ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=127.0.0.1
```
2. Отрыть проект `sirius_sim` и в файлах проекта (вкладка `Project` в нижней части экрана) открыть сцену `main.unity`, которая распологается в папке `Assets/Scenes`.
3. В Unity запускаем симуляцию нажав кнопку `Play` (внешний вид: ▶) на панели инструментов (чуть выше окна просмотра сцены `Scene` / игрового окна `Game`). В верхнем левом углу игрового окна будет отображаться плашка с указанием IP-адреса и индикацией состояния подключения (внешний вид: ⇄): если стрелки <span style="color:red">красного цвета</span> - соединения нет, если <span style="color:blue">синего</span> - есть. Ошибки работы симуляции будут выводиться в собственную консоль Unity. Для прекращения работы симуляции повторно нажмите кнопку `Play`.
3. В Unity запускаем симуляцию нажав кнопку `Play` (внешний вид: ▶) на панели инструментов (чуть выше окна просмотра сцены `Scene` / игрового окна `Game`).
> В верхнем левом углу игрового окна будет отображаться плашка с указанием IP-адреса и индикацией состояния подключения (внешний вид: ⇄): если стрелки <span style="color:red">красного цвета</span> - соединения нет, если <span style="color:blue">синего</span> - есть, <span style="color:yellow">жетлого</span> - есть соединение, но с проблемами (игнорируем). Ошибки работы симуляции будут выводиться в собственную консоль Unity. Для прекращения работы симуляции повторно нажмите кнопку `Play`.
> Во время симуляции можно изменять параметры скриптов, положение объектов и другие элементы, но после ее завершения все изменения автоматически откатятся к начальному состоянию.
## 🚨 Известные проблемы и их решения
### Проблема импорта текстур
### ▪️ Проблема импорта текстур
При импроте текстур и материалов может возникнуть конфликт при рендеринге: предметы на сцене будут ярко розового цвета. Для устранения этой проблемы перейдите в строке меню наверху:<br>
`Edit > Render Pipeline > Universal Render Pipeline > Upgrade Project Materials to URP Materials или Upgrade Selected Project Materials to URP Materials` (второй вариант доступен при предварительном выборе проблемных текстур перед вызовом контекстного меню).
### Ошибка компиляции библиотеки URDF-Importer `DllNotFoundException: libdl.so`
### ▪️ Ошибка компиляции библиотеки URDF-Importer `DllNotFoundException: libdl.so`
> [Похожее Issue](https://github.com/Unity-Technologies/URDF-Importer/issues/224)
Полный текст ошибки: