flightdata 0.2.5__tar.gz → 0.2.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- flightdata-0.2.6/PKG-INFO +30 -0
- flightdata-0.2.6/README.md +15 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/base/collection.py +7 -4
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/base/table.py +9 -8
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/flight/flight.py +1 -2
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/origin.py +17 -18
- flightdata-0.2.6/flightdata.egg-info/PKG-INFO +30 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata.egg-info/SOURCES.txt +2 -0
- flightdata-0.2.6/flightdata.egg-info/requires.txt +5 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata.egg-info/top_level.txt +1 -0
- flightdata-0.2.6/scripts/collect_logs.py +28 -0
- flightdata-0.2.6/scripts/flightline.py +55 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/setup.cfg +10 -2
- flightdata-0.2.5/PKG-INFO +0 -171
- flightdata-0.2.5/README.md +0 -158
- flightdata-0.2.5/flightdata.egg-info/PKG-INFO +0 -171
- flightdata-0.2.5/flightdata.egg-info/requires.txt +0 -3
- {flightdata-0.2.5 → flightdata-0.2.6}/LICENSE +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/__init__.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/base/__init__.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/base/constructs.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/base/numpy_encoder.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/coefficients.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/environment/__init__.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/environment/environment.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/environment/wind.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/flight/__init__.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/flight/ardupilot.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/flight/fields.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/flow.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/model/__init__.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/model/aerodynamic.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/model/thrust.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata/state.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/flightdata.egg-info/dependency_links.txt +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/setup.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/test/test_fields.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/test/test_flight.py +0 -0
- {flightdata-0.2.5 → flightdata-0.2.6}/test/test_origin.py +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: flightdata
|
|
3
|
+
Version: 0.2.6
|
|
4
|
+
Summary: Module for handling UAV flight log data
|
|
5
|
+
Home-page: https://github.com/PyFlightCoach/FlightData
|
|
6
|
+
Author: Thomas David
|
|
7
|
+
Author-email: thomasdavid0@gmail.com
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: numpy
|
|
11
|
+
Requires-Dist: pandas
|
|
12
|
+
Requires-Dist: simplejson
|
|
13
|
+
Requires-Dist: pfc-geometry>=0.2.4
|
|
14
|
+
Requires-Dist: ardupilot-log-reader>=0.2.1
|
|
15
|
+
|
|
16
|
+
## FlightData
|
|
17
|
+
This repo is contains a set of datastructures and tools for handling flight log data.
|
|
18
|
+
|
|
19
|
+
### Flight
|
|
20
|
+
The Flight object represents the data logged by a flight controller. The class wraps a pandas dataframe which is indexed on a single time axis. Where data is logged at different rates for different sensors it is mapped to the closest time index. Attribute access provides individual columns or sets of columns in the groups defined in Fields. Item access subsets the data in the time axis.
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Table
|
|
24
|
+
The Table is the base type for most of the datastructures. It allows attribute access to individual columns. Attribute access is also available to return basic entities subclassed from the base type in the pfc-geometry package. For example in the state object table.x provides the x position, table.pos provides a Point representing the xyz position. columns that are not represented by geometric base types are considered to be labels for the data.
|
|
25
|
+
|
|
26
|
+
### State
|
|
27
|
+
The State object is a table representing the position and orientation of the aircraft along with their derivatives, it can be constructed from a Flight or from scratch by extrapolating in lines or around arcs. Many tools are provided to manipulate the data. The position and attitude are in a reference frame (with Z up), the derivatives move with the aircraft in either the body, wind, stability or track (like the wind axis but with no wind) frame.
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
Further documentation will be provided here: https://pfcdocumentation.readthedocs.io/pyflightcoach/flightdata.html
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
## FlightData
|
|
2
|
+
This repo is contains a set of datastructures and tools for handling flight log data.
|
|
3
|
+
|
|
4
|
+
### Flight
|
|
5
|
+
The Flight object represents the data logged by a flight controller. The class wraps a pandas dataframe which is indexed on a single time axis. Where data is logged at different rates for different sensors it is mapped to the closest time index. Attribute access provides individual columns or sets of columns in the groups defined in Fields. Item access subsets the data in the time axis.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Table
|
|
9
|
+
The Table is the base type for most of the datastructures. It allows attribute access to individual columns. Attribute access is also available to return basic entities subclassed from the base type in the pfc-geometry package. For example in the state object table.x provides the x position, table.pos provides a Point representing the xyz position. columns that are not represented by geometric base types are considered to be labels for the data.
|
|
10
|
+
|
|
11
|
+
### State
|
|
12
|
+
The State object is a table representing the position and orientation of the aircraft along with their derivatives, it can be constructed from a Flight or from scratch by extrapolating in lines or around arcs. Many tools are provided to manipulate the data. The position and attitude are in a reference frame (with Z up), the derivatives move with the aircraft in either the body, wind, stability or track (like the wind axis but with no wind) frame.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
Further documentation will be provided here: https://pfcdocumentation.readthedocs.io/pyflightcoach/flightdata.html
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
from typing import
|
|
2
|
-
import numpy as np
|
|
1
|
+
from typing import Union, Any, Self, TypeVar, Iterable
|
|
3
2
|
import pandas as pd
|
|
4
3
|
|
|
5
4
|
|
|
@@ -45,7 +44,7 @@ class Collection:
|
|
|
45
44
|
for v in self.data.values():
|
|
46
45
|
yield v
|
|
47
46
|
|
|
48
|
-
def to_list(self) ->
|
|
47
|
+
def to_list(self) -> list[T]:
|
|
49
48
|
return list(self.data.values())
|
|
50
49
|
|
|
51
50
|
def to_dicts(self, *args, **kwargs) -> list[dict[str, Any]]:
|
|
@@ -99,4 +98,8 @@ class Collection:
|
|
|
99
98
|
return str(pd.Series({k: repr(v) for k, v in self.data.items()}))
|
|
100
99
|
|
|
101
100
|
def __len__(self) -> int:
|
|
102
|
-
return len(self.data)
|
|
101
|
+
return len(self.data)
|
|
102
|
+
|
|
103
|
+
@property
|
|
104
|
+
def uids(self) -> list[str]:
|
|
105
|
+
return list(self.data.keys())
|
|
@@ -3,7 +3,7 @@ import numpy as np
|
|
|
3
3
|
import pandas as pd
|
|
4
4
|
import numpy.typing as npt
|
|
5
5
|
from geometry import Base, Time
|
|
6
|
-
from typing import
|
|
6
|
+
from typing import Self, Tuple
|
|
7
7
|
from .constructs import SVar, Constructs
|
|
8
8
|
from numbers import Number
|
|
9
9
|
from time import time
|
|
@@ -22,7 +22,7 @@ class Table:
|
|
|
22
22
|
if len(data) < min_len:
|
|
23
23
|
raise Exception(f"State constructor length check failed, data length = {len(data)}, min_len = {min_len}")
|
|
24
24
|
self.base_cols = [c for c in data.columns if c in self.constructs.cols()]
|
|
25
|
-
self.label_cols = [c for c in data.columns if not
|
|
25
|
+
self.label_cols = [c for c in data.columns if c not in self.constructs.cols()]
|
|
26
26
|
|
|
27
27
|
self.data = data
|
|
28
28
|
|
|
@@ -45,7 +45,7 @@ class Table:
|
|
|
45
45
|
raise ValueError("nan values in data")
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
def __getattr__(self, name: str) ->
|
|
48
|
+
def __getattr__(self, name: str) -> npt.NDArray | Base:
|
|
49
49
|
if name in self.data.columns:
|
|
50
50
|
return self.data[name].to_numpy()
|
|
51
51
|
elif name in self.constructs.data.keys():
|
|
@@ -73,7 +73,7 @@ class Table:
|
|
|
73
73
|
@property
|
|
74
74
|
def duration(self):
|
|
75
75
|
return self.data.index[-1] - self.data.index[0]
|
|
76
|
-
|
|
76
|
+
|
|
77
77
|
def __getitem__(self, sli):
|
|
78
78
|
if isinstance(sli, Number):
|
|
79
79
|
if sli<0:
|
|
@@ -200,9 +200,10 @@ class Table:
|
|
|
200
200
|
return 0
|
|
201
201
|
|
|
202
202
|
def unique_labels(self, cols = None) -> pd.DataFrame:
|
|
203
|
-
'''TODO Fix This'''
|
|
204
203
|
if cols is None:
|
|
205
204
|
cols = self.label_cols
|
|
205
|
+
elif isinstance(cols, str):
|
|
206
|
+
cols = [cols]
|
|
206
207
|
return self.data.loc[:, cols].reset_index(drop=True).drop_duplicates().reset_index(drop=True)
|
|
207
208
|
|
|
208
209
|
def shift_labels(self, col, elname, offset, allow_label_loss=True) -> Self:
|
|
@@ -254,7 +255,7 @@ class Table:
|
|
|
254
255
|
@classmethod
|
|
255
256
|
def shift_multi(Cls, steps: int, tb1: Self, tb2: Self, min_len=2) -> Tuple(Self, Self):
|
|
256
257
|
'''Take datapoints off the start of tb2 and add to the end tb1'''
|
|
257
|
-
if (steps>0 and len(tb2)-min_len<steps) or (steps<0 and len(tb1)
|
|
258
|
+
if (steps>0 and len(tb2)-min_len<steps) or (steps<0 and min_len - len(tb1) > steps):
|
|
258
259
|
raise ValueError(f'Cannot Squash a Table to less than {min_len} datapoints')
|
|
259
260
|
dfj = Cls.stack([tb1, tb2], overlap=0).data
|
|
260
261
|
return Cls(dfj.iloc[:len(tb1)+steps, :]), \
|
|
@@ -280,7 +281,7 @@ class Table:
|
|
|
280
281
|
res = res.shift_label_ratio(ratio, min_len, **lab)
|
|
281
282
|
return res
|
|
282
283
|
|
|
283
|
-
def get_label_id(self, **kwargs) ->
|
|
284
|
+
def get_label_id(self, **kwargs) -> int | float:
|
|
284
285
|
dfo = self.unique_labels()
|
|
285
286
|
for k, v in kwargs.items():
|
|
286
287
|
dfo = dfo.loc[dfo[k] == v, :]
|
|
@@ -317,7 +318,7 @@ class Table:
|
|
|
317
318
|
labs = np.array(self.single_labels())
|
|
318
319
|
return self.__class__(self.data[labs == lab])
|
|
319
320
|
|
|
320
|
-
def split_labels(self, cols=None) -> dict[str, Self]:
|
|
321
|
+
def split_labels(self, cols:list[str]|str = None) -> dict[str, Self]:
|
|
321
322
|
'''Split into multiple tables based on the labels'''
|
|
322
323
|
res = {}
|
|
323
324
|
for label in self.unique_labels(cols).iterrows():
|
|
@@ -91,25 +91,24 @@ class Origin(object):
|
|
|
91
91
|
np.arctan2(direction.y[0], direction.x[0])
|
|
92
92
|
)
|
|
93
93
|
|
|
94
|
-
def to_f3a_zone(self):
|
|
94
|
+
def to_f3a_zone(self, file: str):
|
|
95
95
|
|
|
96
96
|
centre = self.pilot_position.offset(
|
|
97
97
|
100 * g.Point(np.cos(self.heading), np.sin(self.heading), 0.0)
|
|
98
98
|
)
|
|
99
99
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
100
|
+
with open(file, 'w') as f:
|
|
101
|
+
for line in [
|
|
102
|
+
"Emailed box data for F3A Zone Pro - please DON'T modify!",
|
|
103
|
+
self.name,
|
|
104
|
+
self.pilot_position.lat[0],
|
|
105
|
+
self.pilot_position.long[0],
|
|
106
|
+
centre.lat[0],
|
|
107
|
+
centre.long[0],
|
|
108
|
+
self.pilot_position.alt[0]
|
|
109
|
+
]:
|
|
110
|
+
print(line, file=f)
|
|
111
|
+
|
|
113
112
|
@staticmethod
|
|
114
113
|
def from_f3a_zone(file_path: str):
|
|
115
114
|
if hasattr(file_path, "read"):
|
|
@@ -119,16 +118,16 @@ class Origin(object):
|
|
|
119
118
|
lines = f.read().splitlines()
|
|
120
119
|
return Origin.from_points(
|
|
121
120
|
lines[1],
|
|
122
|
-
g.GPS(float(lines[2]), float(lines[3]),
|
|
123
|
-
g.GPS(float(lines[4]), float(lines[5]),
|
|
121
|
+
g.GPS(float(lines[2]), float(lines[3]), float(lines[6])),
|
|
122
|
+
g.GPS(float(lines[4]), float(lines[5]), float(lines[6]))
|
|
124
123
|
)
|
|
125
124
|
|
|
126
125
|
@staticmethod
|
|
127
126
|
def from_fcjson_parmameters(data: dict):
|
|
128
127
|
return Origin.from_points(
|
|
129
128
|
"FCJ_box",
|
|
130
|
-
g.GPS(float(data['pilotLat']), float(data['pilotLng']),
|
|
131
|
-
g.GPS(float(data['centerLat']), float(data['centerLng']),
|
|
129
|
+
g.GPS(float(data['pilotLat']), float(data['pilotLng']), float(data['pilotAlt'])),
|
|
130
|
+
g.GPS(float(data['centerLat']), float(data['centerLng']), float(data['centerAlt']))
|
|
132
131
|
)
|
|
133
132
|
|
|
134
133
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: flightdata
|
|
3
|
+
Version: 0.2.6
|
|
4
|
+
Summary: Module for handling UAV flight log data
|
|
5
|
+
Home-page: https://github.com/PyFlightCoach/FlightData
|
|
6
|
+
Author: Thomas David
|
|
7
|
+
Author-email: thomasdavid0@gmail.com
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: numpy
|
|
11
|
+
Requires-Dist: pandas
|
|
12
|
+
Requires-Dist: simplejson
|
|
13
|
+
Requires-Dist: pfc-geometry>=0.2.4
|
|
14
|
+
Requires-Dist: ardupilot-log-reader>=0.2.1
|
|
15
|
+
|
|
16
|
+
## FlightData
|
|
17
|
+
This repo is contains a set of datastructures and tools for handling flight log data.
|
|
18
|
+
|
|
19
|
+
### Flight
|
|
20
|
+
The Flight object represents the data logged by a flight controller. The class wraps a pandas dataframe which is indexed on a single time axis. Where data is logged at different rates for different sensors it is mapped to the closest time index. Attribute access provides individual columns or sets of columns in the groups defined in Fields. Item access subsets the data in the time axis.
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Table
|
|
24
|
+
The Table is the base type for most of the datastructures. It allows attribute access to individual columns. Attribute access is also available to return basic entities subclassed from the base type in the pfc-geometry package. For example in the state object table.x provides the x position, table.pos provides a Point representing the xyz position. columns that are not represented by geometric base types are considered to be labels for the data.
|
|
25
|
+
|
|
26
|
+
### State
|
|
27
|
+
The State object is a table representing the position and orientation of the aircraft along with their derivatives, it can be constructed from a Flight or from scratch by extrapolating in lines or around arcs. Many tools are provided to manipulate the data. The position and attitude are in a reference frame (with Z up), the derivatives move with the aircraft in either the body, wind, stability or track (like the wind axis but with no wind) frame.
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
Further documentation will be provided here: https://pfcdocumentation.readthedocs.io/pyflightcoach/flightdata.html
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
import os
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
import shutil
|
|
5
|
+
import argparse
|
|
6
|
+
|
|
7
|
+
parser = argparse.ArgumentParser(description='A tool to collect logs from a memory card')
|
|
8
|
+
parser.add_argument('-f', '--folder', default='/media/', help='folder to get logs from, defaults to /media/')
|
|
9
|
+
parser.add_argument('-t', '--target', default='', help='folder to save logs in if not current')
|
|
10
|
+
parser.add_argument('-s', '--subfolder', default=True, action=argparse.BooleanOptionalAction, help='Create subfolder for logs, defaults to True')
|
|
11
|
+
|
|
12
|
+
args = parser.parse_args()
|
|
13
|
+
|
|
14
|
+
source_folder = Path(args.folder)
|
|
15
|
+
target_folder = Path(args.target)
|
|
16
|
+
|
|
17
|
+
all_logs = sorted(list(source_folder.rglob('*.BIN')))
|
|
18
|
+
|
|
19
|
+
for file in all_logs:
|
|
20
|
+
|
|
21
|
+
date = datetime.fromtimestamp(os.path.getmtime(file))
|
|
22
|
+
folder = Path(date.strftime('%Y_%m_%d'))
|
|
23
|
+
folder.mkdir(exist_ok=True)
|
|
24
|
+
|
|
25
|
+
if not (folder / file.name).exists():
|
|
26
|
+
print(f'copying {file} to {folder / file.name}')
|
|
27
|
+
shutil.copyfile(file, folder / file.name )
|
|
28
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
from flightdata import Flight, Origin
|
|
2
|
+
from geometry import GPS
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
import numpy as np
|
|
5
|
+
import argparse
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def box_from_log(log: Flight, channel: int):
|
|
9
|
+
c6on = Flight(log.data.loc[log.data[f'rcin_c{channel}']>=1500])
|
|
10
|
+
groups = np.cumsum(c6on.time_flight.diff() >=1)
|
|
11
|
+
return Origin.from_points("new", GPS(c6on.gps[groups==0])[-1], GPS(c6on.gps[groups==1])[-1])
|
|
12
|
+
|
|
13
|
+
def box_from_logs(pilot: Flight, centre: Flight):
|
|
14
|
+
return Origin.from_points("new", GPS(*pilot.gps.iloc[-1]), GPS(*centre.gps.iloc[-1]))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
if __name__ == "__main__":
|
|
18
|
+
parser = argparse.ArgumentParser(description='A tool for creating a flightline .f3a file from bin logs')
|
|
19
|
+
|
|
20
|
+
parser.add_argument('-l', '--logdir', default='', help='folder to look for logs in')
|
|
21
|
+
parser.add_argument('-p', '--pilot', default=None, help='flight log bin file to use, None for first')
|
|
22
|
+
parser.add_argument('-c', '--centre', default=None, help='centre position bin file to use if input==None')
|
|
23
|
+
parser.add_argument('-i', '--input', default=6, help='channel used to indicate pilot or centre postions (pwm>=1500), None for two files')
|
|
24
|
+
|
|
25
|
+
args = parser.parse_args()
|
|
26
|
+
|
|
27
|
+
print(args)
|
|
28
|
+
|
|
29
|
+
logs = sorted(list(Path(args.logdir).glob("*.BIN")))
|
|
30
|
+
logids = [int(log.stem) for log in logs]
|
|
31
|
+
|
|
32
|
+
if args.pilot in logs:
|
|
33
|
+
plog = args.pilot
|
|
34
|
+
elif args.pilot is None:
|
|
35
|
+
plog=logs[0]
|
|
36
|
+
elif args.pilot.isdigit():
|
|
37
|
+
plog = logs[logids.index(int(args.pilot))]
|
|
38
|
+
|
|
39
|
+
print(f'Pilot position log: {plog}')
|
|
40
|
+
|
|
41
|
+
if args.centre in logs:
|
|
42
|
+
clog = args.centre
|
|
43
|
+
elif args.centre is None:
|
|
44
|
+
clog=None
|
|
45
|
+
elif args.centre.isdigit():
|
|
46
|
+
clog = logs[logids.index(int(args.centre))]
|
|
47
|
+
|
|
48
|
+
print(f'Centre position log: {clog}')
|
|
49
|
+
|
|
50
|
+
if args.centre:
|
|
51
|
+
box = box_from_logs(Flight.from_log(plog), Flight.from_log(clog))
|
|
52
|
+
else:
|
|
53
|
+
box = box_from_log(Flight.from_log(plog), args.input)
|
|
54
|
+
|
|
55
|
+
box.to_f3a_zone(Path(args.logdir) / f'box_{plog.stem}.f3a')
|
|
@@ -5,14 +5,22 @@ author_email = thomasdavid0@gmail.com
|
|
|
5
5
|
description = Module for handling UAV flight log data
|
|
6
6
|
long_description = file: README.md
|
|
7
7
|
long_description_content_type = text/markdown
|
|
8
|
-
version = 0.2.
|
|
8
|
+
version = 0.2.6
|
|
9
9
|
url = https://github.com/PyFlightCoach/FlightData
|
|
10
10
|
|
|
11
11
|
[options]
|
|
12
|
+
package_dir =
|
|
13
|
+
flightdata = flightdata
|
|
14
|
+
scripts = scripts
|
|
15
|
+
scripts =
|
|
16
|
+
scripts/collect_logs.py
|
|
17
|
+
scripts/flightline.py
|
|
12
18
|
install_requires =
|
|
13
19
|
numpy
|
|
14
20
|
pandas
|
|
15
|
-
|
|
21
|
+
simplejson
|
|
22
|
+
pfc-geometry >=0.2.4
|
|
23
|
+
ardupilot-log-reader >=0.2.1
|
|
16
24
|
|
|
17
25
|
[egg_info]
|
|
18
26
|
tag_build =
|
flightdata-0.2.5/PKG-INFO
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: flightdata
|
|
3
|
-
Version: 0.2.5
|
|
4
|
-
Summary: Module for handling UAV flight log data
|
|
5
|
-
Home-page: https://github.com/PyFlightCoach/FlightData
|
|
6
|
-
Author: Thomas David
|
|
7
|
-
Author-email: thomasdavid0@gmail.com
|
|
8
|
-
Description-Content-Type: text/markdown
|
|
9
|
-
License-File: LICENSE
|
|
10
|
-
Requires-Dist: numpy
|
|
11
|
-
Requires-Dist: pandas
|
|
12
|
-
Requires-Dist: pfc-geometry
|
|
13
|
-
|
|
14
|
-
## FlightData
|
|
15
|
-
This repo is contains a set of datastructures and tools for handling flight log data.
|
|
16
|
-
|
|
17
|
-
### Flight
|
|
18
|
-
The Flight object represents the data logged by a flight controller. The class wraps a pandas dataframe which is indexed on a single time axis. Where data is logged at different rates for different sensors it is mapped to the closest time index. Attribute access provides individual columns or sets of columns in the groups defined in Fields. Item access subsets the data in the time axis.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
### Table
|
|
22
|
-
The Table is the base type for most of the datastructures. It allows attribute access to individual columns. Attribute access is also available to return basic entities subclassed from the base type in the pfc-geometry package. For example in the state object table.x provides the x position, table.pos provides a Point representing the xyz position. columns that are not represented by geometric base types are considered to be labels for the data.
|
|
23
|
-
|
|
24
|
-
### State
|
|
25
|
-
The State object is a table representing the position and orientation of the aircraft along with their derivatives, it can be constructed from a Flight or from scratch by extrapolating in lines or around arcs. Many tools are provided to manipulate the data. The position and attitude are in a reference frame (with Z up), the derivatives move with the aircraft in either the body, wind, stability or track (like the wind axis but with no wind) frame.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
### Ardupilot DataFlash log Parameters:
|
|
30
|
-
|
|
31
|
-
for reference (pulled from ardupilot github https://github.com/dronekit/ardupilot-releases/blob/master/libraries/DataFlash/DataFlash.h):
|
|
32
|
-
|
|
33
|
-
LOG_BASE_STRUCTURES:
|
|
34
|
-
|
|
35
|
-
FMT Type,Length,Name,Format,Columns
|
|
36
|
-
|
|
37
|
-
PARM TimeUS,Name,Value
|
|
38
|
-
|
|
39
|
-
GPS TimeUS,Status,GMS,GWk,NSats,HDop,Lat,Lng,RAlt,Alt,Spd,GCrs,VZ,U
|
|
40
|
-
|
|
41
|
-
GPS2 TimeUS,Status,GMS,GWk,NSats,HDop,Lat,Lng,RAlt,Alt,Spd,GCrs,VZ,U
|
|
42
|
-
|
|
43
|
-
GPA TimeUS,VDop,HAcc,VAcc,SAcc
|
|
44
|
-
|
|
45
|
-
GPA2 TimeUS,VDop,HAcc,VAcc,SAcc
|
|
46
|
-
|
|
47
|
-
IMU TimeUS,GyrX,GyrY,GyrZ,AccX,AccY,AccZ,ErrG,ErrA,Temp,GyHlt,AcHlt
|
|
48
|
-
|
|
49
|
-
MSG TimeUS
|
|
50
|
-
|
|
51
|
-
RCIN TimeUS,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14
|
|
52
|
-
|
|
53
|
-
RCOU TimeUS,Ch1,Ch2,Ch3,Ch4,Ch5,Ch6,Ch7,Ch8,Ch9,Ch10,Ch11,Ch12
|
|
54
|
-
|
|
55
|
-
RSSI TimeUS,RXRSSI
|
|
56
|
-
|
|
57
|
-
BARO TimeUS,Alt,Press,Temp,CRt
|
|
58
|
-
|
|
59
|
-
POWR TimeUS,Vcc,VServo,Flags
|
|
60
|
-
|
|
61
|
-
CMD TimeUS,CTot,CNum,CId,Prm1,Prm2,Prm3,Prm4,Lat,Lng,Alt
|
|
62
|
-
|
|
63
|
-
RAD TimeUS,RSSI,RemRSSI,TxBuf,Noise,RemNoise,RxErrors,Fixed
|
|
64
|
-
|
|
65
|
-
CAM TimeUS,GPSTime,GPSWeek,Lat,Lng,Alt,RelAlt,Roll,Pitch,Yaw
|
|
66
|
-
|
|
67
|
-
ARSP TimeUS,Airspeed,DiffPress,Temp,RawPress,Offset
|
|
68
|
-
|
|
69
|
-
CURR TimeUS,Throttle,Volt,Curr,Vcc,CurrTot,Volt2
|
|
70
|
-
|
|
71
|
-
ATT TimeUS,DesRoll,Roll,DesPitch,Pitch,DesYaw,Yaw,ErrRP,ErrYaw
|
|
72
|
-
|
|
73
|
-
MAG TimeUS,MagX,MagY,MagZ,OfsX,OfsY,OfsZ,MOfsX,MOfsY,MOfsZ,Health
|
|
74
|
-
|
|
75
|
-
MODE TimeUS,Mode,ModeNum
|
|
76
|
-
|
|
77
|
-
RFND TimeUS,Dist1,Dist2,Dist3,Dist4
|
|
78
|
-
|
|
79
|
-
IMU2 TimeUS,GyrX,GyrY,GyrZ,AccX,AccY,AccZ,ErrG,ErrA,Temp,GyHlt, AcHlt
|
|
80
|
-
|
|
81
|
-
IMU3 TimeUS,GyrX,GyrY,GyrZ,AccX,AccY,AccZ,ErrG,ErrA,Temp,GyHlt,AcHlt
|
|
82
|
-
|
|
83
|
-
AHR2 TimeUS,Roll,Pitch,Yaw,Alt,Lat,Lng
|
|
84
|
-
|
|
85
|
-
POS TimeUS,Lat,Lng,Alt,RelAlt
|
|
86
|
-
|
|
87
|
-
SIM TimeUS,Roll,Pitch,Yaw,Alt,Lat,Lng
|
|
88
|
-
|
|
89
|
-
EKF1 TimeUS,Roll,Pitch,Yaw,VN,VE,VD,PN,PE,PD,GX,GY,GZ
|
|
90
|
-
|
|
91
|
-
EKF2 TimeUS,Ratio,AZ1bias,AZ2bias,VWN,VWE,MN,ME,MD,MX,MY,MZ
|
|
92
|
-
|
|
93
|
-
EKF3 TimeUS,IVN,IVE,IVD,IPN,IPE,IPD,IMX,IMY,IMZ,IVT
|
|
94
|
-
|
|
95
|
-
EKF4 TimeUS,SV,SP,SH,SMX,SMY,SMZ,SVT,OFN,EFE,FS,TS,SS
|
|
96
|
-
|
|
97
|
-
TERR TimeUS,Status,Lat,Lng,Spacing,TerrH,CHeight,Pending,Loaded
|
|
98
|
-
|
|
99
|
-
UBX1 TimeUS,Instance,noisePerMS,jamInd,aPower,agcCnt
|
|
100
|
-
|
|
101
|
-
UBX2 TimeUS,Instance,ofsI,magI,ofsQ,magQ
|
|
102
|
-
|
|
103
|
-
UBX3 TimeUS,Instance,hAcc,vAcc,sAcc
|
|
104
|
-
|
|
105
|
-
GRAW TimeUS,WkMS,Week,numSV,sv,cpMes,prMes,doMes,mesQI,cno,lli
|
|
106
|
-
|
|
107
|
-
GRXH TimeUS,rcvTime,week,leapS,numMeas,recStat
|
|
108
|
-
|
|
109
|
-
GRXS TimeUS,prMes,cpMes,doMes,gnss,sv,freq,lock,cno,prD,cpD,doD,trk
|
|
110
|
-
|
|
111
|
-
SBFE TimeUS,TOW,WN,Mode,Err,Lat,Long,Height,Undul,Vn,Ve,Vu,COG
|
|
112
|
-
|
|
113
|
-
ESC1 TimeUS,RPM,Volt,Curr,Temp
|
|
114
|
-
|
|
115
|
-
ESC2 TimeUS,RPM,Volt,Curr,Temp
|
|
116
|
-
|
|
117
|
-
ESC3 TimeUS,RPM,Volt,Curr,Temp
|
|
118
|
-
|
|
119
|
-
ESC4 TimeUS,RPM,Volt,Curr,Temp
|
|
120
|
-
|
|
121
|
-
ESC5 TimeUS,RPM,Volt,Curr,Temp
|
|
122
|
-
|
|
123
|
-
ESC6 TimeUS,RPM,Volt,Curr,Temp
|
|
124
|
-
|
|
125
|
-
ESC7 TimeUS,RPM,Volt,Curr,Temp
|
|
126
|
-
|
|
127
|
-
ESC8 TimeUS,RPM,Volt,Curr,Temp
|
|
128
|
-
|
|
129
|
-
EKF5 TimeUS,normInnov,FIX,FIY,AFI,HAGL,offset,RI,meaRng,errHAGL
|
|
130
|
-
|
|
131
|
-
MAG2 TimeUS,MagX,MagY,MagZ,OfsX,OfsY,OfsZ,MOfsX,MOfsY,MOfsZ,Health
|
|
132
|
-
|
|
133
|
-
MAG3 TimeUS,MagX,MagY,MagZ,OfsX,OfsY,OfsZ,MOfsX,MOfsY,MOfsZ,Health
|
|
134
|
-
|
|
135
|
-
ACC1 TimeUS,SampleUS,AccX,AccY,AccZ
|
|
136
|
-
|
|
137
|
-
ACC2 TimeUS,SampleUS,AccX,AccY,AccZ
|
|
138
|
-
|
|
139
|
-
ACC3 TimeUS,SampleUS,AccX,AccY,AccZ
|
|
140
|
-
|
|
141
|
-
GYR1 TimeUS,SampleUS,GyrX,GyrY,GyrZ
|
|
142
|
-
|
|
143
|
-
GYR2 TimeUS,SampleUS,GyrX,GyrY,GyrZ
|
|
144
|
-
|
|
145
|
-
GYR3 TimeUS,SampleUS,GyrX,GyrY,GyrZ
|
|
146
|
-
|
|
147
|
-
PIDR TimeUS,Des,P,I,D,FF,AFF
|
|
148
|
-
|
|
149
|
-
PIDP TimeUS,Des,P,I,D,FF,AFF
|
|
150
|
-
|
|
151
|
-
PIDY TimeUS,Des,P,I,D,FF,AFF
|
|
152
|
-
|
|
153
|
-
PIDA TimeUS,Des,P,I,D,FF,AFF
|
|
154
|
-
|
|
155
|
-
PIDS TimeUS,Des,P,I,D,FF,AFF
|
|
156
|
-
|
|
157
|
-
BAR2 TimeUS,Alt,Press,Temp,CRt
|
|
158
|
-
|
|
159
|
-
BAR3 TimeUS,Alt,Press,Temp,CRt
|
|
160
|
-
|
|
161
|
-
VIBE TimeUS,VibeX,VibeY,VibeZ,Clip0,Clip1,Clip2
|
|
162
|
-
|
|
163
|
-
IMT TimeUS,DelT,DelvT,DelAX,DelAY,DelAZ,DelVX,DelVY,DelVZ
|
|
164
|
-
|
|
165
|
-
IMT2 TimeUS,DelT,DelvT,DelAX,DelAY,DelAZ,DelVX,DelVY,DelVZ
|
|
166
|
-
|
|
167
|
-
IMT3 TimeUS,DelT,DelvT,DelAX,DelAY,DelAZ,DelVX,DelVY,DelVZ
|
|
168
|
-
|
|
169
|
-
ORGN TimeUS,Type,Lat,Lng,Alt
|
|
170
|
-
|
|
171
|
-
RPM TimeUS,rpm1,rpm2
|
flightdata-0.2.5/README.md
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
## FlightData
|
|
2
|
-
This repo is contains a set of datastructures and tools for handling flight log data.
|
|
3
|
-
|
|
4
|
-
### Flight
|
|
5
|
-
The Flight object represents the data logged by a flight controller. The class wraps a pandas dataframe which is indexed on a single time axis. Where data is logged at different rates for different sensors it is mapped to the closest time index. Attribute access provides individual columns or sets of columns in the groups defined in Fields. Item access subsets the data in the time axis.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
### Table
|
|
9
|
-
The Table is the base type for most of the datastructures. It allows attribute access to individual columns. Attribute access is also available to return basic entities subclassed from the base type in the pfc-geometry package. For example in the state object table.x provides the x position, table.pos provides a Point representing the xyz position. columns that are not represented by geometric base types are considered to be labels for the data.
|
|
10
|
-
|
|
11
|
-
### State
|
|
12
|
-
The State object is a table representing the position and orientation of the aircraft along with their derivatives, it can be constructed from a Flight or from scratch by extrapolating in lines or around arcs. Many tools are provided to manipulate the data. The position and attitude are in a reference frame (with Z up), the derivatives move with the aircraft in either the body, wind, stability or track (like the wind axis but with no wind) frame.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
### Ardupilot DataFlash log Parameters:
|
|
17
|
-
|
|
18
|
-
for reference (pulled from ardupilot github https://github.com/dronekit/ardupilot-releases/blob/master/libraries/DataFlash/DataFlash.h):
|
|
19
|
-
|
|
20
|
-
LOG_BASE_STRUCTURES:
|
|
21
|
-
|
|
22
|
-
FMT Type,Length,Name,Format,Columns
|
|
23
|
-
|
|
24
|
-
PARM TimeUS,Name,Value
|
|
25
|
-
|
|
26
|
-
GPS TimeUS,Status,GMS,GWk,NSats,HDop,Lat,Lng,RAlt,Alt,Spd,GCrs,VZ,U
|
|
27
|
-
|
|
28
|
-
GPS2 TimeUS,Status,GMS,GWk,NSats,HDop,Lat,Lng,RAlt,Alt,Spd,GCrs,VZ,U
|
|
29
|
-
|
|
30
|
-
GPA TimeUS,VDop,HAcc,VAcc,SAcc
|
|
31
|
-
|
|
32
|
-
GPA2 TimeUS,VDop,HAcc,VAcc,SAcc
|
|
33
|
-
|
|
34
|
-
IMU TimeUS,GyrX,GyrY,GyrZ,AccX,AccY,AccZ,ErrG,ErrA,Temp,GyHlt,AcHlt
|
|
35
|
-
|
|
36
|
-
MSG TimeUS
|
|
37
|
-
|
|
38
|
-
RCIN TimeUS,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14
|
|
39
|
-
|
|
40
|
-
RCOU TimeUS,Ch1,Ch2,Ch3,Ch4,Ch5,Ch6,Ch7,Ch8,Ch9,Ch10,Ch11,Ch12
|
|
41
|
-
|
|
42
|
-
RSSI TimeUS,RXRSSI
|
|
43
|
-
|
|
44
|
-
BARO TimeUS,Alt,Press,Temp,CRt
|
|
45
|
-
|
|
46
|
-
POWR TimeUS,Vcc,VServo,Flags
|
|
47
|
-
|
|
48
|
-
CMD TimeUS,CTot,CNum,CId,Prm1,Prm2,Prm3,Prm4,Lat,Lng,Alt
|
|
49
|
-
|
|
50
|
-
RAD TimeUS,RSSI,RemRSSI,TxBuf,Noise,RemNoise,RxErrors,Fixed
|
|
51
|
-
|
|
52
|
-
CAM TimeUS,GPSTime,GPSWeek,Lat,Lng,Alt,RelAlt,Roll,Pitch,Yaw
|
|
53
|
-
|
|
54
|
-
ARSP TimeUS,Airspeed,DiffPress,Temp,RawPress,Offset
|
|
55
|
-
|
|
56
|
-
CURR TimeUS,Throttle,Volt,Curr,Vcc,CurrTot,Volt2
|
|
57
|
-
|
|
58
|
-
ATT TimeUS,DesRoll,Roll,DesPitch,Pitch,DesYaw,Yaw,ErrRP,ErrYaw
|
|
59
|
-
|
|
60
|
-
MAG TimeUS,MagX,MagY,MagZ,OfsX,OfsY,OfsZ,MOfsX,MOfsY,MOfsZ,Health
|
|
61
|
-
|
|
62
|
-
MODE TimeUS,Mode,ModeNum
|
|
63
|
-
|
|
64
|
-
RFND TimeUS,Dist1,Dist2,Dist3,Dist4
|
|
65
|
-
|
|
66
|
-
IMU2 TimeUS,GyrX,GyrY,GyrZ,AccX,AccY,AccZ,ErrG,ErrA,Temp,GyHlt, AcHlt
|
|
67
|
-
|
|
68
|
-
IMU3 TimeUS,GyrX,GyrY,GyrZ,AccX,AccY,AccZ,ErrG,ErrA,Temp,GyHlt,AcHlt
|
|
69
|
-
|
|
70
|
-
AHR2 TimeUS,Roll,Pitch,Yaw,Alt,Lat,Lng
|
|
71
|
-
|
|
72
|
-
POS TimeUS,Lat,Lng,Alt,RelAlt
|
|
73
|
-
|
|
74
|
-
SIM TimeUS,Roll,Pitch,Yaw,Alt,Lat,Lng
|
|
75
|
-
|
|
76
|
-
EKF1 TimeUS,Roll,Pitch,Yaw,VN,VE,VD,PN,PE,PD,GX,GY,GZ
|
|
77
|
-
|
|
78
|
-
EKF2 TimeUS,Ratio,AZ1bias,AZ2bias,VWN,VWE,MN,ME,MD,MX,MY,MZ
|
|
79
|
-
|
|
80
|
-
EKF3 TimeUS,IVN,IVE,IVD,IPN,IPE,IPD,IMX,IMY,IMZ,IVT
|
|
81
|
-
|
|
82
|
-
EKF4 TimeUS,SV,SP,SH,SMX,SMY,SMZ,SVT,OFN,EFE,FS,TS,SS
|
|
83
|
-
|
|
84
|
-
TERR TimeUS,Status,Lat,Lng,Spacing,TerrH,CHeight,Pending,Loaded
|
|
85
|
-
|
|
86
|
-
UBX1 TimeUS,Instance,noisePerMS,jamInd,aPower,agcCnt
|
|
87
|
-
|
|
88
|
-
UBX2 TimeUS,Instance,ofsI,magI,ofsQ,magQ
|
|
89
|
-
|
|
90
|
-
UBX3 TimeUS,Instance,hAcc,vAcc,sAcc
|
|
91
|
-
|
|
92
|
-
GRAW TimeUS,WkMS,Week,numSV,sv,cpMes,prMes,doMes,mesQI,cno,lli
|
|
93
|
-
|
|
94
|
-
GRXH TimeUS,rcvTime,week,leapS,numMeas,recStat
|
|
95
|
-
|
|
96
|
-
GRXS TimeUS,prMes,cpMes,doMes,gnss,sv,freq,lock,cno,prD,cpD,doD,trk
|
|
97
|
-
|
|
98
|
-
SBFE TimeUS,TOW,WN,Mode,Err,Lat,Long,Height,Undul,Vn,Ve,Vu,COG
|
|
99
|
-
|
|
100
|
-
ESC1 TimeUS,RPM,Volt,Curr,Temp
|
|
101
|
-
|
|
102
|
-
ESC2 TimeUS,RPM,Volt,Curr,Temp
|
|
103
|
-
|
|
104
|
-
ESC3 TimeUS,RPM,Volt,Curr,Temp
|
|
105
|
-
|
|
106
|
-
ESC4 TimeUS,RPM,Volt,Curr,Temp
|
|
107
|
-
|
|
108
|
-
ESC5 TimeUS,RPM,Volt,Curr,Temp
|
|
109
|
-
|
|
110
|
-
ESC6 TimeUS,RPM,Volt,Curr,Temp
|
|
111
|
-
|
|
112
|
-
ESC7 TimeUS,RPM,Volt,Curr,Temp
|
|
113
|
-
|
|
114
|
-
ESC8 TimeUS,RPM,Volt,Curr,Temp
|
|
115
|
-
|
|
116
|
-
EKF5 TimeUS,normInnov,FIX,FIY,AFI,HAGL,offset,RI,meaRng,errHAGL
|
|
117
|
-
|
|
118
|
-
MAG2 TimeUS,MagX,MagY,MagZ,OfsX,OfsY,OfsZ,MOfsX,MOfsY,MOfsZ,Health
|
|
119
|
-
|
|
120
|
-
MAG3 TimeUS,MagX,MagY,MagZ,OfsX,OfsY,OfsZ,MOfsX,MOfsY,MOfsZ,Health
|
|
121
|
-
|
|
122
|
-
ACC1 TimeUS,SampleUS,AccX,AccY,AccZ
|
|
123
|
-
|
|
124
|
-
ACC2 TimeUS,SampleUS,AccX,AccY,AccZ
|
|
125
|
-
|
|
126
|
-
ACC3 TimeUS,SampleUS,AccX,AccY,AccZ
|
|
127
|
-
|
|
128
|
-
GYR1 TimeUS,SampleUS,GyrX,GyrY,GyrZ
|
|
129
|
-
|
|
130
|
-
GYR2 TimeUS,SampleUS,GyrX,GyrY,GyrZ
|
|
131
|
-
|
|
132
|
-
GYR3 TimeUS,SampleUS,GyrX,GyrY,GyrZ
|
|
133
|
-
|
|
134
|
-
PIDR TimeUS,Des,P,I,D,FF,AFF
|
|
135
|
-
|
|
136
|
-
PIDP TimeUS,Des,P,I,D,FF,AFF
|
|
137
|
-
|
|
138
|
-
PIDY TimeUS,Des,P,I,D,FF,AFF
|
|
139
|
-
|
|
140
|
-
PIDA TimeUS,Des,P,I,D,FF,AFF
|
|
141
|
-
|
|
142
|
-
PIDS TimeUS,Des,P,I,D,FF,AFF
|
|
143
|
-
|
|
144
|
-
BAR2 TimeUS,Alt,Press,Temp,CRt
|
|
145
|
-
|
|
146
|
-
BAR3 TimeUS,Alt,Press,Temp,CRt
|
|
147
|
-
|
|
148
|
-
VIBE TimeUS,VibeX,VibeY,VibeZ,Clip0,Clip1,Clip2
|
|
149
|
-
|
|
150
|
-
IMT TimeUS,DelT,DelvT,DelAX,DelAY,DelAZ,DelVX,DelVY,DelVZ
|
|
151
|
-
|
|
152
|
-
IMT2 TimeUS,DelT,DelvT,DelAX,DelAY,DelAZ,DelVX,DelVY,DelVZ
|
|
153
|
-
|
|
154
|
-
IMT3 TimeUS,DelT,DelvT,DelAX,DelAY,DelAZ,DelVX,DelVY,DelVZ
|
|
155
|
-
|
|
156
|
-
ORGN TimeUS,Type,Lat,Lng,Alt
|
|
157
|
-
|
|
158
|
-
RPM TimeUS,rpm1,rpm2
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: flightdata
|
|
3
|
-
Version: 0.2.5
|
|
4
|
-
Summary: Module for handling UAV flight log data
|
|
5
|
-
Home-page: https://github.com/PyFlightCoach/FlightData
|
|
6
|
-
Author: Thomas David
|
|
7
|
-
Author-email: thomasdavid0@gmail.com
|
|
8
|
-
Description-Content-Type: text/markdown
|
|
9
|
-
License-File: LICENSE
|
|
10
|
-
Requires-Dist: numpy
|
|
11
|
-
Requires-Dist: pandas
|
|
12
|
-
Requires-Dist: pfc-geometry
|
|
13
|
-
|
|
14
|
-
## FlightData
|
|
15
|
-
This repo is contains a set of datastructures and tools for handling flight log data.
|
|
16
|
-
|
|
17
|
-
### Flight
|
|
18
|
-
The Flight object represents the data logged by a flight controller. The class wraps a pandas dataframe which is indexed on a single time axis. Where data is logged at different rates for different sensors it is mapped to the closest time index. Attribute access provides individual columns or sets of columns in the groups defined in Fields. Item access subsets the data in the time axis.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
### Table
|
|
22
|
-
The Table is the base type for most of the datastructures. It allows attribute access to individual columns. Attribute access is also available to return basic entities subclassed from the base type in the pfc-geometry package. For example in the state object table.x provides the x position, table.pos provides a Point representing the xyz position. columns that are not represented by geometric base types are considered to be labels for the data.
|
|
23
|
-
|
|
24
|
-
### State
|
|
25
|
-
The State object is a table representing the position and orientation of the aircraft along with their derivatives, it can be constructed from a Flight or from scratch by extrapolating in lines or around arcs. Many tools are provided to manipulate the data. The position and attitude are in a reference frame (with Z up), the derivatives move with the aircraft in either the body, wind, stability or track (like the wind axis but with no wind) frame.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
### Ardupilot DataFlash log Parameters:
|
|
30
|
-
|
|
31
|
-
for reference (pulled from ardupilot github https://github.com/dronekit/ardupilot-releases/blob/master/libraries/DataFlash/DataFlash.h):
|
|
32
|
-
|
|
33
|
-
LOG_BASE_STRUCTURES:
|
|
34
|
-
|
|
35
|
-
FMT Type,Length,Name,Format,Columns
|
|
36
|
-
|
|
37
|
-
PARM TimeUS,Name,Value
|
|
38
|
-
|
|
39
|
-
GPS TimeUS,Status,GMS,GWk,NSats,HDop,Lat,Lng,RAlt,Alt,Spd,GCrs,VZ,U
|
|
40
|
-
|
|
41
|
-
GPS2 TimeUS,Status,GMS,GWk,NSats,HDop,Lat,Lng,RAlt,Alt,Spd,GCrs,VZ,U
|
|
42
|
-
|
|
43
|
-
GPA TimeUS,VDop,HAcc,VAcc,SAcc
|
|
44
|
-
|
|
45
|
-
GPA2 TimeUS,VDop,HAcc,VAcc,SAcc
|
|
46
|
-
|
|
47
|
-
IMU TimeUS,GyrX,GyrY,GyrZ,AccX,AccY,AccZ,ErrG,ErrA,Temp,GyHlt,AcHlt
|
|
48
|
-
|
|
49
|
-
MSG TimeUS
|
|
50
|
-
|
|
51
|
-
RCIN TimeUS,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14
|
|
52
|
-
|
|
53
|
-
RCOU TimeUS,Ch1,Ch2,Ch3,Ch4,Ch5,Ch6,Ch7,Ch8,Ch9,Ch10,Ch11,Ch12
|
|
54
|
-
|
|
55
|
-
RSSI TimeUS,RXRSSI
|
|
56
|
-
|
|
57
|
-
BARO TimeUS,Alt,Press,Temp,CRt
|
|
58
|
-
|
|
59
|
-
POWR TimeUS,Vcc,VServo,Flags
|
|
60
|
-
|
|
61
|
-
CMD TimeUS,CTot,CNum,CId,Prm1,Prm2,Prm3,Prm4,Lat,Lng,Alt
|
|
62
|
-
|
|
63
|
-
RAD TimeUS,RSSI,RemRSSI,TxBuf,Noise,RemNoise,RxErrors,Fixed
|
|
64
|
-
|
|
65
|
-
CAM TimeUS,GPSTime,GPSWeek,Lat,Lng,Alt,RelAlt,Roll,Pitch,Yaw
|
|
66
|
-
|
|
67
|
-
ARSP TimeUS,Airspeed,DiffPress,Temp,RawPress,Offset
|
|
68
|
-
|
|
69
|
-
CURR TimeUS,Throttle,Volt,Curr,Vcc,CurrTot,Volt2
|
|
70
|
-
|
|
71
|
-
ATT TimeUS,DesRoll,Roll,DesPitch,Pitch,DesYaw,Yaw,ErrRP,ErrYaw
|
|
72
|
-
|
|
73
|
-
MAG TimeUS,MagX,MagY,MagZ,OfsX,OfsY,OfsZ,MOfsX,MOfsY,MOfsZ,Health
|
|
74
|
-
|
|
75
|
-
MODE TimeUS,Mode,ModeNum
|
|
76
|
-
|
|
77
|
-
RFND TimeUS,Dist1,Dist2,Dist3,Dist4
|
|
78
|
-
|
|
79
|
-
IMU2 TimeUS,GyrX,GyrY,GyrZ,AccX,AccY,AccZ,ErrG,ErrA,Temp,GyHlt, AcHlt
|
|
80
|
-
|
|
81
|
-
IMU3 TimeUS,GyrX,GyrY,GyrZ,AccX,AccY,AccZ,ErrG,ErrA,Temp,GyHlt,AcHlt
|
|
82
|
-
|
|
83
|
-
AHR2 TimeUS,Roll,Pitch,Yaw,Alt,Lat,Lng
|
|
84
|
-
|
|
85
|
-
POS TimeUS,Lat,Lng,Alt,RelAlt
|
|
86
|
-
|
|
87
|
-
SIM TimeUS,Roll,Pitch,Yaw,Alt,Lat,Lng
|
|
88
|
-
|
|
89
|
-
EKF1 TimeUS,Roll,Pitch,Yaw,VN,VE,VD,PN,PE,PD,GX,GY,GZ
|
|
90
|
-
|
|
91
|
-
EKF2 TimeUS,Ratio,AZ1bias,AZ2bias,VWN,VWE,MN,ME,MD,MX,MY,MZ
|
|
92
|
-
|
|
93
|
-
EKF3 TimeUS,IVN,IVE,IVD,IPN,IPE,IPD,IMX,IMY,IMZ,IVT
|
|
94
|
-
|
|
95
|
-
EKF4 TimeUS,SV,SP,SH,SMX,SMY,SMZ,SVT,OFN,EFE,FS,TS,SS
|
|
96
|
-
|
|
97
|
-
TERR TimeUS,Status,Lat,Lng,Spacing,TerrH,CHeight,Pending,Loaded
|
|
98
|
-
|
|
99
|
-
UBX1 TimeUS,Instance,noisePerMS,jamInd,aPower,agcCnt
|
|
100
|
-
|
|
101
|
-
UBX2 TimeUS,Instance,ofsI,magI,ofsQ,magQ
|
|
102
|
-
|
|
103
|
-
UBX3 TimeUS,Instance,hAcc,vAcc,sAcc
|
|
104
|
-
|
|
105
|
-
GRAW TimeUS,WkMS,Week,numSV,sv,cpMes,prMes,doMes,mesQI,cno,lli
|
|
106
|
-
|
|
107
|
-
GRXH TimeUS,rcvTime,week,leapS,numMeas,recStat
|
|
108
|
-
|
|
109
|
-
GRXS TimeUS,prMes,cpMes,doMes,gnss,sv,freq,lock,cno,prD,cpD,doD,trk
|
|
110
|
-
|
|
111
|
-
SBFE TimeUS,TOW,WN,Mode,Err,Lat,Long,Height,Undul,Vn,Ve,Vu,COG
|
|
112
|
-
|
|
113
|
-
ESC1 TimeUS,RPM,Volt,Curr,Temp
|
|
114
|
-
|
|
115
|
-
ESC2 TimeUS,RPM,Volt,Curr,Temp
|
|
116
|
-
|
|
117
|
-
ESC3 TimeUS,RPM,Volt,Curr,Temp
|
|
118
|
-
|
|
119
|
-
ESC4 TimeUS,RPM,Volt,Curr,Temp
|
|
120
|
-
|
|
121
|
-
ESC5 TimeUS,RPM,Volt,Curr,Temp
|
|
122
|
-
|
|
123
|
-
ESC6 TimeUS,RPM,Volt,Curr,Temp
|
|
124
|
-
|
|
125
|
-
ESC7 TimeUS,RPM,Volt,Curr,Temp
|
|
126
|
-
|
|
127
|
-
ESC8 TimeUS,RPM,Volt,Curr,Temp
|
|
128
|
-
|
|
129
|
-
EKF5 TimeUS,normInnov,FIX,FIY,AFI,HAGL,offset,RI,meaRng,errHAGL
|
|
130
|
-
|
|
131
|
-
MAG2 TimeUS,MagX,MagY,MagZ,OfsX,OfsY,OfsZ,MOfsX,MOfsY,MOfsZ,Health
|
|
132
|
-
|
|
133
|
-
MAG3 TimeUS,MagX,MagY,MagZ,OfsX,OfsY,OfsZ,MOfsX,MOfsY,MOfsZ,Health
|
|
134
|
-
|
|
135
|
-
ACC1 TimeUS,SampleUS,AccX,AccY,AccZ
|
|
136
|
-
|
|
137
|
-
ACC2 TimeUS,SampleUS,AccX,AccY,AccZ
|
|
138
|
-
|
|
139
|
-
ACC3 TimeUS,SampleUS,AccX,AccY,AccZ
|
|
140
|
-
|
|
141
|
-
GYR1 TimeUS,SampleUS,GyrX,GyrY,GyrZ
|
|
142
|
-
|
|
143
|
-
GYR2 TimeUS,SampleUS,GyrX,GyrY,GyrZ
|
|
144
|
-
|
|
145
|
-
GYR3 TimeUS,SampleUS,GyrX,GyrY,GyrZ
|
|
146
|
-
|
|
147
|
-
PIDR TimeUS,Des,P,I,D,FF,AFF
|
|
148
|
-
|
|
149
|
-
PIDP TimeUS,Des,P,I,D,FF,AFF
|
|
150
|
-
|
|
151
|
-
PIDY TimeUS,Des,P,I,D,FF,AFF
|
|
152
|
-
|
|
153
|
-
PIDA TimeUS,Des,P,I,D,FF,AFF
|
|
154
|
-
|
|
155
|
-
PIDS TimeUS,Des,P,I,D,FF,AFF
|
|
156
|
-
|
|
157
|
-
BAR2 TimeUS,Alt,Press,Temp,CRt
|
|
158
|
-
|
|
159
|
-
BAR3 TimeUS,Alt,Press,Temp,CRt
|
|
160
|
-
|
|
161
|
-
VIBE TimeUS,VibeX,VibeY,VibeZ,Clip0,Clip1,Clip2
|
|
162
|
-
|
|
163
|
-
IMT TimeUS,DelT,DelvT,DelAX,DelAY,DelAZ,DelVX,DelVY,DelVZ
|
|
164
|
-
|
|
165
|
-
IMT2 TimeUS,DelT,DelvT,DelAX,DelAY,DelAZ,DelVX,DelVY,DelVZ
|
|
166
|
-
|
|
167
|
-
IMT3 TimeUS,DelT,DelvT,DelAX,DelAY,DelAZ,DelVX,DelVY,DelVZ
|
|
168
|
-
|
|
169
|
-
ORGN TimeUS,Type,Lat,Lng,Alt
|
|
170
|
-
|
|
171
|
-
RPM TimeUS,rpm1,rpm2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|