Testing with Replay¶
Replay is a program that takes a dataflash log file and replays it through the latest master code allowing a sort of simulation based on real data. This can be useful when trying to recreate the exact situation which produces a bug or to test EKF tuning parameters to see how they would have performed in the same situation. Replay only runs on Linux/Ubuntu and only using dataflash logs from a high speed CPU such as the PX4/Pixhawk running a version of Copter/Plane/Rover from May 2014 or later (i.e. AC3.2-dev or higher).
It is recommended that if a problem is reproducible that the dataflash log be generated with both the LOG_REPLAY and LOG_DISARMED parameters set to 1.
Dataflash log messages required for Replay¶
If LOG_REPLAY is not set, the following dataflash messages must be enabled: AHRS2, BARO, EKF1, EKF2, EKF3, EKF4, GPS, IMU, IMU2, MAG, MAG2.
On your Linux or Ubuntu machine, from the root directory of an ArduPilot repository:
./waf configure --board=linux ./waf build --target=tools/Replay
You may need to install sudo apt-get install pkg-config
This will create a file called
Display the Replay help instructions:
build/linux/tools/Replay -- --help
Run a log through Replay to generate the plot and EKF data files:
build/linux/tools/Replay -- MyLogFile.BIN
You may need to explicitly set the loop rate with
This will produce six output files: plot.dat, plot2.dat, EKF1.dat, EKF2.dat, EKF3.dat, EKF4.dat
Look at the raw data to see which values are available to be plotted:
less plot.dat (you can replace
plot.dat with any of the other
six files produced)
Use the simple plotit.sh script to graph some data. Below is the command to compare the EKF calculated altitude with the older Inertial Nav calculated altitude and the flight’s actual altitude.
./Tools/Replay/plotit.sh EKF.Alt INAV.Alt FLIGHT.Alt
Use the more complex mavgraph.py to graph the data
mavgraph.py MyLogFile.BIN EKF1.PN NTUN.PosX*0.01
This example compares the EKF estimated North-South position from home vs the older Inertial Nav estimated position. See image at the top of this page for the resulting graph.
Simulation parameters may be changed before replaying a log using the option:
-pNAME=VALUE (this sets the parameter
The parameters which may be edited are those listed by running the :ref:`param show` command in SITL <setting-up-sitl-on-linux>.
For example, to change the EKF velocity delay parameter from 220ms to 400ms, run the command:
./build/linux/tools/Replay -- -pEKF_VEL_DELAY=400 MyLogFile.Bin