-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathgnss_calibration.py
53 lines (40 loc) · 1.47 KB
/
gnss_calibration.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import pandas as pd
import numpy as np
from data_utils import *
from config_parsers import update_sensor_config
from coordinate_utils import WGS84
NOISE_FILE = "Data/RAW_GNSS_Log/test_20201104T152440_gnss.txt"
SAVE_FILE = "Configs/sensor_config_20201029T1909.xml"
GNSS_ID = 4
def compute_covariance(noise_data):
"""
Compute GNSS covariance matrix diag([vel, pos])
"""
acc = noise_data['accuracy'].to_numpy()
acc_avg = np.mean(acc)
geodetic_acc = (acc_avg ** 2) / WGS84['a'] # rad^2
covariance = np.diag([acc_avg, acc_avg, acc_avg, geodetic_acc, geodetic_acc, acc_avg])
return covariance
def gnss_calibration(visualize=True):
"""
Perform gnss calibration using the accuracy data supplied with fixes.
"""
print("\nRunning GNSS Calibration")
calibration_dict = {}
# Load and visualize noise data
noise_data = extract_gnss_sensor_data(NOISE_FILE, zero_times=False, time_in_seconds=True)
noise_data = pd.DataFrame.from_dict(noise_data)
if visualize: visualize_3axis_timeseries(noise_data, GNSS_ID)
# Noise
covariance = compute_covariance(noise_data)
calibration_dict["covariance"] = covariance
print(f"covariance {covariance}")
# Saving
save_params = input("Save calibration params?: ")
if save_params.lower() in ("y", "yes"):
update_sensor_config(SAVE_FILE, GNSS_ID, calibration_dict)
print("Params saved")
def main():
gnss_calibration()
if __name__ == "__main__":
main()