117 lines
5.2 KiB
C#
117 lines
5.2 KiB
C#
using System;
|
|
using GameDev.UDP;
|
|
using ScriptableObjectArchitecture;
|
|
using UnityEngine;
|
|
using UnityEngine.Serialization;
|
|
|
|
[RequireComponent(typeof(UDPManager))]
|
|
public class ReceiveData : MonoBehaviour
|
|
{
|
|
[Header("Connections")]
|
|
[SerializeField] private UDPManager _udpManager;
|
|
|
|
[Header("Config")]
|
|
[SerializeField] private float _sampleTimeSetting;
|
|
|
|
[Header("State")]
|
|
[SerializeField] private float _updateRateHz;
|
|
[SerializeField] private ulong _packagesReceived;
|
|
private byte[] ReceivedData { get; set; }
|
|
|
|
private int _newPackages;
|
|
private float _sampleTime;
|
|
|
|
[field: Header("ReceivedData")]
|
|
[field: SerializeField] private ByteReference Watchdog { get; set; }
|
|
[field: SerializeField] private ByteReference States { get; set; }
|
|
[field: SerializeField] private IntReference M1SpeedCmd { get; set; }
|
|
[field: SerializeField] private IntReference M2SpeedCmd { get; set; }
|
|
[field: SerializeField] private FloatReference AccelerometerPitch { get; set; }
|
|
[field: SerializeField] private FloatReference FilteredPitch { get; set; }
|
|
[field: SerializeField] private FloatReference PitchRate { get; set; }
|
|
[field: SerializeField] private FloatReference RemSpeedRef { get; set; }
|
|
[field: SerializeField] private FloatReference RemTurnSpeedRef { get; set; }
|
|
[field: SerializeField] private FloatReference ScContOut { get; set; }
|
|
[field: SerializeField] private FloatReference TcContOut { get; set; }
|
|
[field: SerializeField] private FloatReference OlContOut { get; set; }
|
|
[field: SerializeField] private FloatReference RefIL { get; set; }
|
|
[field: SerializeField] private FloatReference ActIL { get; set; }
|
|
[field: SerializeField] private FloatReference ErrorIL { get; set; }
|
|
[field: SerializeField] private FloatReference ILContOut { get; set; }
|
|
[field: SerializeField] private FloatReference IerrorIL { get; set; }
|
|
[field: SerializeField] private FloatReference ILAntiWindup { get; set; }
|
|
[field: SerializeField] private FloatReference SpeedCmd1 { get; set; }
|
|
[field: SerializeField] private FloatReference SpeedCmd2 { get; set; }
|
|
[field: SerializeField] private FloatReference BotLinVel { get; set; }
|
|
[field: SerializeField] private FloatReference BotAngVel { get; set; }
|
|
[field: SerializeField] private FloatReference LeftMotorAngVel { get; set; }
|
|
[field: SerializeField] private FloatReference RightMotorAngVel { get; set; }
|
|
[field: SerializeField] private IntReference M1Raw { get; set; }
|
|
[field: SerializeField] private IntReference M2Raw { get; set; }
|
|
[field: SerializeField] private IntReference Millis { get; set; }
|
|
|
|
private void OnEnable()
|
|
{
|
|
_sampleTime = _sampleTimeSetting;
|
|
_udpManager.ReceivedNewUdpData += ProcessData;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
_udpManager.ReceivedNewUdpData -= ProcessData;
|
|
}
|
|
|
|
private void ProcessData()
|
|
{
|
|
_packagesReceived++;
|
|
_newPackages++;
|
|
ReceivedData = _udpManager.Data;
|
|
var i = 0;
|
|
Watchdog.Value = ReceivedData[i];
|
|
States.Value = ReceivedData[i += 1];
|
|
M1SpeedCmd.Value = BitConverter.ToInt16(ReceivedData, i += 1);
|
|
M2SpeedCmd.Value = BitConverter.ToInt16(ReceivedData, i += 2);
|
|
AccelerometerPitch.Value = BitConverter.ToSingle(ReceivedData, i += 2);
|
|
FilteredPitch.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
PitchRate.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
RemSpeedRef.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
RemTurnSpeedRef.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
ScContOut.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
TcContOut.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
OlContOut.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
RefIL.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
ActIL.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
ErrorIL.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
ILContOut.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
IerrorIL.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
ILAntiWindup.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
SpeedCmd1.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
SpeedCmd2.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
BotLinVel.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
BotAngVel.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
LeftMotorAngVel.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
RightMotorAngVel.Value = BitConverter.ToSingle(ReceivedData, i += 4);
|
|
M1Raw.Value = BitConverter.ToInt32(ReceivedData, i += 4);
|
|
M2Raw.Value = BitConverter.ToInt32(ReceivedData, i += 4);
|
|
Millis.Value = BitConverter.ToInt32(ReceivedData, i += 4);
|
|
}
|
|
|
|
private void FixedUpdate()
|
|
{
|
|
CalculateReceiveRate();
|
|
}
|
|
|
|
private void CalculateReceiveRate()
|
|
{
|
|
if (_sampleTime < 0)
|
|
{
|
|
_updateRateHz = _newPackages;
|
|
_newPackages = 0;
|
|
_sampleTime = _sampleTimeSetting;
|
|
}
|
|
else
|
|
{
|
|
_sampleTime -= Time.fixedDeltaTime;
|
|
}
|
|
}
|
|
} |