Added truth to API

This commit is contained in:
30hours 2024-03-07 04:35:06 +00:00
parent bb6ef6166d
commit 363d08c9d1
2 changed files with 80 additions and 0 deletions

View file

@ -0,0 +1,67 @@
"""
@file AdsbTruth.py
@author 30hours
"""
import requests
import math
class AdsbTruth:
"""
@class AdsbTruth
@brief A class for storing ADS-B truth in the API response.
@details Uses truth data in delay-Doppler space from an tar1090 server.
"""
def __init__(self, seen_pos_limit):
"""
@brief Constructor for the AdsbTruth class.
"""
self.seen_pos_limit = seen_pos_limit
def process(self, server):
"""
@brief Store ADS-B truth for each target in LLA.
@param server (str): The tar1090 server to get truth from.
@return dict: Associated detections by [hex].
"""
output = {}
# get tar1090 URL
url = 'https://' + server + '/data/aircraft.json'
# get ADSB detections
try:
response = requests.get(url, timeout=1)
response.raise_for_status()
data = response.json()
adsb = data
except requests.exceptions.RequestException as e:
print(f"Error fetching data from {url}: {e}")
adsb = None
# store relevant data
if adsb:
# loop over aircraft
for aircraft in adsb["aircraft"]:
if aircraft.get("seen_pos") and \
aircraft.get("alt_geom") and \
aircraft.get("flight") and \
aircraft.get("seen_pos") < self.seen_pos_limit:
output[aircraft["hex"]] = {}
output[aircraft["hex"]]["lat"] = aircraft["lat"]
output[aircraft["hex"]]["lon"] = aircraft["lon"]
output[aircraft["hex"]]["alt"] = aircraft["alt_geom"]
output[aircraft["hex"]]["flight"] = aircraft["flight"]
output[aircraft["hex"]]["timestamp"] = \
adsb["now"] - aircraft["seen_pos"]
return output

View file

@ -17,6 +17,7 @@ from algorithm.associator.AdsbAssociator import AdsbAssociator
from algorithm.localisation.EllipseParametric import EllipseParametric
from algorithm.localisation.EllipsoidParametric import EllipsoidParametric
from algorithm.localisation.SphericalIntersection import SphericalIntersection
from algorithm.truth.AdsbTruth import AdsbTruth
from common.Message import Message
from data.Ellipsoid import Ellipsoid
@ -31,6 +32,7 @@ adsbAssociator = AdsbAssociator()
ellipseParametric = EllipseParametric()
ellipsoidParametric = EllipsoidParametric()
sphericalIntersection = SphericalIntersection()
adsbTruth = AdsbTruth(5)
async def event():
@ -81,6 +83,16 @@ async def event():
"config": radar_config[i]
}
# store truth in dict
truth_adsb = {}
adsb_urls = []
for item in api_event:
adsb_urls.append(item["adsb"])
adsb_urls = list(set(adsb_urls))
for url in adsb_urls:
truth_adsb[url] = adsbTruth.process(url)
print(truth_adsb, flush=True)
# main processing
for item in api_event:
@ -157,6 +169,7 @@ async def event():
# output data to API
item["timestamp_event"] = timestamp
item["truth"] = truth_adsb[item["adsb"]]
item["detections_associated"] = associated_dets
item["detections_localised"] = localised_dets
item["ellipsoids"] = ellipsoids