Skip to content

Commit 961c22f

Browse files
committed
Implemented altimeter sensor.
1 parent a96d6cf commit 961c22f

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using System.Threading.Tasks;
5+
using UnityEngine;
6+
using ZO.Util;
7+
8+
namespace ZO.Sensors {
9+
10+
11+
/// <summary>
12+
/// Altimeter sensor.
13+
///
14+
/// Notes: Based from Hector Quadrotor. See: https://github.com/udacity/RoboND-QuadRotor-Unity-Simulator/blob/1e71321d95e416bafa5296a229f36404bddc0452/Assets/Scripts/ROS/Hector_Quadrotor/hector_uav_msgs/Altimeter.cs
15+
/// </summary>
16+
public class ZOAltimeter : ZOGameObjectBase {
17+
18+
19+
public const float STANDARD_PRESSURE = 1013.25f;
20+
21+
public float _QNH = STANDARD_PRESSURE;
22+
23+
public float QNH {
24+
get => _QNH;
25+
}
26+
27+
public float _startAltitude = 0.0f;
28+
public float StartAltitude {
29+
get => _startAltitude;
30+
}
31+
32+
[Header("Noise Model")]
33+
public ZO.Math.ZOGaussianNoiseModel _noiseModel = new Math.ZOGaussianNoiseModel {
34+
Mean = 0.0,
35+
StdDev = 2e-4,
36+
BiasMean = 75e-6,
37+
BiasStdDev = 8e-08
38+
};
39+
40+
/// <summary>
41+
/// Called every frame.
42+
/// Parameters: ZOAltimeter:this, altitude, pressure, qnh
43+
/// </summary>
44+
/// <value></value>
45+
public Func<ZOAltimeter, float, float, float, Task> OnPublishDelegate { get; set; }
46+
47+
public float AltitudeMeters {
48+
get; set;
49+
}
50+
51+
public static float AltitudeFromPressure(float pressure, float qnh = ZOAltimeter.STANDARD_PRESSURE) {
52+
return (float)(288.15 / 0.0065 * (1.0 - System.Math.Pow(pressure / qnh, 1.0 / 5.255)));
53+
}
54+
55+
public static float PressureFromAltitude(float altitude, float qnh = ZOAltimeter.STANDARD_PRESSURE) {
56+
return (float)(qnh * System.Math.Pow(1.0 - (0.0065 * altitude) / 288.15, 5.255));
57+
}
58+
59+
protected override void ZOStart() {
60+
base.ZOStart();
61+
AltitudeMeters = 0.0f;
62+
}
63+
64+
protected async override void ZOFixedUpdateHzSynchronized() {
65+
base.ZOFixedUpdateHzSynchronized();
66+
67+
float altitude = StartAltitude + transform.position.y;
68+
AltitudeMeters = _noiseModel.Apply(altitude);
69+
70+
if (OnPublishDelegate != null) {
71+
await OnPublishDelegate(this, AltitudeMeters, PressureFromAltitude(AltitudeMeters), QNH);
72+
}
73+
}
74+
75+
}
76+
}

Runtime/Scripts/Sensors/Altimeter/ZOAltimeter.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)