diff --git a/Assets/Modules/GameDev.UDP b/Assets/Modules/GameDev.UDP index 421750f..533ddb4 160000 --- a/Assets/Modules/GameDev.UDP +++ b/Assets/Modules/GameDev.UDP @@ -1 +1 @@ -Subproject commit 421750f1209e8c91aa594c1126a306e127c5a7a2 +Subproject commit 533ddb404ffa5582e5ac9c395861806e2042e981 diff --git a/Assets/Scenes/UI.unity b/Assets/Scenes/UI.unity index c918f38..0a0f0ee 100644 --- a/Assets/Scenes/UI.unity +++ b/Assets/Scenes/UI.unity @@ -584,6 +584,7 @@ GameObject: m_Component: - component: {fileID: 744781436} - component: {fileID: 744781435} + - component: {fileID: 744781437} m_Layer: 5 m_Name: UDPManager m_TagString: Untagged @@ -603,8 +604,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0053eace8ae9ca34680b4223e559ebc6, type: 3} m_Name: m_EditorClassIdentifier: - _port: 8888 - listen: 1 + _port: 1234 + _ipAddress: 239.1.2.3 + _watchdog: 0 + k__BackingField: --- !u!4 &744781436 Transform: m_ObjectHideFlags: 0 @@ -620,6 +623,20 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &744781437 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 744781434} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65ec321cdebe52d449c641ae006932b9, type: 3} + m_Name: + m_EditorClassIdentifier: + _udpManager: {fileID: 744781435} + k__BackingField: --- !u!1 &752811092 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/ReceiveData.cs b/Assets/Scripts/ReceiveData.cs new file mode 100644 index 0000000..3775ed9 --- /dev/null +++ b/Assets/Scripts/ReceiveData.cs @@ -0,0 +1,97 @@ +using System; +using GameDev.UDP; +using UnityEngine; + +[RequireComponent(typeof(UDPManager))] +public class ReceiveData : MonoBehaviour +{ + [Header("Connections")] + [SerializeField] private UDPManager _udpManager; + + [Header("State")] + [SerializeField] private float _updateRate; + [SerializeField] private ulong _packages; + [field: SerializeField] public byte[] ReceivedData { get; set; } + + [field: Header("ReceivedData")] + [field: SerializeField] private byte Watchdog { get; set; } + [field: SerializeField] private byte States { get; set; } + [field: SerializeField] private int M1SpeedCmd { get; set; } + [field: SerializeField] private int M2SpeedCmd { get; set; } + [field: SerializeField] private float AccelerometerPitch { get; set; } + [field: SerializeField] private float FilteredPitch { get; set; } + [field: SerializeField] private float PitchRate { get; set; } + [field: SerializeField] private float RemSpeedRef { get; set; } + [field: SerializeField] private float RemTurnSpeedRef { get; set; } + [field: SerializeField] private float ScContOut { get; set; } + [field: SerializeField] private float TcContOut { get; set; } + [field: SerializeField] private float OlContOut { get; set; } + [field: SerializeField] private float RefIL { get; set; } + [field: SerializeField] private float ActIL { get; set; } + [field: SerializeField] private float ErrorIL { get; set; } + [field: SerializeField] private float ILContOut { get; set; } + [field: SerializeField] private float IErrorIL { get; set; } + [field: SerializeField] private float ILAntiWindup { get; set; } + [field: SerializeField] private float SpeedCmd1 { get; set; } + [field: SerializeField] private float SpeedCmd2 { get; set; } + private int _newPackages; + private float _sampleTime; + + private void OnEnable() + { + _sampleTime = 1; + _udpManager.ReceivedNewUdpData += ProcessData; + } + + private void OnDisable() + { + _udpManager.ReceivedNewUdpData -= ProcessData; + } + + private void ProcessData() + { + _packages++; + _newPackages++; + ReceivedData = _udpManager.Data; + var i = 0; + Watchdog = ReceivedData[i]; + States = ReceivedData[i += 1]; + M1SpeedCmd = BitConverter.ToInt16(ReceivedData, i += 1); + M2SpeedCmd = BitConverter.ToInt16(ReceivedData, i += 2); + AccelerometerPitch = BitConverter.ToSingle(ReceivedData, i += 2); + FilteredPitch = BitConverter.ToSingle(ReceivedData, i += 4); + PitchRate = BitConverter.ToSingle(ReceivedData, i += 4); + RemSpeedRef = BitConverter.ToSingle(ReceivedData, i += 4); + RemTurnSpeedRef = BitConverter.ToSingle(ReceivedData, i += 4); + ScContOut = BitConverter.ToSingle(ReceivedData, i += 4); + TcContOut = BitConverter.ToSingle(ReceivedData, i += 4); + OlContOut = BitConverter.ToSingle(ReceivedData, i += 4); + RefIL = BitConverter.ToSingle(ReceivedData, i += 4); + ActIL = BitConverter.ToSingle(ReceivedData, i += 4); + ErrorIL = BitConverter.ToSingle(ReceivedData, i += 4); + ILContOut = BitConverter.ToSingle(ReceivedData, i += 4); + IErrorIL = BitConverter.ToSingle(ReceivedData, i += 4); + ILAntiWindup = BitConverter.ToSingle(ReceivedData, i += 4); + SpeedCmd1 = BitConverter.ToSingle(ReceivedData, i += 4); + SpeedCmd2 = BitConverter.ToSingle(ReceivedData, i += 4); + } + + private void FixedUpdate() + { + CalculateReceiveRate(); + } + + private void CalculateReceiveRate() + { + if (_sampleTime < 0) + { + _updateRate = _newPackages; + _newPackages = 0; + _sampleTime = 1; + } + else + { + _sampleTime -= Time.fixedDeltaTime; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/ReceiveData.cs.meta b/Assets/Scripts/ReceiveData.cs.meta new file mode 100644 index 0000000..4901179 --- /dev/null +++ b/Assets/Scripts/ReceiveData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65ec321cdebe52d449c641ae006932b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: