Merge branch 'Mukheem:main' into main

This commit is contained in:
Masoomeh 2024-05-13 19:21:46 +02:00 committed by GitHub
commit b5df207bf7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 302 additions and 155 deletions
Assets
Oculus
Palmov Island/Low Poly Houses Free Pack/Prefabs/Trees
SharedSpatialAnchors
README.md

@ -14,7 +14,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
targetDeviceTypes: 030000000200000004000000
allowOptional3DofHeadTracking: 0
handTrackingSupport: 1
handTrackingSupport: 0
handTrackingFrequency: 0
handTrackingVersion: 2
anchorSupport: 1

@ -26,9 +26,9 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 87966117356681799}
m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
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_LocalScale: {x: 0.1, y: 0.1, z: 0.1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}

@ -1040,6 +1040,15 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 8322344887590106764}
- component: {fileID: 5361334261533984054}
- component: {fileID: -6369266532475339321}
- component: {fileID: 5341318377746430832}
- component: {fileID: -1201471494275974383}
- component: {fileID: -8231463906739603765}
- component: {fileID: -9180565859901777493}
- component: {fileID: 1693667315275080053}
- component: {fileID: -6453332735135581912}
- component: {fileID: 2070753283667298535}
m_Layer: 0
m_Name: map_logo
m_TagString: Untagged
@ -1056,7 +1065,7 @@ Transform:
m_GameObject: {fileID: 8661891273527454774}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.1894, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_LocalScale: {x: 9, y: 9, z: 9}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5323377776038644989}
@ -1071,3 +1080,180 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &5361334261533984054
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8661891273527454774}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4357a20539a2184997fc22358044a5f, type: 3}
m_Name:
m_EditorClassIdentifier:
prefab: {fileID: 8661891273527454774}
previewPrefab: {fileID: 8661891273527454774}
--- !u!114 &-6369266532475339321
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8661891273527454774}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 43f86b14a27b52f4f9298c33015b5c26, type: 3}
m_Name:
m_EditorClassIdentifier:
_transferOnSecondSelection: 0
_addNewPointsToFront: 0
_forwardElement: {fileID: 0}
_oneGrabTransformer: {fileID: 5341318377746430832}
_twoGrabTransformer: {fileID: 0}
_targetTransform: {fileID: 0}
_maxGrabPoints: -1
--- !u!114 &5341318377746430832
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8661891273527454774}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3236b8f205019504589358e7e0412a38, type: 3}
m_Name:
m_EditorClassIdentifier:
_positionConstraints:
ConstraintsAreRelative: 0
XAxis:
ConstrainAxis: 0
AxisRange:
Min: 0
Max: 0
YAxis:
ConstrainAxis: 0
AxisRange:
Min: 0
Max: 0
ZAxis:
ConstrainAxis: 0
AxisRange:
Min: 0
Max: 0
_rotationConstraints:
XAxis:
ConstrainAxis: 0
AxisRange:
Min: 0
Max: 0
YAxis:
ConstrainAxis: 0
AxisRange:
Min: 0
Max: 0
ZAxis:
ConstrainAxis: 0
AxisRange:
Min: 0
Max: 0
--- !u!114 &-1201471494275974383
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8661891273527454774}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1bedaac29a943f844a7074b53c8bdf9f, type: 3}
m_Name:
m_EditorClassIdentifier:
_pointable: {fileID: -6369266532475339321}
_rigidbody: {fileID: -8231463906739603765}
_scaleMassWithSize: 1
--- !u!54 &-8231463906739603765
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8661891273527454774}
serializedVersion: 2
m_Mass: 1
m_Drag: 0
m_AngularDrag: 0.05
m_UseGravity: 0
m_IsKinematic: 0
m_Interpolate: 0
m_Constraints: 0
m_CollisionDetection: 3
--- !u!114 &-9180565859901777493
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8661891273527454774}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: aa584fbee541324448dd18d8409c7a41, type: 3}
m_Name:
m_EditorClassIdentifier:
ObservedComponentsFoldoutOpen: 1
Group: 0
prefixField: -1
Synchronization: 3
OwnershipTransfer: 0
observableSearch: 2
ObservedComponents:
- {fileID: 1693667315275080053}
- {fileID: -6453332735135581912}
sceneViewId: 0
InstantiationId: 0
isRuntimeInstantiated: 0
--- !u!114 &1693667315275080053
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8661891273527454774}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 627855c7f81362d41938ffe0b1475957, type: 3}
m_Name:
m_EditorClassIdentifier:
m_SynchronizePosition: 1
m_SynchronizeRotation: 1
m_SynchronizeScale: 1
m_UseLocal: 1
--- !u!114 &-6453332735135581912
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8661891273527454774}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 64179f3720bbfe947b7724caa67b7c1d, type: 3}
m_Name:
m_EditorClassIdentifier:
m_SynchronizeVelocity: 1
m_SynchronizeAngularVelocity: 1
m_TeleportEnabled: 1
m_TeleportIfDistanceGreaterThan: 3
--- !u!114 &2070753283667298535
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8661891273527454774}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 118420a922675d145ade2a28e327d7a5, type: 3}
m_Name:
m_EditorClassIdentifier:

@ -4701,12 +4701,12 @@ GameObject:
- component: {fileID: 1232630264}
- component: {fileID: 1232630263}
m_Layer: 0
m_Name: Spannner
m_Name: Spawnner
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!114 &1232630263
MonoBehaviour:
m_ObjectHideFlags: 0
@ -4719,8 +4719,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: f4357a20539a2184997fc22358044a5f, type: 3}
m_Name:
m_EditorClassIdentifier:
prefab: {fileID: 5361334261533984053}
previewPrefab: {fileID: 5361334261533984053}
prefab: {fileID: 8661891273527454774, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
previewPrefab: {fileID: 87966117356681799, guid: c0118078f34d6b34ea8d5afec2be7cff, type: 3}
--- !u!4 &1232630264
Transform:
m_ObjectHideFlags: 0
@ -4734,7 +4734,7 @@ Transform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 10
m_RootOrder: 8
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1282461827
GameObject:
@ -5886,64 +5886,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1496496565}
m_CullTransparentMesh: 1
--- !u!1 &1501354727
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1501354729}
- component: {fileID: 1501354728}
m_Layer: 0
m_Name: Proxima
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1501354728
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1501354727}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e277581af68d4604da056e460b819656, type: 3}
m_Name:
m_EditorClassIdentifier:
_displayName: TwinTurbine
_port: 7759
_password: 123456
_useHttps: 1
_certificate: {fileID: 0}
_certificatePassword:
_runOnEnable: 1
_logBufferSize: 1000
_instantiateStatusUI: 1
_instantiateConnectUI: 0
_dontDestroyOnLoad: 1
_setRunInBackground: 1
_serverType: 1
_serverUrl:
--- !u!4 &1501354729
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1501354727}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.69282347, y: -1.4099673, z: -0.2268675}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 9
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1515478303
GameObject:
m_ObjectHideFlags: 0
@ -9342,82 +9284,6 @@ PrefabInstance:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: cd8280e8c381fbd4bbcad4b7ee581c31, type: 3}
--- !u!1001 &5361334261533984052
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 8322344887590106764, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
propertyPath: m_RootOrder
value: 8
objectReference: {fileID: 0}
- target: {fileID: 8322344887590106764, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
propertyPath: m_LocalPosition.x
value: 0.2285
objectReference: {fileID: 0}
- target: {fileID: 8322344887590106764, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8322344887590106764, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8322344887590106764, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8322344887590106764, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8322344887590106764, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8322344887590106764, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8322344887590106764, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8322344887590106764, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8322344887590106764, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8661891273527454774, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
propertyPath: m_Name
value: map_logo
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
--- !u!1 &5361334261533984053 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 8661891273527454774, guid: 8754aa5f3d45cec4980f02029a881f7d, type: 3}
m_PrefabInstance: {fileID: 5361334261533984052}
m_PrefabAsset: {fileID: 0}
--- !u!114 &5361334261533984054
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5361334261533984053}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4357a20539a2184997fc22358044a5f, type: 3}
m_Name:
m_EditorClassIdentifier:
prefab: {fileID: 5361334261533984053}
previewPrefab: {fileID: 5361334261533984053}
--- !u!4 &7079690333416248134 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 5414912244175512723, guid: 60fa00281e83b294583adc31df520fbe, type: 3}

@ -25,6 +25,7 @@ public class PrefabSpawnner : MonoBehaviour
if (OVRInput.GetDown(OVRInput.Button.One))
{
Instantiate(prefab, hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal));
this.gameObject.SetActive(false);
}
}
}

@ -25,6 +25,9 @@ using UnityEngine.UI;
using TMPro;
using PhotonPun = Photon.Pun;
using PhotonRealtime = Photon.Realtime;
using System.Linq;
using System;
using System.Threading.Tasks;
public class SharedAnchorControlPanel : MonoBehaviour
{
@ -103,6 +106,72 @@ public class SharedAnchorControlPanel : MonoBehaviour
renderStyleText.text = "Render: " + CoLocatedPassthroughManager.Instance.visualization.ToString();
}
ToggleRoomButtons(false);
}
public async Task roomDetails()
{
var anchors = new List<OVRAnchor>();
await OVRAnchor.FetchAnchorsAsync<OVRRoomLayout>(anchors);
// no rooms - call Space Setup or check Scene permission
if (anchors.Count == 0)
return;
SampleController.Instance.Log("Anchors Fetched.");
SampleController.Instance.Log(anchors.Count.ToString());
SampleController.Instance.Log(anchors[0].ToString());
// access anchor data by retrieving the components
var room = anchors.First();
// access the ceiling, floor and walls with the OVRRoomLayout component
var roomLayout = room.GetComponent<OVRRoomLayout>();
if (roomLayout.TryGetRoomLayout(out Guid ceiling, out Guid floor, out Guid[] walls))
{
// use these guids to fetch the OVRAnchor object directly
await OVRAnchor.FetchAnchorsAsync(walls, anchors);
}
// access the list of children with the OVRAnchorContainer component
if (!room.TryGetComponent(out OVRAnchorContainer container))
return;
// use the component helper function to access all child anchors
await container.FetchChildrenAsync(anchors);
// Log the children anchors and their positions
foreach (var anchor in anchors)
{
// check that this anchor is the floor
if (!anchor.TryGetComponent(out OVRSemanticLabels labels) ||
!labels.Labels.Contains(OVRSceneManager.Classification.Table))
{
continue;
}
// enable locatable/tracking
if (!anchor.TryGetComponent(out OVRLocatable locatable))
continue;
await locatable.SetEnabledAsync(true);
// get the floor dimensions
anchor.TryGetComponent(out OVRBounded3D bounded3D);
var size = bounded3D.BoundingBox.size;
SampleController.Instance.Log("Child Anchors Fetched."+ size);
SampleController.Instance.Log(anchors.Count.ToString());
SampleController.Instance.Log(anchors[0].ToString());
// If you want the position in local space relative to the room, use anchor.transform.localPosition
// only interested in the first floor anchor
break;
}
}
public void OnCreateModeButtonPressed()
@ -144,7 +213,7 @@ public class SharedAnchorControlPanel : MonoBehaviour
{
SampleController.Instance.Log("OnSpawnCubeButtonPressed");
SpawnCube();
SpawnCubeAsync();
}
public void LogNext()
@ -171,11 +240,13 @@ public class SharedAnchorControlPanel : MonoBehaviour
pageText.text = SampleController.Instance.logText.pageToDisplay + "/" + SampleController.Instance.logText.textInfo.pageCount;
}
private void SpawnCube()
private async Task SpawnCubeAsync()
{
var networkedCube = PhotonPun.PhotonNetwork.Instantiate(cubePrefab.name, spawnPoint.position, spawnPoint.rotation);
var photonGrabbable = networkedCube.GetComponent<PhotonGrabbableObject>();
photonGrabbable.TransferOwnershipToLocalPlayer();
await roomDetails();
}
public void ChangeUserPassthroughVisualization()
@ -260,7 +331,7 @@ public class SharedAnchorControlPanel : MonoBehaviour
SampleController.Instance.Log("Trying to Spawn WT Object");
SampleController.Instance.Log(spawnPoint.position.ToString());
Debug.Log(spawnPoint.position);
var networkedWindTurbine = PhotonPun.PhotonNetwork.Instantiate(TwinTurbine_windTurbine.name, new Vector3(Camera.main.transform.position.x,0, Camera.main.transform.position.z-3), Quaternion.identity);
var networkedWindTurbine = PhotonPun.PhotonNetwork.Instantiate(TwinTurbine_windTurbine.name, new Vector3(Camera.main.transform.position.x,0, Camera.main.transform.position.z), Quaternion.identity);
var photonGrabbable = networkedWindTurbine.GetComponent<PhotonGrabbableObject>();
photonGrabbable.TransferOwnershipToLocalPlayer();
}

@ -22,9 +22,10 @@ After some brainstorming, we came up with some ideas for different stages:
<figure style="text-align:center">
<img src="https://github.com/Mukheem/TwinTurbine/assets/145973209/03e1ef34-4b37-421a-b54a-28db34e8059b" alt="DTComponents" style="max-width:100%;" height="auto">
<figcaption><i>Digital Twin Components</i></figcaption>
<figcaption style="padding-top: 10px;"><i>Digital Twin Components</i></figcaption>
</figure>
<figure style="text-align:center">
<img src="https://github.com/Mukheem/TwinTurbine/assets/145973209/7ca62bda-072b-40ea-a0ed-361c86724b81" alt="Primary Prototype" style="max-width:100%;" height="auto">
<figcaption><i>Primary Prototype for physical turbine & virtual model</i></figcaption>
@ -32,27 +33,44 @@ After some brainstorming, we came up with some ideas for different stages:
- Then, we shared our ideas on how to rotate the servo motor from Arduino and which physical turbine is better to provide.
<figure style="text-align:center">
<img src="https://github.com/Mukheem/TwinTurbine/assets/145973209/b777cb85-2e86-4cd3-8317-d48586b27ba8" alt="Sketch" style="max-width:100%;" height="auto">
<figcaption><i>Arduino sketch to rotate the Servo Motor</i></figcaption>
<img src="https://github.com/Mukheem/TwinTurbine/assets/145973209/7ca62bda-072b-40ea-a0ed-361c86724b81" alt="Primary Prototype" style="max-width:100%;" height="auto">
<figcaption style="margin-top: 10px;"><i>Primary Prototype for physical turbine & virtual model</i></figcaption>
</figure>
<figure style="text-align:center">
<img src="https://github.com/Mukheem/TwinTurbine/assets/145973209/c1b97fd4-f495-4e54-8c17-a1d949cca986" alt="Wind Turbine" style="max-width:100%;" height="auto">
<figcaption><i>Servo motor and wind turbine</i></figcaption>
<figcaption style="padding-top: 10px; margin-top: 10px;"><i>Servo motor and wind turbine</i></figcaption>
</figure>
- Finally, we focused on the way we want to make the connection between ESP32 and Unity
<figure style="text-align:center">
<img src="https://github.com/Mukheem/TwinTurbine/assets/145973209/d910c49e-2518-4181-8831-0987415b2977" alt="Communication" style="max-width:100%;" height="auto"></i>
<img src="https://github.com/Mukheem/TwinTurbine/assets/145973209/d910c49e-2518-4181-8831-0987415b2977" alt="Communication" style="max-width:100%;" height="auto">
<figcaption><i>Connecting Unity to Arduino</i></figcaption>
</figure>
### 2.2. User Persona:
- The Project's target users are engineers and technicians who work with wind energy systems and Educational Institutions where the simulator can be used for training purposes. Moreover, the main target group is enterprises interested in immersive technology.
- User Persona: A description of your target user, their needs, motivations, and pain points, and how your project addresses them.
- User Journey: A visualization of how your user interacts with your project, from the initial trigger to the final outcome, and what emotions they experience along the way.
- Wireframes and Prototypes: A collection of sketches, mockups, or prototypes that show the layout, structure, and functionality of your project, and how you tested and iterated on them.
The Project's target users are engineers and technicians working with wind energy systems and Educational Institutions where the simulator can be used for training. Moreover, the main target group is enterprises interested in immersive technology.
### 2.3. User Journey:
<!--A visualization of how your user interacts with your project, from the initial trigger to the final outcome, and what emotions they experience along the way.-->
In the experience, a Physical Wind turbine would be emulated using a servo motor. Real-time data , including RPM of the wind turbine (represented by the servo motor) and the current generated by the turbine, are collected from the physical entity and transferred to the virtual environment for monitoring and visualization.
### 2.4. Wireframes and Prototypes:
<!-- A collection of sketches, mockups, or prototypes that show the layout, structure, and functionality of your project, and how you tested and iterated on them.-->
To understand how to rotate the physical wind turbine, the team members tried various strategies and tools to see which was more appropriate for our project.
<figure style="text-align:center">
<img src="https://github.com/Mukheem/TwinTurbine/assets/145973209/c1b97fd4-f495-4e54-8c17-a1d949cca986" alt="Physical Entity" style="max-width:100%;" height="auto">
<figcaption><i>Servo motor and Arduino</i></figcaption>
</figure>
<figure style="text-align:center">
<img src="https://github.com/Mukheem/TwinTurbine/assets/145973209/c1b97fd4-f495-4e54-8c17-a1d949cca986" alt="Physical Turbine" style="max-width:100%;" height="auto">
<figcaption><i>Servo motor and Arduino</i></figcaption>
</figure>
## System description
@ -107,6 +125,11 @@ Some tips, tricks, and best practices for using [Your App XR} effectively:
- Tip 1
- Tip 2
## Draft Poster
<figure style="text-align:center">
<img src="https://github.com/Mukheem/TwinTurbine/blob/main/Portfolio%26Poster/Draft%20poster.jpeg" alt="Communication" style="max-width:100%;" height="auto">
<figcaption><i>Draft Poster</i></figcaption>
</figure>
## References