Using X-Plane to Visualize INS Data

Getting data to the finish line is always tricky. Acquisition is one part of that equation, but the part that more often puts me in front of a laptop with my headphones on and a weird look on my face is the reduction. It's very engaging to find ways to look at data that are intuitive and useful, and I work pretty hard to build a "toolbox" of scripts that get data into a usable format in time to brief the next sortie. Usually this takes the form of the plots that show up elsewhere on this site, but the introduction of the INS as a data acquisition tool meant that I had a ton of data and needed a better way to look at it.

I dug into the X-Plane SDK and settled into the local coffee shop, and a few days later I had a start at a plug-in that I can use to replay INS data. It amounts to about 2000 lines of C++ and Objective-C code that lets me load a number of different file formats (the BoxDAQ's native output format, as well as a couple of proprietary customer formats) and incorporates basic play/pause/replay functionality. I found two tricks that make this work really well:

1) Rather than accessing X-Plane datarefs over UDP, direct access to the datarefs through the XDK will keep up with 50 Hz INS data and take all of the "choppiness" out of the replay.

2) Pulling the datafile into RAM rather than reading from the file line-by-line makes things like seek functions happen a lot faster, and has the structural side-benefit of making it easy to write a front end that translates new data types into a common format - i.e., supporting a new input file format is as easy as writing a quick interpreter.

The data products of this project have been pretty spectacular. I used this plugin to crunch data from the two recent spin sorties, and here's what I ended up with.

Flight 1, Point 1: Left nominal spin

Flight 1, Point 2: Left spin, left aileron (tight), throttle Idle

Flight 1, Point 3: Left spin, right aileron, 50% throttle

Flight 1, Point 4: Left spin, right aileron (flat), 100% throttle

Flight 1, Point 5: Left spin, nominal inverted

Flight 2, Point 6: Right nominal spin

Flight 2, Point 7: Right spin, right aileron (tight), throttle idle - this is my favorite spin from this set. The airplane tucks in, and then hooks up into a spiral departure, followed by a G buildup to accelerated stall and repeated incipient phase. This repeated four times until we recovered. Cockpit feel was big G fluctuations (0-3Gs) and sharp roll oscillations (~90 degrees).

Flight 2, Point 8: Right spin, left aileron (flat), 100% throttle - this one is a unique flat spin entry. The out-spin aileron application might have gone in a little early, causing the airplane to hook up on the outside of the spin. Elliot removed the aileron and reapplied once the spin was reestablished, and then added power.

Flight 2, Point 9: Right spin, nominal inverted - from my sense in the front cockpit, this was a very flat spin compared to similarly configured upright spins. Data shows the nose down pitch angle was approximately 25 degrees, vs. 50 degrees nose down for the upright equivalent.

Flight 2, left/right snap roll at 140 KIAS

Flight 2, left/right roll captures at 159 KIAS - as a debrief item, this visualization technique makes it really easy to review coordination issues that build during the roll - for the second roll capture, I had the stick, and you can see that even though my entry was well-coordinated there's some significant lateral excursion later in the maneuver.

Flight 2, 6G slalom + 6G vertical reversal

I'm absolutely thrilled with the results and the usefulness of the data. I'm still getting used to using this as a debrief tool, and I think improving the ability to overlay text and flight details over the video will make it even better.

Major thanks to Elliot Seguin and Tyler Knight for getting me data!