QGroundControl vs Mavlink Log Downloading Speeds


I have a pixhawk that is connected to my laptop using usb, and I want to download ulog log files from the pixhawk to the laptop.

I started to make a script that uses mavlink to download pixhawk ulogs by firstusing the LOG_REQUEST_LIST to first fetch the list of all logs, and for each LOG_ENTRY, I send a LOG_REQUEST_DATA message to fetch the data synchronously for all logs. I noticed that the max download speed that I get for downloading the logs using mavlink through my script is ~450kbps while QGroundControl is able to reach ~800kbps when downloading logs.

How is QGroundControl able to attain these speeds, and why cannot it be attained through mavlink directly? Is there any way to make these speeds faster?

I have tested 3 different methods for downloading a 10.3mb log file from pixhawk to laptop and here are my results:

Qgroundcontrol - ~880kb/s took 12.78 seconds
Script using Mavlink - 435 kb/s took 24.81 seconds
Script using MavFTP- 376.49 kb/s took ~28 seconds

So im not entirely sure how QGroundControl is able to achieve those speeds.

The QGC implementation has been optimized quite a bit to reach those speeds.

Without seeing your implementation, I can’t tell you why it is slower though.