Skip to content

Commit 8790fc3

Browse files
Add djiDataExtractor
1 parent d12041b commit 8790fc3

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed

src/tools/djiDataExtractor.js

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
window.radians = function (a) {
2+
return 0.0174533 * a
3+
}
4+
5+
export class DjiDataExtractor {
6+
static extractAttitude (messages, source) {
7+
const attitudes = {}
8+
// console.log('extractAttitude', messages, source)
9+
if (source in messages) {
10+
// console.log('extractAttitude', messages[source])
11+
const attitudeMsgs = messages[source]
12+
// console.log('attitudeMsgs', attitudeMsgs)
13+
for (const i in attitudeMsgs.time_boot_ms) {
14+
// console.log('attitudeMsgs.time_boot_ms[i]', attitudeMsgs.time_boot_ms[i])
15+
// console.log(attitudeMsgs)
16+
attitudes[parseInt(attitudeMsgs.time_boot_ms[i])] =
17+
[
18+
window.radians(attitudeMsgs.roll[i]),
19+
window.radians(attitudeMsgs.pitch[i]),
20+
window.radians(attitudeMsgs.yaw[i])
21+
]
22+
}
23+
}
24+
return attitudes
25+
}
26+
27+
static extractAttitudeSources (messages) {
28+
const result = {
29+
quaternions: [],
30+
eulers: ['OSD']
31+
}
32+
return result
33+
}
34+
35+
static extractEvents (messages) {
36+
return []
37+
}
38+
39+
static extractFlightModes (messages) {
40+
return [[0, 'Normal']]
41+
}
42+
43+
static extractMission (messages) {
44+
return []
45+
}
46+
47+
static extractParams (messages) {
48+
return undefined
49+
}
50+
51+
static extractFences (messages) {
52+
return []
53+
}
54+
55+
static extractDefaultParams (messages) {
56+
return []
57+
}
58+
59+
static extractVehicleType (messages) {
60+
return 'quadcopter'
61+
}
62+
63+
static extractTextMessages (messages) {
64+
const texts = []
65+
if ('STATUSTEXT' in messages) {
66+
const textMsgs = messages.STATUSTEXT
67+
for (const i in textMsgs.time_boot_ms) {
68+
texts.push([textMsgs.time_boot_ms[i], textMsgs.severity[i], textMsgs.text[i]])
69+
}
70+
}
71+
if ('MSG' in messages) {
72+
const textMsgs = messages.MSG
73+
for (const i in textMsgs.time_boot_ms) {
74+
texts.push([textMsgs.time_boot_ms[i], 0, textMsgs.Message[i]])
75+
}
76+
}
77+
return texts
78+
}
79+
80+
static extractTrajectorySources (messages) {
81+
return ['OSD']
82+
}
83+
84+
static extractTrajectory (messages, source) {
85+
// returns a dict with the trajectories found
86+
console.log('extractTrajectory', messages, source)
87+
const ret = {}
88+
if ('OSD' in messages && source === 'OSD') {
89+
const trajectory = []
90+
const timeTrajectory = {}
91+
let startAltitude = null
92+
const gpsData = messages.OSD
93+
let start = 0
94+
for (const i in gpsData.time_boot_ms) {
95+
const delta = gpsData.time_boot_ms[i] - start
96+
if (delta < 200) {
97+
continue
98+
}
99+
start = gpsData.time_boot_ms[i]
100+
// console.log('extractTrajectory', gpsData)
101+
if (gpsData.latitude[i] !== 0) {
102+
if (startAltitude === null) {
103+
startAltitude = gpsData.altitude[i]
104+
}
105+
trajectory.push(
106+
[
107+
gpsData.longitude[i],
108+
gpsData.latitude[i],
109+
gpsData.altitude[i] - startAltitude,
110+
gpsData.time_boot_ms[i]
111+
]
112+
)
113+
timeTrajectory[gpsData.time_boot_ms[i]] = [
114+
gpsData.longitude[i],
115+
gpsData.latitude[i],
116+
(gpsData.altitude[i] - startAltitude) / 1000,
117+
gpsData.time_boot_ms[i]]
118+
}
119+
}
120+
if (trajectory.length) {
121+
ret.OSD = {
122+
startAltitude: startAltitude,
123+
trajectory: trajectory,
124+
timeTrajectory: timeTrajectory
125+
}
126+
}
127+
}
128+
console.log('extractTrajectory', ret)
129+
return ret
130+
}
131+
132+
static extractNamedValueFloatNames (_messages) {
133+
// this mechanism is not used for dataflash logs
134+
return []
135+
}
136+
137+
static extractStartTime (messages) {
138+
return 0
139+
}
140+
}

0 commit comments

Comments
 (0)