Sky Dolly v0.16 - Free Flight Recorder & Replay, Location Management

Hi Steeler,

Sky Dolly is a great piece of software I use on pretty much every flight in order to record take offs and landings – except when I forget to start (or sometimes stop) recording.

In order to avoid the latter, rule based automated recording would be quite helpful. So Sky Dolly would start / stop recording according to custom, predefined rules, like:

  • Start recording when plane is on ground, landing lights turn on AND no recording is active already, then stop recording X minutes after gear up event
  • Start recording when plane is in the air, gear goes down and no recording is active already, then stop recording X minutes after flaps up

Any chance to have something like that in a future release?

First of all, feature request (and also bug issues) may be added here:

(free github.com account required)

This would be the place for more extensive discussions. I do my best to at least give a timely answer. But Sky Dolly being a project developed in my free time I cannot of course guarantee any “service level agreements”.

In general I don’t announce or comment on new features anyway ahead of time, in order not to necessarily raise expectations. In this case however I cannot deny that those exact thoughts are in my own personal “backlog”.

But again, when - and if - such a feature would arrive is at my own discretion.

And thanks so much for your comments about Sky Dolly, very much appreciated :slight_smile:

1 Like

Minimal UI & Usability

I am happy to see that Sky Dolly’s Truly Minimal UI that has been introduced with Sky Dolly v0.11 a couple of months ago is inspiringly fresh and leading the pack here:

The user interface is designed with usability in mind: every non-necessary mouse interaction is “optimised away” and also callable with keyboard shortcuts, while still trying to retain an intuitive experience.

Example:
You can move the time slider at almost every moment (except during recording, for obvious reasons) without having to first press either the stop or pause button. Or in other words, skipping back in time during replay is as easy as dragging the time slider to the desired position.

That doesn’t mean that there is nothing more to improve: I have quite a to-do list.

Talking of which: the next release v0.13 is expected to arrive shortly after the long-awaited 40th anniversary of Flight Simulator, after having ensured final compatibility (Sky Dolly keeps working flawlessly with the current beta) and added support for the new aircraft models.

While being rather a smaller, incremental update on existing functionality it will increase interoperability with another very well-known open source application. I will pinpoint it more closely on the map once the release is ready - enough said. So stay tuned :wink:

Meanwhile I get dozens of encouraging comments, the most recent comment to my “cinematic Sky Dolly trailer” which made me feel very happy:

Wow, thank you so much! This and other comments make me so proud and motivate me to give back to the community, with more amazing features and improvements to come!

Performance & Resource Usage

Due to the underlying plugin architecture the minimal UI not only means “minimal screen estate” (while still providing the most essential recording & replay functionality, including automatic persistence into the logbook of the recorded flight), but also minimal RAM usage: every module (implemented as plugin) is unloaded from memory when not in use.

So Sky Dolly uses as few as 8 MiB of RAM when launched in minimal UI mode - including a fully functional logbook (a SQLite database) and full replay & recording functionality.

Being implemented in modern C++ the code runs “as close as possible to the metal” (= the CPU). Memory is deterministically released right after usage ends (= no garbage collection, but RAII).

In simple words: Sky Dolly is taking up as little of your precious CPU and RAM resources as possible while still providing accurate and smooth replay.

This is also achieved by only recording and replaying those simulation variables that are actually changing their value, further sparing MS Flight Simulator the extra work of “setting the same value over and over again” (with no physical or visual impact).

Talking about performance: here is a very impressive “flight show” performance:

CGAviator is a real Hawk pilot and he recorded this fantastic acrobatic flight with Sky Dolly: “Weeks of practice, careful choreography, multiple camera angles. […] Just Flight Hawk T1 solo display overhead amazing Duxford scenery.”

Shared with kind permission of the author. Also check out CGAviator’s other amazing videos on his YouTube channel !

Sky Dolly is open source and freely available here:

Source code is also available here:

1 Like

Happy 40th Anniversary, Microsoft Flight Simulator!

I am happy to announce Sky Dolly v0.13 (“Dapper Daher”) which introduces location import & export.

Location Import & Export

The new location import & export plugins make it not only possible to exchange user points with Little Navmap (by @albar965), but also allows to literally import all POIs, photogrammetric cities, airports and more from free POI databases such as Little Navmap - MSFS POI Database (hosted on flightsim.to).

The engine state (start, shutdown, keep) can now also be stored together with locations, making it effectively possible to define your own custom starting points, for instance your own helipads.

Locations can now also be conveniently filtered by keyword search, type (system, user, imported), category and country.

In addtion Sky Dolly ships with 100 system locations, fine-tuned and validated GPS coordinates, most of which now come from https://flightspots.co/ (unfortunately this website notifies visitors that it will “terminate its radar services”). It has never been easier to reach or take-off from beautiful spots such as this one:

Further improvements

  • Reduction of exported Sky Dolly CSV file sizes (by rounding to two decimal digits - GPS coordinates are rounded to 6 decimal digits)
  • The [Sky Dolly installation directory]/Resources/migr/Locations.csv file is now optional and can be deleted (it is used to migrate the system locations into newly generated logbooks)
  • All aircraft types from the 40-th anniversary update have been added to the aircraft selector combo box (when importing a flight); third-party aircraft are automatically added as they are recorded
  • The Flight Recorder (by @NguyenQHy) CSV import plugin now also imports the propeller lever position
  • Keyword search text fields now have a clear button
  • Performance improvements and bug fixes

The complete changelog is available on github.com.

Sky Dolly is open source. The latest binaries are available at:

3 Likes

For Helicopter Pilots - Create Your Personal Helipad

MS Flight Simulator does offer a couple of helipads “out of the box”. But what if you wanted to spawn at your own helipad, anywhere in the world? And possibly even in “cold and dark”?

In this tutorial we are going to define our own custom Rega helipad in Zurich airport (LSZH) and store it as user location in Sky Dolly respectively as imported location when importing from Little Navmap. The following simple steps will lead us to our goal:

  • Define the helipad GPS coordinates
  • Fine-tune (“update”) the location (helicopter attitude, “on ground”, engine)

TL;DR

  • In the Location module (press key F3) paste the GPS coordinates into the table (CTRL + V)
  • Alternatively import a Little Navmap user point CSV file
  • Teleport to the newly inserted location, adjust the aircraft position and attitude in MS Flight Simulator as needed
  • In Sky Dolly, select the desired location table item and press the Update button
  • Update the other location attributes as needed: category, country, identifier and engine action

Helipad Coordinates (Step 1)

… With Bing Maps

Open Bing Maps (or any other map service) and find the desired helipad. As already hinted at in this example we are going with the Rega helipad in Zurich Airport (LSZH). A simple search with e.g. “zurich airport rega” will quickly reveal the Rega Center, just next to the beginning of runway 28.

The helipad is easily found when enabling “satellite view” and zooming in, so in this example:

Fetching the actual GPS coordinates depends on the actual map service, but in most cases it is as easy as:

  • Right-click on the desired position
  • Copy the GPS coordinates

In Sky Dolly…

Now switch to Sky Dolly, activate the Location module (press key F3) and insert the new location:

  • Make sure the location table has focus (click on any row)
  • Paste the GPS coordinates with CTRL + V

That’s it! The GPS coordinates from the clipboard have been pasted into the location table, by creating a new entry with the default altitude, indicated airspeed, engine action and on ground values.

In fact, thanks to the underlying GeographicLib Sky Dolly understands a whole range of coordinate flavours, such as decimal coordinates and various degrees, minutes, seconds (DMS) variants. So the following coordinates would all work

  • 47.458143, 8.571866
  • 47° 27’ 29.3142" N, 8° 34’ 18.717" E
  • And various other DMS variants, with or without comma separator

Hint: activate the User filter in order to only see your user locations:

Before we go to step 2, the fine-tuning of the location, we will show another way to define your helipad coordinates. Perhaps you already have a collection of helipads in Little Navmap, or any other source that provides user point CSV files.

… With Little Navmap (User Point CSV)

  • Add a new user point (CTRL + SHIFT + click) at the desired position
  • Conveniently we can also already define the user point type, here: Helipad, and provide the other information as needed

You can repeat those steps for as many helipads as required. Or possibly you already have some helipad database file that you can import into Little Navmap (in case it is already in Little Navmap CSV format, you can also import it directly into Sky Dolly, as shown below).

Once all helipads are defined as user points:

  • Choose Userpoints / Export CSV…
  • Choose the export options as desired
  • Click OK
  • Choose any suitable location for the CSV file to be exported

In Sky Dolly…

Now switch to Sky Dolly and:

  • Choose File / Location Import / CSV (Comma-Separated Values)
  • Select the previously exported CSV file
  • Select Little Navmap as CSV format flavour

Optionally we can already define the default country to Switzerland, depending on whether that value is defined in the Little Navmap user point CSV data or not. We will refine the default altitude and indicated airspeed later, so we can keep the default values for now as is.

  • Click on Import
  • Activate the Location module (press F3)

Hint: activate the Import filter in order to only see the imported locations:

And indeed, our “Rega Helipad” has been successfully imported, including its description, country and identifier (as set in Little Navmap).

Fine-Tune Helipad Location (Step 2)

Now we are going to place our helicopter as precisely as possible onto the helipad and refine all location settings as needed. Therefore:

  • Launch MS Flight Simulator
  • Select a location anywhere in the world, but best near the desired helipad (such that scenery data can already start downloading)
  • Fly

Before we teleport to our helipad location we are already manually going to change two location properties:

  • On ground: checked
  • Inidcated airspeed: 0 knots

With those settings we are already placed properly onto the ground (regardless of the location altitude) and we should not be moving (*).

(*) Depending on the state of the scenery download and/or your previous flying conditions your aircraft might still be moving erratically, especially as the digital elevation model (DEM) is being refined. Simply wait a little bit until the scenery has been downloaded and simply teleport again to the same location.

Once we clicked on the FLY button in MS Flight Simulator, we teleport to our location with Sky Dolly:

  • Select the location entry in the table
  • Click on the Teleport button
  • Alternatively double-click on the ID column

This will now - roughly - place us anywhere near the helipad. Now we are gonig to fine-tune the heading, position and helicopter attitude. Best use the slew mode (press key Y) in MS Flight Simulator, or - if you are really good with helicopters :wink: - manually land at the exact helipad position.

Hint: the slew mode is very coarse to control with keyboard. If you have use a joypad, or any other available analog stick / input.

Once the helicopter is standing still at the exact helipad position, with the correct heading, and slew mode is disabled (such that the helicopter gets properly placed on the ground), switch back to Sky Dolly again, and:

  • Select the desired location entry in the table
  • Click the Update button

This will update the currently selected location:

  • The coordinates and altitude
  • The on ground setting
  • Pitch, bank, true heading
  • Indicated airspeed

As a final step we will also:

  • Select the desired engine behaviour, here: Stop (“cold and dark”)
  • Optionally we can also set the category to Helipad, change the country, provide an (ICAO) identifier and provide a description

And that’s it! From now on you can always teleport to your custom helipad and start with “cold and dark”.

Tip: By setting the category to Helipad you can then easily filter and find all your helipads, with the category filter.

P.S. “Take and give”: the CSV user point data exchange goes both ways. So if you want you can export all your Sky Dolly locations as Little Navmap CSV and import into Little Navmap as user points (again).

4 Likes

Happy New Year 2023!

Dear all, I wish you a Happy New Year 2023, health to you, your family and friends, and most of all peace to everyone!

Just before Christmas the Sky Dolly downloads crossed the 30’000 download mark. Thank you so much, to each and everyone of you! To clarify: I am not measuring the success of Sky Dolly in download numbers. I develop Sky Dolly for my own needs, in the hope that it might be useful to others, to keep up with “modern C++ development patterns and language features” - and most importantly for the fun of it!

So each comment of encouragement, or even a simple “Sky Dolly does exactly what I need!” means so much to me! So thank you again.

A Bit of History…

Sky Dolly is pretty much exactly 2 years old now - that is, development started with the first “commit”, like:

Commit: 11380a0652d5ab760983d5b007ec82ca398cdd69 [11380a0]
Date: Tuesday, 22. December 2020 13:35:36

The first v0.1 was released shortly thereafter on flightsim.to (end of February 2021).

The first year 2021 mainly focused on adding new SimConnect / recording / replay related features and already introduced a database (“SQLite”) based persistence and other unique features:

  • The “logbook” with automatic flight storage (v0.6)
  • Formation” recording and replay (v0.7)
  • Import/export plugins (v0.8)

the second year - 2022 - mainly focused on architectural aspects, driving forward the “plugin-based architecture” and applying it not only to the connection with the flight simulator (yes, also the communication with MSFS is plugin-based ;)) and the various import/export plugins, but also the “modules”:

  • A module system, with currently three modules (logbook, formation, location), reducing the RAM usage to a minimum (only around 9 MiB when launching Sky Dolly in “minimal UI” mode) (v0.10)
  • “Under the hood” performance improvements by applying "modern C++ coding patterns and features (v0.11)
  • And finally a new “Location” module, allowing to capture, edit and teleport to any location (v0.12), including import/export plugins (v0.13)

And while I certainly take some “shortcuts” every here and there, especially in the “user interface department”, each feature is implemented with “ease of use” in mind. For instance you can simply seek forward and backward at any time, without having to click on “pause” or “stop” first. Or you can start replaying right after recording, without having to “load a file” first. And for pretty much every action exists a keyboard shortcut, including access to all UI elements.

… And a Quick Outlook

As mentioned in various replies to comments on flightsim.to I don’t generally promise any concrete features, let alone making any commitments of any sort. This is simply because Sky Dolly is developed in my spare time, for fun and mostly for my own needs.

While this may sound selfish this is actually a good thing, for two reasons: first, whenever something annoys me, be it “too many mouse clicks required” or a “missing feature” you can be sure it ends up on my internal “to do” list. While this does not guarantee any timely implementation it is “in my own interest” to eventually implement or improve on it.

Second, most “community wishes” are pretty much aligned with my own wishes. Perhaps not with the exact same priorities, but so far I never encountered a suggestion where I had to completely say “no, that totally does not make any sense at all” :slight_smile:

That being said, I can reveal the “top three annoying things” that I intend to fix / improve next:

  • Support (as far as feasible) for 3rd party aircraft (e.g. the A320 by Fenix and the PMDG Boeing 737)
  • Smoother replay, specifically when it comes to “formation flights” (AI aircraft), keyword: “aircraft jitter
  • Properly align imported flight paths on the ground (e.g. when importing real-world flight paths from flightaware.com or flightradar24.com, but also IGC flights etc.)

I made already some developments with regards to the first bullet point, but while I had some success with my ideas in some cases, there were “setbacks” in other cases (notably with the A320 by Fenix - what’s more, the latest 1.0.6 Fenix release makes matters even worse, in that this version does not even properly report the “simulation variables” correctly anymore, specifically “flaps” and “thrust lever position”).

But I am not giving up just yet :wink:

Once those things are implemented there is a plethora of other new features that I have in mind, but again… shhht! :slight_smile:

I will now leave and visit my family and celebrate the 2023 a little bit and again wish you all a very happy 2023 as well!

Best, “Steeler”

P.S. A small bug fix release v0.13.1 has just been released. The most important fix is probably the “typo fix” in the location CSV export in Little Navmap format (“airport” is now spelled correctly, letting Little Navmap properly assign the correct icon to it).

6 Likes

Hi, the freshly released Sky Dolly v0.14 has improved support for 3rd-party aircraft, including gears, flaps and spoilers.

However unfortunately I noticed that the latest Fenix A320 v1.0.6 doesn’t report certain simulation variables anymore, so I did my major testing with an older release v1.0.2 - and even there not everything works as expected, specifically the spoiler handle positon is not reported as expected: only between a range of 0% and something like 33% - and the spoiler handle does seemingly not react at all to the corresponding “set spoiler position” event that I now send.

Anyway, I will re-test the flaps and gears with the latest Fenix 1.0.6 release again and let you know. In fact, I intend to do some thorough tests again with various 3rd-party aircraft and publish my results in some table form later next week or so.

1 Like

For the Big Birds!

Sky Dolly v0.14 “Ethereal Embraer” (v0.14) has just been released. This release focuses on improved 3rd-party aircraft support and tries to improve replay of control surfaces and other controls such as:

  • Elevators, rudder, ailerons
  • Flaps and spoilers
  • Gears
  • Arrestor hooks, wing folding
  • Lights (landing, taxi, …)

Sky Dolly also improves the corresponding animation of AI aircraft (aircraft that are part of a formation flight): flaps, elevators, rudders and ailerons are now also animated, including arrestor hooks, canopies and wing folding.

Question: “Do I have to reload the flight each time before starting replay?”

Answer: “No. Sky Dolly uses a sophisticated test-and-set pattern to set ailerons and flaps, specifically also in cases (e.g. PMDG Boeing 737) where the corresponding flaps handle position variable is only updated in real-time (meaning: not immediatelly, but rather with the time it takes to extend/retract the flaps). As usual you can seek back and forth on the timeline as you want, at any time, and start, stop and restart the replay as you wish.”

Import and export of Little Navmap userpoints has also improved, by supporting the latest Little Navmap 2.8.8 userpoint types.

Adjusting the replay speed now also speeds up (or slows down) the simulation rate accordingly (with simulation rate factors of 0.25, 0.5, 1, 2, 4, 8 and 16, matching closest with the selected replay speed in Sky Dolly).

And if you need to take a coffee during recording, no worries: pressing the pause button during recording now also pauses the actual simulation. “Here’s your coffee, Capt’n!” :slight_smile:

Finally an annyoing issue with “counteracting ailerons, elevators and rudders” has finally been fixed: the root cause seemed to be that the unit “radians per seconds” for “rotation velocity” wasn’t liked by MSFS, especially by those aircraft having a PID controller.

A what?

A “Proportional–Integral–Derivative” controller is a control loop mechanism employing feedback for systems requiring continuously modulated control.

[PID Primer]

The complete changelog is available on github.com .

The following “historically accurate & researched video recreating the final patrol of Baron Manfred von Richthofen (The Red Baron) with 8 aircraft” shows an amazing work of creativity done with Sky Dolly, shared with kind permission from the author simPaul flights:

Sky Dolly is open source.

The latest binaries are available at:

2 Likes

Paint It Black!

Sky Dolly v0.15 “Flamboyant Fokker” (v0.15) has just been released. This release focuses on upgrading several 3rd-party libraries, most importantly the Qt6 framework and as such is a no-new-features release.

Nevertheless this is a huge jump, paving the way for better SQLite support (enabled “math functions”), gRPC & Protobuf. Stuff that gets developers excited, but what is probably of little interest to flight sim enthusiasts :wink:

Internally Sky Dolly is now also using named database connections, laying the foundation for additional import & export plugins - in the Sky Dolly logbook (SQLite) format, that is.

And of course the current Qt 6 framework should iron out some minor quirks that may have been present on Windows 11.

Qt 6 also introduces preliminary dark mode support: this is not yet enabled by default, as it is work in progress in the Qt 6 framework itself. However a sneak preview can be taken by providing some command line arguments.

For the default “Windows” style:

SkyDolly.exe -platform windows:darkmode=2

The “Fusion” style arguably looks currently a bit better:

SkyDolly.exe -platform windows:darkmode=2 -style=fusion

In both cases dark mode needs to be enabled in the Windows (operating system) user settings.

Sky Dolly is open source.

The latest binaries are available at:

2 Likes

For Hollywood Directors: Create Timelapse Videos - With SQL

I agree that this most likely falls under the more “esotheric” category of what you can do with MSFS and Sky Dolly. But it goes to show what you can achieve with a little bit of imagination and creativity.

Abstract

The goal of this little tutorial is to create a 2 minutes long timelapse video with a speedup factor of 16, without having to record 32 minutes of real-time MSFS video footage. After all, the recent Sky Dolly v0.14 now also adjusts the simulation rate upon replay speed changes, so let’s make use of that fact:

In a previous tutorial we have already seen how to open the Sky Dolly logbook with an SQLite database browser like SQLiteBrowser. and an introduction to the most important tables was given.

Preflight Checks

It is best to create a new logbook from within Sky Dolly (CTRL + N) and open this for your experiments. Like this you are not risking to loose any of your recorded flights. However don’t forget to close Sky Dolly before accessing the logbook (= SQLite database) witht the database browser: SQLite databases do not support concurrent write access from different applications.

Programmatically Create A Flight

So we are basically doing the following now:

  • Create a flight
  • Add an aircraft
  • Add two positions with two distinct GPS coordinates and possibly camera movement (pan, rotate, tilt)

Now is the time to open the logbook with your database browser. Once you have done so, execute the following SQL statements.

Flight

Most flight data is optional. So the simplest way to create a flight is:

insert into flight (title, user_aircraft_seq_nr)
values ('LSZH camera pan', 1);

Note that even the title is optional, but it is good to have a descriptive title for later on in Sky Dolly.

The sequence number indicates the user aircraft in the flight (we are going to add the aircraft in a second). In most cases the sequence number equals to 1, but for formation flights (a flight having multiple aircraft this defines the user aircraft the camera is following during replay).

Note that internal IDs are automatically generated, typically by simply incrementing a number. We come to this point in a second.

Aircraft

Next we are going to add our aircraft. The aircraft table references the previous flight table with a so-called foreign key. Essentially this defines the association of the given aircraft with a flight.

So how do we evaluate the ID of the most recently inserted flight? Knowing that those IDs are automatically incremented (sic!) we can simply execute the following query:

select max(id) from flight;

This returns the automatically generated ID of the most recent flight. Good. We can nest this query into the following aircraft insert statement:

insert into aircraft (flight_id, seq_nr, type)
values ((select max(id) from flight), 1, 'Asobo XCub');

Now the type must exactly match with any existing aircraft_type. You can list all available aircraft types with the following query, in alphabetical order:

select * from aircraft_type
order by type;

Note that every Sky Dolly logbook comes with the default aircraft types that come “out of the box” with MSFS (including the premium aircraft). Otherwise this table is automatically populated with every new (3rd party) aircraft that is used for recording.

In fact, the aircraft type in this example - “Asobo XCub” - is not that important, because we can choose any user aircraft for replay in MSFS later on. But in any case we must satisfy the foreign key validation.

Camera Pan Positions

We want to create a simple camera pan from one to another position. Like any good filmmaker we need to create a room plan: we do we want to setup the camera? Where should it point to? Where is the action going to be?

Of course we think big and use any given world map or flight planning tool to determine our desired GPS coordinates and altitudes.

Once we have those we do:

-- Pan from 47.450681, 8.549628 at 1417.0 + 150 feet altitude (about 50 metres above ground)...
insert into position (aircraft_id, timestamp, latitude, longitude, altitude, pitch, bank, true_heading)
values ((select max(id) from aircraft), 0, 47.450681, 8.549628, 1417.0 + 150, 0, 0, 340);

-- ...  to 47.454667, 8.571006, within 32 * 60 * 1000 [ms] = 32 minutes
insert into position (aircraft_id, timestamp, latitude, longitude, altitude, pitch, bank, true_heading)
values ((select max(id) from aircraft), 32 * 60 * 1000, 47.454667, 8.571006, 1417.0 + 150, 0, 0, 15);

The nested “select max(id)” does the same as we have already seen for the relation aircraft → flight: it associates each position data with the most recently inserted aircraft.

And that’s it: that is all there is to insert a minimal flight into a Sky Dolly logbook. Of course our camera dolly - Sky Dolly :wink: - is self-propelled and does not need any engine data… so we already have a flight from point A to B.

Don’t forget to commit your data (click the “Write Changes” button) before opening the logbook with Sky Dolly again. You can now load this flight, set the replay speed to 16 and enjoy your timelapse.

Pro tip: if you create a custom camera position, like in the front nose of the aircraft pointing forward, you can have your camera rotate with the aircraft. So the previous true heading changes that we inserted take effect. But this is left as an exercise for the dear reader :wink:

Go Crazy

Now it is up to you to play with your creativity, for instance:

  • Create camera paths with multiple points (they will be smoothly interpolated with Hermite spline curves - as the segment length can be tricky to predict you may need to fiddle around a little bit with the timestamps of the in-between positions, in order to get a smooth velocity as well.
  • Change also pitch, bank and altitude
  • Think big: pan over the Himalya and increase the timelapse factor in your video editing software (= increase the duration of the panning) (*)

(*) Note: MSFS’ maximum simulation rate is 16. So if you want to have a factor of 32 you need to double the duration of the flight and then add a speedup factor of 2x in your video editing software to achieve a 32x timelapse

Happy filming :slight_smile:

This is the complete SQL, ready to be copy & pasted into your database browser:

insert into flight (title, user_aircraft_seq_nr)
values ('LSZH camera pan', 1);

insert into aircraft (flight_id, seq_nr, type)
values ((select max(id) from flight), 1, 'Asobo XCub');

-- Pan from 47.450681, 8.549628 at 1417.0 + 150 feet altitude (about 50 metres above ground)...
insert into position (aircraft_id, timestamp, latitude, longitude, altitude, pitch, bank, true_heading)
values ((select max(id) from aircraft), 0, 47.450681, 8.549628, 1417.0 + 150, 0, 0, 340);

-- ...  to 47.454667, 8.571006, within 32 * 60 * 1000 [ms] = 32 minutes
insert into position (aircraft_id, timestamp, latitude, longitude, altitude, pitch, bank, true_heading)
values ((select max(id) from aircraft), 32 * 60 * 1000, 47.454667, 8.571006, 1417.0 + 150, 0, 0, 15);

commit;
1 Like

:warning::warning::warning: IMPORTANT PATCH RELEASE: 0.15.1 :warning::warning::warning:

Previous patch releases (< 0.15.1) like the 0.13.1 and the previous 0.15.0 would generate a logbook backup each time the application was started (and if the logbook option “Before migration of an older logbook” is enabled, which is the case by default).

This has been fixed with the 0.15.1 patch relase.

How to reclaim storage space:

  • In Sky Dolly: File | Logbook Settings… | Show
  • In File Explorer: Open the Backups folder
  • Delete any logbook backups that are not required anymore (the file names contain the backup date)

I am terribly sorry for this inconvenience :disappointed:

So what happened? For the interested readers and for full transparency:

  • The recent v0.15 release had a migration step with a repeated UUID, making this universally unique identifier, well… not so unique
  • This caused the logbook (database) version to be reset to the previous v0.14
  • So upon each application launch - and if the option "generate backup before migration is enabled, which is the case by default - a backup would be generated, taking up previous storage space, as the logbook was deemed to be from a previous version (v0.14)

After having fixed this little glitch I detected a more fundamental problem: I (intentionally) never increase the patch version number of the logbook (the third digit in the version number, e.g. v0.13.1), so:

  • The comparison between the current application (e.g. v0.13.1) and database (e.g. v0.13.0) version would always result in the database version (e.g. v0.13.0) being “from an earlier version”, so
  • The backup was still being done each time the application was started
  • Doh!

The fix for the later is to ignore the patch version number during version comparison.

All this is now fixed in the current v0.15.1 which is available here:

Source and binaries are also available here:

2 Likes

Since it went live, I’ve been almost exclusively flying the PMDG 737-700.

I downloaded Sky Dolly earlier this week and could find some time to play with it yesterday. First of all, congratulations @Steeler2340, this is an incredible tool and - at least for my use case - much, much better than the embedded MSFS replay tool. Thank you for investing your time and talent to create it and share with the community. We are all in debt to you. :slight_smile: .

During my tests I noticed something for which I would like to check if I’m the only one with this issue or not. The behavior is reproducible 100% of the time on my end.

Here is my flow:

  1. Few minutes before landing, I start recording
  2. Right after leaving the runway and STOPPING any plane movement, I stop recording
  3. I drag the slider back to a point where the plane is very close (2 to 3 seconds) to the touchdown moment
  4. Play
  5. Pause
  6. Set camera so I can see my landing from the runway with a stationary camera (Drone with ‘Drone Follow Mode’ OFF and ‘Drone Lock Mode’ ON)
  7. Drag the slider back a bit more (until the plane is +/- 1 minute prior to the touchdown moment)
  8. Unpause and enjoy :slight_smile:
  9. Usually, after touchdown, I drag the slider back until the plane is +/- 1 minute prior to the touchdown moment, let it play, and move the drone to see the landing from a different view point. I use to do this multiple times.
  10. When done, I just drag the slider to the end or wait till it gets there

This all works superbly well. However, when trying to resume taxi, the plane seems to be stuck on the ground. I have checked everything to the best of my knowledge and I don’t see anything that could be causing this like auto or parking brakes applied for example. The plane will only move when N1 is around 80%. At that time, something ‘unlocks’ the plane and - as you can expect - it moves forward as a rocket.

I have tried different things without success:

  1. After leaving the runway, stopping the plane, and before stopping recording, I confirmed the brake (be it auto or parking) was NOT applied.
  2. I completely ignored step 2, that is, I went to step 3 when the plane was still on the runway moving at around 30kts or so. Much better this time because I can keep the plane moving by applying just a bit of thrust (the normal condition). However, if for whatever reason I have to stop the plane during taxi, I cannot make it move anymore unless I apply 80% N1.

I can be wrong here (as this is frequently the case :slight_smile: ) but it seems to me Sky Dolly is not ‘restoring’ something when it is done replying the sequence. At least in my setup.

Am I the only one experiencing this?

Any help is appreciated.

1 Like

I can’t provide support here for specific issues, including issues related to certain 3rd-party aircraft.

However I took the liberty to create an issue for you:

This is also the preferred location when you have an in-depth issue or question, as you can easily provide more information there (free github.com account required though).

In general I can say that Sky Dolly records and replays exactly those “simulation variables” that you see in the corresponding “Simulation Variables” dialog (press key F). However those are “standard SimConnect variables”.

In case the aircraft uses custom logic to e.g. start/stop the engine then it might be that “something gets stuck” (in the aircraft simulation logic). This is very much possible - but kind of outside the reach of Sky Dolly (or any replay software, for that matter).

For Flight Analysts - The Plot Thickens

In the first tutorial of this series we have seen the basic steps how to connect a databbase browser such as SQLiteBrowser with the logbook. In a previous tutorial we have learnt how to create new flights from scratch, by inserting them via SQL.

In this tutorial we are looking at how to analyse - to select - existing flights and do some “data mining”.

Export Plugins

Before we begin: Sky Dolly already provides many export plugins, for various formats such as GeoJSON and KML. Specifically when exporting your flights in CSV (comma-separated values) you get your flight data in a text-based format that can be imported and processed with many applications, including spreadsheet editors such as Excel and LibreOffice Calc.

Sky Dolly supports the following CSV flavours:

  • Sky Dolly: the complete flight data, but soon to be deprecated and replaced by a much more powerful export format
  • FlightRadar24: the CSV format as used by flightradar24.com - essentially containing aircraft position, heading and speed
  • Position and attitude: essentially like the FlightRadar24 format, but including pitch and bank angles

But what if you wanted more data? To do some basic data aggregation and calcuations before exporting? What if none of the export formats provides the data that you are looking for?

Enter the power of SQL and the open logbook format of Sky Dolly…

Data-Mining Your Logbook

At this point we assume that you have already established a connection with your logbook (= the database). If you are unsure have a look at the first tutorial in this series.

Hint: When trying to open a logbook don’t forget to change the file selection dialog filter to All Files (*).

In the following examples we will be using SQLiteBrowser, but any similar SQLite database editor will do, including the SQLite command shell itself, at least as far as the SQL queries themselves are concerned.

Selecting a Flight

All following queries usually involve selecting some given flight from the logbook.

Remember:

  • The flight table contains basic flight information such as flight conditions and start- and end times (of the first recorded aircraft) as well as the sequence number of the user aircraft
  • The aircraft table contains basic aircraft information and the sequence number of each aircraft: a flight may have multiple aircraft (“formation flight”), but always at least one.
  • Finally the position table contains the recorded coordinates, velocity and attitude (*), including a timestamp (in milliseconds). Each position sample belongs to an aircraft.

There exists other tables such as engine, primary_flight_controls and others: they are on the same hierarchy level as the position table and essentially work the same.

(*) This is subject to change in some future Sky Dolly release, but the idea will remain the same

All this leads us without further ado to your first “select flight” queries. The most easiest query is simply selecting a flight by its given ID:

-- Get specific flight given by its ID
select f.id, f.creation_time, f.title
from flight f
where f.id = 63

where the value 63 needs to be replaced by an existing flight ID. In fact, the logbook in Sky Dolly shows the flight IDs, making it super-simple to select the desired flight data:

We can also query a flight recorded on a given date:

-- Get latest flight on a given date
select f.id, f.creation_time, f.title
from flight f
where strftime('%Y-%m-%d', f.creation_time) = '2021-05-26'
order by f.creation_time desc
limit 1

Here we make use of the SQLite-specific built-in function strftime that formats the date & time into a convenient ‘YYYY-mm-dd’ text format.

As there might be multiple flights on the given date we order the result set in descending order (“order by … desc”) by creation_time and limit the result set to 1 (“limit 1”).

Of course the actual date value ‘2021-05-26’ needs to be replaced again with the desired date.

Or we might simply want to select the most recent recorded flight from the logbook:

-- Get most recent flight of the logbook
select f.id, f.creation_time, f.title
from flight f
order by f.creation_time desc
limit 1

Now that we know how to select a given flight let’s step it up a little with some more interesting queries that join the flight table with other tables…

Creating Your Custom Flight Data Query

Explaining the various SQL table join operations would go far beyond of what I can show here. However excellent tutorials about SQL do exist, for example:

The following example query shows how you can select your custom data and make it available as CSV. We will see that we can also create some basic charts easily with SQLiteBrowser itself. So fasten your seatbelts…

select f.id as flight_id,
       f.start_zulu_sim_time,
       f.end_zulu_sim_time,
       a.type,
       a.flight_number,
       p.timestamp,
       p.latitude,
       p.longitude,
       p.altitude,
       p.pitch,
       p.bank,
       p.true_heading,
       p.velocity_z * 0.5924838012959 as speed_in_knots
from   position p
join   aircraft a
on     p.aircraft_id = a.id
join   flight f
on     a.flight_id = f.id
and    a.seq_nr = 1
-- Select the above data from the most recent flight in the logbook
where  f.id = (select ff.id
               from flight ff
               order by creation_time desc
               limit 1)

Wow, that escalated quickly :wink: Let’s analyse what we just did here:

  • We select the desired data columns like flight ID, aircraft type (e.g. “Asobo A320neo” etc.), position and attitude from the joined tables flight, aircraft and position
  • The velocity_z contains the aircraft velocity in Z direction that corresponds to the “forward” direction, in feet / seconds. We convert it to knots, to illustrate that we can also transform the data with basic mathematical functions (*)
  • We select the position data from the first (“seq_nr = 1”) aircraft in the flight
  • We can also nest SQL queries: here we select the ID of the last recorded flight in the logbook (as shown before)

(*) SQlite provides a whole set of math functions: Built-In Mathematical SQL Functions

Exporting to CSV

Exporting the result set of the above query - any query result for that matter - is easy with SQLiteBrowser:

  • Simply select all result rows (CTRL + A) and
  • Select Copy with Headers

Now open your favourite text editor and create a new text file. In this example I use Visual Studio Code, as it provides a wast amount of plugins, including editing CSV data in table format and even visualising GPS coordinates (in CSV format) on a world map.

Now paste (CTRL + V) the previously copied data and save your newly created text file with the *.CSV file extension. Depending on your editor and installed extension plugins this might enable syntax highlighting for CSV and enable alternative edit modes such as a CSV table editor:

Hint: Enable the Has header read option.

Visualising Data

Even with SQLiteBrowser we can already create some basic charts. But let’s have a look at some more queries first in order to gather some interesting data to visualise.

Flight Statistics

The following query evaluates our top 10 favourite aircraft types, according to their number of flights:

-- Select the top 10 aircraft types (number of flights)
select type        as AircraftType,
       count(type) as Count
from   aircraft a
group by type
order by count(type) desc
limit 10

Note that we can rename colums with “as AircractType” or “as Count”, for better readability in the result set. In this query we also group result rows according to some given criteria: here we group by the aircraft type.

We are also using a so-called aggreate SQL function here for the first time, the count function. So in this example we simply count the number of used aircraft types, order the result set in descending order and limit the result set to 10 rows.

Example result:

AircraftType Count
Pitts Asobo 46
Asobo Savage Cub 17
Fiat-Aeritalia G91 R1 AMI PLAIN 13
Airbus A320 Neo Asobo 12
Supermarine Spitfire LF Mk IXc FlyingIron G-IRTY 9
Supermarine Spitfire Mk IX RAF - 126 Sqn ML214 ‘Muscat’ 6
Extra 330 Asobo 6
DV20 Asobo 5
Airbus A320 Neo FlyByWire 5
Boeing 747-8i Asobo 4

Likewise we can create a top 10 flight list according to flight duration:

-- Select the top 10 *flights* (flight duration in minutes)
select f.id, f.title, a.type, max(p.timestamp) / 1000 / 60 as minutes
from   aircraft a
join   position p
on     p.aircraft_id = a.id
join   flight f
on     a.flight_id = f.id
group by p.aircraft_id
order by minutes desc
limit 10 

Example result:

id title type minutes
12 Flight Zurich to Geneva Airbus A320 Neo FlyByWire 53
33 New Zealand Tour (Mount Doom) T-45C Goshawk TW-1 49
34 Tokyo Drift with Crash Landing Boeing 747-8i Asobo 47
14 Sion nach Samedan Fiat-Aeritalia G91 38
29 Cliffs of Dover Supermarine Spitfire 25
28 Rio de Janeiro Sightseeing Icon A5 Asobo 22
11 Take-Off II from Zurich with failed start Airbus A320 Neo FlyByWire 16
23 Paris Arc de Triomphe (Crash) Extra 330 Asobo 16
10 Take-Off from Zurich Airbus A320 Neo FlyByWire 15
13 Landing in Geneva Airbus A320 Neo FlyByWire 12

By nesting the above query into the following query we can create our own top 10 aircraft type list, according to the total duration (in minutes) flown with each aircraft type:

-- Select the top 10 aircraft types (total flight time)
select a.type, sum(a.minutes) as total_minutes
from (select aa.type, max(pp.timestamp) / 1000 / 60 as minutes
      from   aircraft aa
      join   position pp
      on     pp.aircraft_id = aa.id
      group by pp.aircraft_id) a
group by a.type
order by total_minutes desc
limit 10

Example result:

type total_minutes
Airbus A320 Neo FlyByWire 106
Fiat-Aeritalia G91 84
Boeing 747-8i Asobo 65
Pitts Asobo 59
T-45C Goshawk TW-1 49
Supermarine Spitfire 33
Extra 330 Asobo 25
Icon A5 Asobo 22
Asobo Savage Cub 22
Supermarine Spitfire ‘Muscat’ 15

Disclaimer: I am not affiliated with nor do I endorse any of the above aircraft types. All the presented example results are simply to be considered as some “random snapshot” of an older logbook of mine and are meant to be for illustration purposes only.

The Plot Thickens…

The SQLiteBrowser offers a simple Plot module that allows to visualise the current result set in an X/Y plot diagram.

We can easily visualise our previous top 10 favourite aircraft type list, by simply opening the Plot tab and selecting the desired columns for the X and Y axis, including bar chars (in case the X axis values are of type text):

Likewise we can go back to our intial custom position export example and plot the altitude (Y-axis) for each given timestamp (X-axis):

Those plots can then be saved in various formats, including PDF, JPEG or PNG.

Summary

We have seen that:

  • With SQL we can create our own custom reports and extract the data that we need, including basic math calculations
  • We created several “top 10” statistics, including “your favourite aircraft type”
  • We can easily export our custom SQL result sets as CSV data
  • We can further process & visualise it in external tools, including basic plot and bar charts in SQLiteBrowser itself

Now it is up to you to come up with your own interesting statistics and logbook visualisations. With the above presented techniques and tools there are almost no limits of what you can do.

If you have any interesting SQL query feel free to share it with others here :slight_smile:

That’s not a big problem now.
And I don’t want to come off as a teacher either.
But SkyDolly reverses the action of the aileron.
I’ve noticed this on two planes now and I suspect it’s the same on all of them.
When I fly in the sim everything is ok, in the replay the aileron works upside down.

Just for information :wink:

Uhm… exactly the aileron reversal that occurred with aircraft that have a „PID controller“ like the stock Asobo A320neo and F/A-18 should have been fixed with the v0.14 release. By the way the reversal also affected the rudder and elevators for those aircraft.

So when you say „now“:

  • Is this a new aileron reversal behaviour that worked correctly before the v0.14?
  • Does it also affect rudder and elevators, or really only the ailerons?
  • Which aircraft exactly are we talking about?

I am asking because I thought that I had thoroughly paid attention to all aileron, rudder and elevators movements, with the aircraft that I tested with:

  • Asobo A320neo
  • PMDG 737-800
  • Fenix A320
  • Asobo F/A-18

But yes, in general I did change the implementation of those control surfaces: instead of sending back the recorded „simulation variables“ (that seem to be ignored by certain 3rd-party aircraft) I am now sending back „events“ (like those that would come from your hardware joystick or yoke) - and the sign of the previously recorded „simulation variables“ had indeed to be reversed, as it seems!

Hence it is very well possible that some (?) aircraft do react differently than others to those „events“, at least during replay… in any case, if you could tell me the exact aircraft that you were using that would already greatly limit the „search space / uncertainty“ for me :slight_smile:

I only noticed it yesterday, which is why I’ve only seen it on two planes.
I’ll investigate this further tonight and then I’ll post you an exact list.

1 Like

I have now examined it more closely. Now I’m 100% sure it’s a FBW problem.
Since I’m not a bus driver, I can only say that for the military jets.

I can say that as long as there is no FBW there are no problems. All planes with FBW cause problems. But only in the air when the FBW is active. Before starting, on the ground, everything works normally. After takeoff, in the air, the aileron reverses polarity.
Elevator and rudder are not affected. Unless the elevator is mixed in to assist the aileron. Then the effect is reversed here too.

But, as I said, only in the air, not on the ground.

All aircraft from IndiaFoxTecho, DC Designs, SC Designs are affected.
An exception is the F-22 from TopMachStudios, where the control surfaces don’t move at all.

I hope this helps.

In the meantime I have also tested the F-18 from Asobo.
It also has the problem described.
Just like the Gripen from Deimos.
It remains: FBW when active, on all aircraft.