0.22.16
This commit is contained in:
@@ -35,3 +35,67 @@ Time,AGV_ID,Task,Target,Success
|
|||||||
2025-03-07 오전 9:37:36,,SpinToTarget,(1.78, -0.10, -4.92),True
|
2025-03-07 오전 9:37:36,,SpinToTarget,(1.78, -0.10, -4.92),True
|
||||||
|
|
||||||
2025-03-07 오전 9:37:39,,MoveToTarget,(1.78, -0.10, -4.92),True
|
2025-03-07 오전 9:37:39,,MoveToTarget,(1.78, -0.10, -4.92),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:41:31,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:41:31,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:41:38,,MoveToTarget,(-6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:41:38,,MoveToTarget,(-6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:42:17,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:42:17,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:42:26,,SpinToQuaternion,(0.00000, 0.00000, 0.00000, 0.00000),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:42:26,,SpinToQuaternion,(0.00000, 0.00000, 0.00000, 0.00000),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:42:46,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:42:46,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:42:51,,SpinToTarget,(-6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:42:51,,SpinToTarget,(-6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:42:57,,MoveToTarget,(-6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:42:57,,MoveToTarget,(-6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:43:34,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 2:43:34,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:03:55,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:03:55,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:05:17,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:05:17,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:07:00,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:07:00,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:07:07,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:07:07,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:08:04,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:08:04,,MoveToTarget,(6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:08:11,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:08:11,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:08:16,,SpinToTarget,(-6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:08:16,,SpinToTarget,(-6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:08:23,,MoveToTarget,(-6.00, -0.35, -3.00),True
|
||||||
|
|
||||||
|
2025-03-20 오후 3:08:23,,MoveToTarget,(-6.00, -0.35, -3.00),True
|
||||||
|
|||||||
|
@@ -10,12 +10,12 @@ namespace XED.VirtualFactory
|
|||||||
|
|
||||||
public void Regist(TwinObject to)
|
public void Regist(TwinObject to)
|
||||||
{
|
{
|
||||||
locationMap.Add(to.name, to);
|
locationMap.Add(to.entity.id, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Unregist(TwinObject to)
|
public void Unregist(TwinObject to)
|
||||||
{
|
{
|
||||||
locationMap.Remove(to.name);
|
locationMap.Remove(to.entity.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Unregist(string id)
|
public void Unregist(string id)
|
||||||
|
|||||||
@@ -259,6 +259,11 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 6eb9e1609cd682646a916778a2ae8797, type: 3}
|
m_Script: {fileID: 11500000, guid: 6eb9e1609cd682646a916778a2ae8797, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
stackerCranes: []
|
||||||
|
agvManager: {fileID: 0}
|
||||||
|
agvMap: {fileID: 0}
|
||||||
|
loads: []
|
||||||
|
prf_Load: {fileID: 2713012076675240762, guid: 7cbbdba660dbd38479c561c09e38ec11, type: 3}
|
||||||
--- !u!1001 &125296021
|
--- !u!1001 &125296021
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -435,6 +440,7 @@ MonoBehaviour:
|
|||||||
- {fileID: 1590019367}
|
- {fileID: 1590019367}
|
||||||
- {fileID: 1554807644}
|
- {fileID: 1554807644}
|
||||||
nodeType: 0
|
nodeType: 0
|
||||||
|
reserved: 0
|
||||||
nodeClass:
|
nodeClass:
|
||||||
id: 0
|
id: 0
|
||||||
x: 0
|
x: 0
|
||||||
@@ -443,7 +449,6 @@ MonoBehaviour:
|
|||||||
linkedNodID: []
|
linkedNodID: []
|
||||||
loadSocket: {fileID: 1942261059}
|
loadSocket: {fileID: 1942261059}
|
||||||
unLoadSocket: {fileID: 6157020}
|
unLoadSocket: {fileID: 6157020}
|
||||||
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
|
|
||||||
cargo: {fileID: 0}
|
cargo: {fileID: 0}
|
||||||
--- !u!4 &146771355
|
--- !u!4 &146771355
|
||||||
Transform:
|
Transform:
|
||||||
@@ -1003,6 +1008,7 @@ MonoBehaviour:
|
|||||||
linkedNodes:
|
linkedNodes:
|
||||||
- {fileID: 1172928290}
|
- {fileID: 1172928290}
|
||||||
nodeType: 1
|
nodeType: 1
|
||||||
|
reserved: 0
|
||||||
nodeClass:
|
nodeClass:
|
||||||
id: 0
|
id: 0
|
||||||
x: 0
|
x: 0
|
||||||
@@ -1011,7 +1017,6 @@ MonoBehaviour:
|
|||||||
linkedNodID: []
|
linkedNodID: []
|
||||||
loadSocket: {fileID: 1704515058}
|
loadSocket: {fileID: 1704515058}
|
||||||
unLoadSocket: {fileID: 1324543929}
|
unLoadSocket: {fileID: 1324543929}
|
||||||
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
|
|
||||||
cargo: {fileID: 0}
|
cargo: {fileID: 0}
|
||||||
--- !u!4 &617492812
|
--- !u!4 &617492812
|
||||||
Transform:
|
Transform:
|
||||||
@@ -1298,6 +1303,7 @@ MonoBehaviour:
|
|||||||
linkedNodes:
|
linkedNodes:
|
||||||
- {fileID: 2097314996}
|
- {fileID: 2097314996}
|
||||||
nodeType: 3
|
nodeType: 3
|
||||||
|
reserved: 0
|
||||||
nodeClass:
|
nodeClass:
|
||||||
id: 0
|
id: 0
|
||||||
x: 0
|
x: 0
|
||||||
@@ -1306,7 +1312,6 @@ MonoBehaviour:
|
|||||||
linkedNodID: []
|
linkedNodID: []
|
||||||
loadSocket: {fileID: 394740631}
|
loadSocket: {fileID: 394740631}
|
||||||
unLoadSocket: {fileID: 2015597917}
|
unLoadSocket: {fileID: 2015597917}
|
||||||
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
|
|
||||||
cargo: {fileID: 0}
|
cargo: {fileID: 0}
|
||||||
--- !u!4 &1082030771
|
--- !u!4 &1082030771
|
||||||
Transform:
|
Transform:
|
||||||
@@ -1453,6 +1458,7 @@ MonoBehaviour:
|
|||||||
linkedNodes:
|
linkedNodes:
|
||||||
- {fileID: 1554807644}
|
- {fileID: 1554807644}
|
||||||
nodeType: 2
|
nodeType: 2
|
||||||
|
reserved: 0
|
||||||
nodeClass:
|
nodeClass:
|
||||||
id: 0
|
id: 0
|
||||||
x: 0
|
x: 0
|
||||||
@@ -1461,7 +1467,6 @@ MonoBehaviour:
|
|||||||
linkedNodID: []
|
linkedNodID: []
|
||||||
loadSocket: {fileID: 216124008}
|
loadSocket: {fileID: 216124008}
|
||||||
unLoadSocket: {fileID: 1824210708}
|
unLoadSocket: {fileID: 1824210708}
|
||||||
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
|
|
||||||
cargo: {fileID: 0}
|
cargo: {fileID: 0}
|
||||||
--- !u!4 &1084391825
|
--- !u!4 &1084391825
|
||||||
Transform:
|
Transform:
|
||||||
@@ -1613,7 +1618,7 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 43c2fa2860dfa344d856558ec881bb8a, type: 3}
|
m_Script: {fileID: 11500000, guid: 43c2fa2860dfa344d856558ec881bb8a, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
agvPrefab: {fileID: 0}
|
agvPrefab: {fileID: 3521821355188594447, guid: 03eb7e95fc0cb334d848d40c49b4110e, type: 3}
|
||||||
agvs: []
|
agvs: []
|
||||||
fileName: Assets/AGVsLog.csv
|
fileName: Assets/AGVsLog.csv
|
||||||
--- !u!1 &1172928289
|
--- !u!1 &1172928289
|
||||||
@@ -1659,6 +1664,7 @@ MonoBehaviour:
|
|||||||
- {fileID: 2097314996}
|
- {fileID: 2097314996}
|
||||||
- {fileID: 617492811}
|
- {fileID: 617492811}
|
||||||
nodeType: 0
|
nodeType: 0
|
||||||
|
reserved: 0
|
||||||
nodeClass:
|
nodeClass:
|
||||||
id: 0
|
id: 0
|
||||||
x: 0
|
x: 0
|
||||||
@@ -1667,7 +1673,6 @@ MonoBehaviour:
|
|||||||
linkedNodID: []
|
linkedNodID: []
|
||||||
loadSocket: {fileID: 891010309}
|
loadSocket: {fileID: 891010309}
|
||||||
unLoadSocket: {fileID: 1310341712}
|
unLoadSocket: {fileID: 1310341712}
|
||||||
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
|
|
||||||
cargo: {fileID: 0}
|
cargo: {fileID: 0}
|
||||||
--- !u!4 &1172928291
|
--- !u!4 &1172928291
|
||||||
Transform:
|
Transform:
|
||||||
@@ -2072,6 +2077,7 @@ MonoBehaviour:
|
|||||||
- {fileID: 146771354}
|
- {fileID: 146771354}
|
||||||
- {fileID: 1084391824}
|
- {fileID: 1084391824}
|
||||||
nodeType: 0
|
nodeType: 0
|
||||||
|
reserved: 0
|
||||||
nodeClass:
|
nodeClass:
|
||||||
id: 0
|
id: 0
|
||||||
x: 0
|
x: 0
|
||||||
@@ -2080,7 +2086,6 @@ MonoBehaviour:
|
|||||||
linkedNodID: []
|
linkedNodID: []
|
||||||
loadSocket: {fileID: 884415325}
|
loadSocket: {fileID: 884415325}
|
||||||
unLoadSocket: {fileID: 736132299}
|
unLoadSocket: {fileID: 736132299}
|
||||||
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
|
|
||||||
cargo: {fileID: 0}
|
cargo: {fileID: 0}
|
||||||
--- !u!4 &1554807645
|
--- !u!4 &1554807645
|
||||||
Transform:
|
Transform:
|
||||||
@@ -2227,6 +2232,7 @@ MonoBehaviour:
|
|||||||
linkedNodes:
|
linkedNodes:
|
||||||
- {fileID: 146771354}
|
- {fileID: 146771354}
|
||||||
nodeType: 3
|
nodeType: 3
|
||||||
|
reserved: 0
|
||||||
nodeClass:
|
nodeClass:
|
||||||
id: 0
|
id: 0
|
||||||
x: 0
|
x: 0
|
||||||
@@ -2235,7 +2241,6 @@ MonoBehaviour:
|
|||||||
linkedNodID: []
|
linkedNodID: []
|
||||||
loadSocket: {fileID: 1349873324}
|
loadSocket: {fileID: 1349873324}
|
||||||
unLoadSocket: {fileID: 1191611793}
|
unLoadSocket: {fileID: 1191611793}
|
||||||
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
|
|
||||||
cargo: {fileID: 0}
|
cargo: {fileID: 0}
|
||||||
--- !u!4 &1590019368
|
--- !u!4 &1590019368
|
||||||
Transform:
|
Transform:
|
||||||
@@ -2521,6 +2526,7 @@ MonoBehaviour:
|
|||||||
- {fileID: 691233192}
|
- {fileID: 691233192}
|
||||||
- {fileID: 146771354}
|
- {fileID: 146771354}
|
||||||
nodeType: 1
|
nodeType: 1
|
||||||
|
reserved: 0
|
||||||
nodeClass:
|
nodeClass:
|
||||||
id: 0
|
id: 0
|
||||||
x: 0
|
x: 0
|
||||||
@@ -2529,7 +2535,6 @@ MonoBehaviour:
|
|||||||
linkedNodID: []
|
linkedNodID: []
|
||||||
loadSocket: {fileID: 2052880161}
|
loadSocket: {fileID: 2052880161}
|
||||||
unLoadSocket: {fileID: 1391611792}
|
unLoadSocket: {fileID: 1391611792}
|
||||||
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
|
|
||||||
cargo: {fileID: 0}
|
cargo: {fileID: 0}
|
||||||
--- !u!4 &1992156870
|
--- !u!4 &1992156870
|
||||||
Transform:
|
Transform:
|
||||||
@@ -2740,6 +2745,7 @@ MonoBehaviour:
|
|||||||
- {fileID: 1172928290}
|
- {fileID: 1172928290}
|
||||||
- {fileID: 1082030770}
|
- {fileID: 1082030770}
|
||||||
nodeType: 0
|
nodeType: 0
|
||||||
|
reserved: 0
|
||||||
nodeClass:
|
nodeClass:
|
||||||
id: 0
|
id: 0
|
||||||
x: 0
|
x: 0
|
||||||
@@ -2748,7 +2754,6 @@ MonoBehaviour:
|
|||||||
linkedNodID: []
|
linkedNodID: []
|
||||||
loadSocket: {fileID: 1353975497}
|
loadSocket: {fileID: 1353975497}
|
||||||
unLoadSocket: {fileID: 878306402}
|
unLoadSocket: {fileID: 878306402}
|
||||||
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
|
|
||||||
cargo: {fileID: 0}
|
cargo: {fileID: 0}
|
||||||
--- !u!4 &2097314997
|
--- !u!4 &2097314997
|
||||||
Transform:
|
Transform:
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ namespace XED.VirtualFactory
|
|||||||
EmergencyStop
|
EmergencyStop
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AGV : MonoBehaviour
|
public class AGV : TwinObject
|
||||||
{
|
{
|
||||||
public AGVTaskType agvTask;
|
public AGVTaskType agvTask;
|
||||||
public AGVState agvState;
|
public AGVState agvState;
|
||||||
@@ -81,7 +81,7 @@ namespace XED.VirtualFactory
|
|||||||
|
|
||||||
public GameObject lift;
|
public GameObject lift;
|
||||||
public GameObject pickupSocket;
|
public GameObject pickupSocket;
|
||||||
public GameObject load;
|
public Load load;
|
||||||
public GameObject chargeZone;
|
public GameObject chargeZone;
|
||||||
|
|
||||||
bool accelerationFlag = true;
|
bool accelerationFlag = true;
|
||||||
@@ -185,7 +185,7 @@ namespace XED.VirtualFactory
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void QueueOrderOnAGV(AGVOrderClass order)
|
public void AddOrder(AGVOrderClass order)
|
||||||
{
|
{
|
||||||
if (agvState == AGVState.Idle)
|
if (agvState == AGVState.Idle)
|
||||||
{
|
{
|
||||||
@@ -572,7 +572,7 @@ namespace XED.VirtualFactory
|
|||||||
yield return null;
|
yield return null;
|
||||||
}
|
}
|
||||||
yield return null;
|
yield return null;
|
||||||
load = target.transform.GetChild(0).gameObject;
|
load = target.transform.GetChild(0).gameObject.GetComponent<Load>();
|
||||||
load.transform.SetParent(lift.transform);
|
load.transform.SetParent(lift.transform);
|
||||||
|
|
||||||
onTaskComplete?.Invoke(this, agvTask, target.ToString(), arrive);
|
onTaskComplete?.Invoke(this, agvTask, target.ToString(), arrive);
|
||||||
|
|||||||
16
Assets/Scripts/Studio/Machine/AGV/AGVEntity.cs
Normal file
16
Assets/Scripts/Studio/Machine/AGV/AGVEntity.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using System.Numerics;
|
||||||
|
|
||||||
|
namespace XED.VirtualFactory
|
||||||
|
{
|
||||||
|
public class AGVEntity: IEntity
|
||||||
|
{
|
||||||
|
public Vector3 position;
|
||||||
|
public Quaternion rotation;
|
||||||
|
public string id { get; set; }
|
||||||
|
public string ToJson()
|
||||||
|
{
|
||||||
|
return JsonConvert.SerializeObject(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Scripts/Studio/Machine/AGV/AGVEntity.cs.meta
Normal file
2
Assets/Scripts/Studio/Machine/AGV/AGVEntity.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a9246ea54580e7c49944fa59e16c111d
|
||||||
@@ -10,8 +10,7 @@ namespace XED.VirtualFactory
|
|||||||
{
|
{
|
||||||
public class AGVManager : MonoBehaviour,ISingle
|
public class AGVManager : MonoBehaviour,ISingle
|
||||||
{
|
{
|
||||||
[SerializeField]
|
public AGV agvPrefab;
|
||||||
GameObject agvPrefab;
|
|
||||||
|
|
||||||
public List<AGV> agvs = new List<AGV>();
|
public List<AGV> agvs = new List<AGV>();
|
||||||
Dictionary<AGV, List<AGVNode>> orderDict = new Dictionary<AGV, List<AGVNode>>();
|
Dictionary<AGV, List<AGVNode>> orderDict = new Dictionary<AGV, List<AGVNode>>();
|
||||||
@@ -43,40 +42,48 @@ namespace XED.VirtualFactory
|
|||||||
|
|
||||||
public AGV SpawnAGV(Vector3 position,Quaternion rotation)
|
public AGV SpawnAGV(Vector3 position,Quaternion rotation)
|
||||||
{
|
{
|
||||||
GameObject newAGV = Instantiate(agvPrefab,position, rotation);
|
var agv = Instantiate(agvPrefab,position, rotation);
|
||||||
AGV agv = newAGV.GetComponent<AGV>();
|
|
||||||
agv.onTaskComplete += WriteLog;
|
agv.onTaskComplete += WriteLog;
|
||||||
agvs.Add(agv);
|
agvs.Add(agv);
|
||||||
return agv;
|
return agv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AGV SpawnEmptyAGV()
|
||||||
|
{
|
||||||
|
var result = Instantiate(agvPrefab);
|
||||||
|
result.onTaskComplete += WriteLog;
|
||||||
|
agvs.Add(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public void OrderToAGV(AGV AGV, AGVTaskType order, GameObject Target,Component comp)
|
public void OrderToAGV(AGV AGV, AGVTaskType order, GameObject Target,Component comp)
|
||||||
{
|
{
|
||||||
AGV.QueueOrderOnAGV(new AGVOrderClass(order, Target,comp));
|
AGV.AddOrder(new AGVOrderClass(order, Target,comp));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OrderToAGV(int AGVindex,AGVTaskType order, GameObject Target)
|
public void OrderToAGV(int AGVindex,AGVTaskType order, GameObject Target)
|
||||||
{
|
{
|
||||||
agvs[AGVindex].QueueOrderOnAGV(new AGVOrderClass(order, Target));
|
agvs[AGVindex].AddOrder(new AGVOrderClass(order, Target));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OrderToAGV(AGV AGV, AGVTaskType order, GameObject Target)
|
public void OrderToAGV(AGV AGV, AGVTaskType order, GameObject Target)
|
||||||
{
|
{
|
||||||
AGV.QueueOrderOnAGV(new AGVOrderClass(order, Target));
|
AGV.AddOrder(new AGVOrderClass(order, Target));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OrderToAGV(AGV AGV, AGVTaskType order, Vector3 Target)
|
public void OrderToAGV(AGV AGV, AGVTaskType order, Vector3 Target)
|
||||||
{
|
{
|
||||||
AGV.QueueOrderOnAGV(new AGVOrderClass(order, Target));
|
AGV.AddOrder(new AGVOrderClass(order, Target));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OrderToAGV(int AGVindex, AGVTaskType order, GameObject Target1, GameObject Target2)
|
public void OrderToAGV(int AGVindex, AGVTaskType order, GameObject Target1, GameObject Target2)
|
||||||
{
|
{
|
||||||
agvs[AGVindex].QueueOrderOnAGV(new AGVOrderClass(order, Target1,Target2));
|
agvs[AGVindex].AddOrder(new AGVOrderClass(order, Target1,Target2));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OrderToAGV(AGV AGV, AGVTaskType order)
|
public void OrderToAGV(AGV AGV, AGVTaskType order)
|
||||||
{
|
{
|
||||||
AGV.QueueOrderOnAGV(new AGVOrderClass(order));
|
AGV.AddOrder(new AGVOrderClass(order));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WriteLog(AGV agv, AGVTaskType task, string target,bool success)
|
void WriteLog(AGV agv, AGVTaskType task, string target,bool success)
|
||||||
@@ -107,7 +114,7 @@ namespace XED.VirtualFactory
|
|||||||
{
|
{
|
||||||
OrderToAGV(agv, AGVTaskType.Charging);
|
OrderToAGV(agv, AGVTaskType.Charging);
|
||||||
}
|
}
|
||||||
if (OrderList[i].nodeClass.type == AGVNodeType.Load')
|
if (OrderList[i].nodeClass.type == AGVNodeType.Load)
|
||||||
{
|
{
|
||||||
OrderToAGV(agv, AGVTaskType.LoadCargo, OrderList[i].loadSocket, OrderList[i]);
|
OrderToAGV(agv, AGVTaskType.LoadCargo, OrderList[i].loadSocket, OrderList[i]);
|
||||||
//OrderToAGV(agv, AGVTaskType.LiftUpDown, OrderList[i].loadSocket.transform.position + new Vector3(0, 0.2f, 0));
|
//OrderToAGV(agv, AGVTaskType.LiftUpDown, OrderList[i].loadSocket.transform.position + new Vector3(0, 0.2f, 0));
|
||||||
@@ -134,7 +141,7 @@ namespace XED.VirtualFactory
|
|||||||
{
|
{
|
||||||
OrderToAGV(agv, AGVTaskType.Charging);
|
OrderToAGV(agv, AGVTaskType.Charging);
|
||||||
}
|
}
|
||||||
if (OrderList[i].nodeClass.type == AGVNodeType.Load')
|
if (OrderList[i].nodeClass.type == AGVNodeType.Load)
|
||||||
{
|
{
|
||||||
OrderToAGV(agv, AGVTaskType.LoadCargo, OrderList[i].loadSocket, OrderList[i]);
|
OrderToAGV(agv, AGVTaskType.LoadCargo, OrderList[i].loadSocket, OrderList[i]);
|
||||||
//OrderToAGV(agv, AGVTaskType.LiftUpDown, OrderList[i].loadSocket.transform.position+new Vector3(0,0.2f,0));
|
//OrderToAGV(agv, AGVTaskType.LiftUpDown, OrderList[i].loadSocket.transform.position+new Vector3(0,0.2f,0));
|
||||||
@@ -157,5 +164,21 @@ namespace XED.VirtualFactory
|
|||||||
agv.onOrderCompleted -= OrderReplay;
|
agv.onOrderCompleted -= OrderReplay;
|
||||||
orderDict.Remove(agv);
|
orderDict.Remove(agv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal AGV GetIdleAGV()
|
||||||
|
{
|
||||||
|
|
||||||
|
foreach (var a in agvs)
|
||||||
|
{
|
||||||
|
if (a.agvState == AGVState.Idle)
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
var result = SpawnEmptyAGV();
|
||||||
|
var newEntity = new AGVEntity();
|
||||||
|
newEntity.id= agvs.Count.ToString();
|
||||||
|
result.Binding(newEntity);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@@ -9,6 +10,7 @@ namespace XED.VirtualFactory
|
|||||||
public AGVNodeEntity entity;
|
public AGVNodeEntity entity;
|
||||||
public List<AGVNode> linkedNodes = new();
|
public List<AGVNode> linkedNodes = new();
|
||||||
public AGVNodeType nodeType;
|
public AGVNodeType nodeType;
|
||||||
|
public bool reserved;
|
||||||
|
|
||||||
#region legacy
|
#region legacy
|
||||||
public AGVNodeClass nodeClass;
|
public AGVNodeClass nodeClass;
|
||||||
@@ -16,9 +18,7 @@ namespace XED.VirtualFactory
|
|||||||
List<Renderer> meshRendererList = new List<Renderer>();
|
List<Renderer> meshRendererList = new List<Renderer>();
|
||||||
public GameObject loadSocket;
|
public GameObject loadSocket;
|
||||||
public GameObject unLoadSocket;
|
public GameObject unLoadSocket;
|
||||||
[SerializeField]
|
public Load cargo;
|
||||||
GameObject cargoPrefab;
|
|
||||||
public GameObject cargo;
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public void Initialize(AGVNodeClass data)
|
public void Initialize(AGVNodeClass data)
|
||||||
@@ -72,37 +72,22 @@ namespace XED.VirtualFactory
|
|||||||
{
|
{
|
||||||
chargezone.enabled = true;
|
chargezone.enabled = true;
|
||||||
}
|
}
|
||||||
if (type == AGVNodeType.Load')
|
|
||||||
{
|
|
||||||
cargo = Instantiate(cargoPrefab, loadSocket.transform);
|
|
||||||
cargo.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadCargo()
|
public void LoadCargo()
|
||||||
{
|
{
|
||||||
cargo = null;
|
cargo = null;
|
||||||
StartCoroutine(GenerateCargo());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UnLoadCargo(GameObject cargo)
|
public void UnLoadCargo(Load cargo)
|
||||||
{
|
{
|
||||||
this.cargo = cargo;
|
this.cargo = cargo;
|
||||||
StartCoroutine(DestroyCargo());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
IEnumerator GenerateCargo()
|
internal void Load(Load cargo)
|
||||||
{
|
{
|
||||||
yield return new WaitForSeconds(50f);
|
this.cargo = cargo;
|
||||||
cargo = Instantiate(cargoPrefab, loadSocket.transform);
|
cargo.transform.position = loadSocket.transform.position;
|
||||||
cargo.transform.SetParent(loadSocket.transform);
|
|
||||||
cargo.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity);
|
|
||||||
}
|
|
||||||
|
|
||||||
IEnumerator DestroyCargo()
|
|
||||||
{
|
|
||||||
yield return new WaitForSeconds(70f);
|
|
||||||
Destroy(cargo);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace XED.VirtualFactory
|
|||||||
public enum AGVNodeType
|
public enum AGVNodeType
|
||||||
{
|
{
|
||||||
normal,
|
normal,
|
||||||
Load',
|
Load,
|
||||||
unLoad,
|
unLoad,
|
||||||
charge
|
charge
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ namespace XED.VirtualFactory
|
|||||||
public Component targetcomp = new Component();
|
public Component targetcomp = new Component();
|
||||||
public GameObject targetObject;
|
public GameObject targetObject;
|
||||||
public Quaternion targetQuaternion;
|
public Quaternion targetQuaternion;
|
||||||
List<object> targetList = new List<object>();
|
|
||||||
|
|
||||||
public AGVOrderClass(AGVTaskType task)
|
public AGVOrderClass(AGVTaskType task)
|
||||||
{
|
{
|
||||||
@@ -29,13 +28,6 @@ namespace XED.VirtualFactory
|
|||||||
targetCase = TargetCase.None;
|
targetCase = TargetCase.None;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AGVOrderClass(AGVTaskType task, Quaternion targetQuaternion)
|
|
||||||
{
|
|
||||||
agvTaskType = task;
|
|
||||||
this.targetQuaternion = targetQuaternion;
|
|
||||||
targetCase = TargetCase.One;
|
|
||||||
}
|
|
||||||
|
|
||||||
public AGVOrderClass(AGVTaskType task,GameObject targetObject)
|
public AGVOrderClass(AGVTaskType task,GameObject targetObject)
|
||||||
{
|
{
|
||||||
agvTaskType = task;
|
agvTaskType = task;
|
||||||
@@ -67,35 +59,5 @@ namespace XED.VirtualFactory
|
|||||||
targetCase = TargetCase.Two;
|
targetCase = TargetCase.Two;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AGVOrderClass(AGVTaskType task, GameObject targetObject, Vector3 target2Vector)
|
|
||||||
{
|
|
||||||
agvTaskType = task;
|
|
||||||
target = targetObject.transform.position;
|
|
||||||
target2 = target2Vector;
|
|
||||||
targetCase = TargetCase.Two;
|
|
||||||
}
|
|
||||||
|
|
||||||
public AGVOrderClass(AGVTaskType task, Vector3 targetVector, GameObject target2Object)
|
|
||||||
{
|
|
||||||
agvTaskType = task;
|
|
||||||
target = targetVector;
|
|
||||||
target2 = target2Object.transform.position;
|
|
||||||
targetCase = TargetCase.Two;
|
|
||||||
}
|
|
||||||
|
|
||||||
public AGVOrderClass(AGVTaskType task, Vector3 targetVector, Vector3 target2Vector)
|
|
||||||
{
|
|
||||||
agvTaskType = task;
|
|
||||||
target = targetVector;
|
|
||||||
target2 = target2Vector;
|
|
||||||
targetCase = TargetCase.Two;
|
|
||||||
}
|
|
||||||
|
|
||||||
public AGVOrderClass(AGVTaskType task,List<object> testList)
|
|
||||||
{
|
|
||||||
agvTaskType = task;
|
|
||||||
targetList = testList;
|
|
||||||
targetCase = TargetCase.List;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using XED.Attributes;
|
using XED.Attributes;
|
||||||
|
using XED.VirtualFactory;
|
||||||
|
|
||||||
namespace XED
|
namespace XED
|
||||||
{
|
{
|
||||||
public class TwinObject : MonoBehaviour
|
public class TwinObject : MonoBehaviour
|
||||||
{
|
{
|
||||||
|
public IEntity entity;
|
||||||
|
|
||||||
#region lagacy
|
#region lagacy
|
||||||
public TwinPhysics physics = new TwinPhysics();
|
public TwinPhysics physics = new TwinPhysics();
|
||||||
public TwinMetaData metaData = new TwinMetaData();
|
public TwinMetaData metaData = new TwinMetaData();
|
||||||
@@ -22,6 +25,11 @@ namespace XED
|
|||||||
physics.Init(this);
|
physics.Init(this);
|
||||||
metaData.Init(this);
|
metaData.Init(this);
|
||||||
}
|
}
|
||||||
|
public void Binding(IEntity entity)
|
||||||
|
{
|
||||||
|
this.entity = entity;
|
||||||
|
FindSingle<LocationMapper>().Regist(this);
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void SetDisplayable(bool value)
|
public virtual void SetDisplayable(bool value)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,12 +10,13 @@ namespace XED
|
|||||||
public AGVManager agvManager;
|
public AGVManager agvManager;
|
||||||
public AGVMap agvMap;
|
public AGVMap agvMap;
|
||||||
public List<Load> loads = new();
|
public List<Load> loads = new();
|
||||||
|
public Load prf_Load;
|
||||||
public override void AfterAwake()
|
public override void AfterAwake()
|
||||||
{
|
{
|
||||||
agvMap = FindSingle<AGVMap>();
|
agvMap = FindSingle<AGVMap>();
|
||||||
agvManager = FindSingle<AGVManager>();
|
agvManager = FindSingle<AGVManager>();
|
||||||
stackerCranes = FindObjectsByType<StackerCrane>(UnityEngine.FindObjectsSortMode.None).ToList();
|
stackerCranes = FindObjectsByType<StackerCrane>(UnityEngine.FindObjectsSortMode.None).ToList();
|
||||||
|
FactoryStatusCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FactoryStatusCheck()
|
void FactoryStatusCheck()
|
||||||
@@ -24,8 +25,25 @@ namespace XED
|
|||||||
{
|
{
|
||||||
if(agvMap.GetEmptyNode(AGVNodeType.Load, out var node))
|
if(agvMap.GetEmptyNode(AGVNodeType.Load, out var node))
|
||||||
{
|
{
|
||||||
|
var worker = agvManager.GetIdleAGV();
|
||||||
|
node.Load(CreateEmptyLoad());
|
||||||
|
worker.transform.position = node.transform.position;
|
||||||
|
worker.AddOrder(new AGVOrderClass(AGVTaskType.MoveToTarget, node.gameObject));
|
||||||
|
worker.AddOrder(new AGVOrderClass(AGVTaskType.LoadCargo, node.loadSocket, node));
|
||||||
|
worker.AddOrder(new AGVOrderClass(AGVTaskType.SpinToTarget, node.linkedNodes[0].gameObject));
|
||||||
|
worker.AddOrder(new AGVOrderClass(AGVTaskType.MoveToTarget, node.linkedNodes[0].gameObject));
|
||||||
|
//worker.AddOrder(new AGVOrderClass(AGVTaskType.MoveToTarget, node.linkedNodes[0].gameObject));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Load CreateEmptyLoad()
|
||||||
|
{
|
||||||
|
var load = Instantiate(prf_Load);
|
||||||
|
loads.Add(load);
|
||||||
|
load.entity = new LoadEntity();
|
||||||
|
load.entity.id = loads.Count.ToString();
|
||||||
|
return load;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
### 0.22.14 03-20
|
### 0.22.16 03-20
|
||||||
```
|
```
|
||||||
1. StackerCrane 복구 및 테스트 키트 프리팹 추가
|
1. StackerCrane 복구 및 테스트 키트 프리팹 추가
|
||||||
2. TwinObject 내 불필요 이벤트 코드 삭제
|
2. TwinObject 내 불필요 이벤트 코드 삭제
|
||||||
3. 가상 공장 데이터 생성을 위한 기본 환경 구성
|
3. 가상 공장 데이터 생성을 위한 기본 환경 구성
|
||||||
|
4. 가상 공장 운영 담당 VirtualFactoryManager 추가
|
||||||
|
5. 가상 공장내의 Load가 0 일 경우 VirtualFactoryManager를 통해 빈 Load Node 에 AGV 생성 하는 기능 추가
|
||||||
```
|
```
|
||||||
|
|
||||||
### 0.22.11 03-19
|
### 0.22.11 03-19
|
||||||
|
|||||||
Reference in New Issue
Block a user