MAVGAnalysis is a new tool from the PX4 team to give real-time data analytics without overcomplicating a GCS. From the repository:

This JavaFx based tool enables PX4 Users to record and analyse data published via UDP during flight or based on PX4Logs. It is not intended to replace the QGC. Runnable on OS X, Ubuntu and Windows.

Any feedback, comments and contributions are very welcome.

Status: Last updated 23/06/2016


  • Realtime data acquisition (50ms sampling)
  • Timechart annotated by messages (in 10secs framing)
  • Trigger recording manually or by selectable flight-mode/state changes
  • Choosable stop-recording delay
  • Display of key-figures during and after recording (with 'Replay')
  • Display of basic vehicle information (online), like mode, battery status, messages and sensor availability
  • XY Analysis for selected key-figures
  • MAVLink inspector
  • Easy to use parameter editor
  • Map viewer of global position and raw gps data with option to record path (cached)
  • Import of selected key-figures from PX4Log (file or last log from device via WiFi)
  • Save and load of collected data
  • FrSky Taranis USB supported in SITL
  • Low latency MJPEG based video stream display based on uv4l (recording and replay in preparation)


  • requires Java 8 JRE
  • A companion proxy (either MAVComm or MAVROS, not required for PIXRacer)
  • Video streaming requires uv4l running on companion

How to build on OSX(other platforms may need adjustments inbuild.xml):

How to start (all platforms):

  • Goto directory /dist

  • Start either UDP with java -jar MAVGAnalysis.jar --peerAddress=

    (PX4 standard ports used, replace IP with yours)

    or java -jar MAVGAnalysis.jar --peerAddress= for SITL (jMAVSim)

    or just java -jar MAVGAnalysis.jarfor a basic demo. ​

  • Open demo_data.mgc, import PX4Log file or collect data directly from your vehicle
  • For video (mjpeg), setup uv4l at port 8080 on your companion with : ​ uv4l --auto-video_nr --sched-rr --mem-lock --driver uvc --server-option '--port=8080'

How to deploy on OSX:

  • Modify build.xml to adjust peer property.
  • Run ant_deploy


  • Limited to one device (MAVLink-ID '1')
  • Currently does not support USB or any serial connection (should be easy to add, so feel free to implement it)
  • PX4Log keyfigure mapping not complete (let me know, which I should add)

Note for developers:

MAVGAnalysis depends heavily on for MAVLink parsing. ​

Views: 2493

Comment by vorney thomas on June 23, 2016 at 4:07am

good tool kits for developer

Comment by JB on June 23, 2016 at 7:25am

Looks good! Will be useful for sure. 

I also agree that there should be a GUI for mavproxy n co.

Comment by Kelly Foster on June 23, 2016 at 9:08am

Looks very appealing to this ArduPlane noob who is just learning flash log analysis in MP.  Agree with James, it would be great if MP could be enhanced in this direction.


Comment by Alexandre Mainardi (Nuvem UAV) on June 23, 2016 at 10:36am

Very useful tool! Thanks PX4 team!

Comment by Alexandru Evian on June 29, 2016 at 4:26am

Looks nice, but seems like it does not work properly with Ardupilot logs.
Also, I really don't understand why it is not a part of QGC, "without overcomplicating a GCS" sound like a weird reason for me. Overcomplication may as well be a bunch of separate tools written using different technologies.

Comment by Trapti Khandelwal on October 5, 2017 at 1:16am


Base code : MAVComm for MAVLink Parser

I am trying to connect to SITL with following details:

comm = MAVUdpCommNIO3.getInstance(model, "",5760, 14550);
proxy = new MAVUdpProxyNIO3("",5501,"",14556,comm);
peerAddress = "";
System.out.println("Proxy Controller loaded (SITL) ");

It got connected with SITL - ardupilot/Arduplane by running

Trying to give command in following manner:
msg_msp_status msg = new msg_msp_status(2,1);
msg.load = (int)(osBean.getSystemLoadAverage()*100);
msg.autopilot_mode = control.getCurrentModel().sys.autopilot;
msg.memory = (int)(mxBean.getHeapMemoryUsage().getUsed() * 100 /mxBean.getHeapMemoryUsage().getMax());
msg.com_error = control.getErrorCount();
msg.uptime_ms = System.currentTimeMillis() - tms;
msg.status = control.getCurrentModel().sys.getStatus();
msg.unix_time_us = control.getCurrentModel().sys.getSynchronizedPX4Time_us();

It gets connected with ArduPlane and mode changes from CIRCLE - RTL
Output in SITL:
APM: Ground start complete
online system 1
APM: ArduPlane V3.8.2-dev (a629bb7f)
APM: Throttle failsafe on 767
APM: Failsafe. Short event on,
APM: Flight mode = 1
Flight battery 100 percent
Received 902 parameters
Saved 902 parameters to mav.parm
CIRCLE> APM: Airspeed sensor calibrated
APM: GPS 1: detected as u-blox at 115200 baud
APM: EKF2 IMU0 initial yaw alignment complete
APM: EKF2 IMU1 initial yaw alignment complete
APM: Failsafe. Long event on,
APM: Flight mode = 11
APM: EKF2 IMU0 tilt alignment complete
APM: EKF2 IMU1 tilt alignment complete
APM: EKF2 IMU0 Origin set to GPS
APM: EKF2 IMU1 Origin set to GPS
APM: EKF2 IMU0 is using GPS

I am not sure whether it is working correctly. Kindly confirm

Also trying same steps with ArduCopter (running in ArduCopter) -- There is no change in mode or vehicle state.

Please suggest steps to connect MAVComm in SITL with ArduCopter. Kindly let me know if any configurational changes are required while using MAVComm with SITL.

Thanks in Advance.


You need to be a member of DIY Drones to add comments!

Join DIY Drones

© 2017   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service