-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtelemetry_csv.py
70 lines (53 loc) · 1.82 KB
/
telemetry_csv.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
"""Provides basic ability to log telemetry data to csv file"""
import csv
import time
import krpc
from glom import glom
CSV_SPEC = {
"met": "vessel.met",
"surf_speed": "flight.speed",
"mean_altitude": "flight.mean_altitude",
"g_force": "flight.g_force",
"aoa": "flight.angle_of_attack",
"sideslip": "flight.sideslip_angle",
"atmosphere_density": "flight.atmosphere_density",
"dynamic_pressure": "flight.dynamic_pressure",
}
INTERVAL = 1
class Telemetry:
"""Provides interface for basic telemetry"""
def __init__(self, vessel):
self.vessel = vessel
self.flight = vessel.flight(self._reference_frame)
@property
def orbit(self):
return self.vessel.orbit
@property
def _reference_frame(self):
return self.vessel.orbit.body.reference_frame
if __name__ == "__main__":
try:
print("Connecting to KSP. Please accept the connection from kRPC window in KSP")
conn = krpc.connect(name=__file__)
except krpc.error.NetworkError as e:
print("Failed to connect to kRPC server. Is KSP and the kRPC Server running?")
raise e
telemetry = Telemetry(conn.space_center.active_vessel)
data_endpoints = {
"space_center": conn.space_center,
"vessel": telemetry.vessel,
"flight": telemetry.flight,
"orbit": telemetry.orbit,
}
filename = "telemetry/{}_{}.csv".format(
data_endpoints["space_center"].ut, data_endpoints["vessel"].name
)
with open(filename, "w", newline="") as csvfile:
fieldnames = list(CSV_SPEC.keys())
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
while True:
row = glom(data_endpoints, CSV_SPEC)
writer.writerow(row)
print(row)
time.sleep(INTERVAL)