3D Robotics

Real-time data analysis tool for PX4

3689694190?profile=originalMAVGAnalysis 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 https://github.com/ecmnet/MAVComm for MAVLink parsing. ​


E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones


  • Awesome UI design.

  • Awesome UI design.

  • MAVGCL updated to version 0.7

  • Hello,

    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 sim_vehicle.py.

    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
    Mode CIRCLE
    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: Init HOME
    APM: Failsafe. Long event on,
    APM: Flight mode = 11
    RTL> Mode RTL
    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 sim_vehicle.py 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.

  • 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.

  • Moderator

    Very useful tool! Thanks PX4 team!

  • 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.


  • Looks good! Will be useful for sure. 

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

  • good tool kits for developer

This reply was deleted.