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.

Building Replay

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 build/linux/tools/Replay.

Using Replay

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 -r400 and ignore floating point errors with “–no-fpe”

This will produce an output file 1.BIN in the folder “./logs”

Use mavgraph.py to graph the data

mavgraph.py MyLogFile.BIN GPA.SAcc NKF4[0].SV

This example graphs the changes in speed innovation of the EKF against the GPS speed measurement accuracy

Changing parameters

Simulation parameters may be changed before replaying a log using the option: -parm NAME=VALUE (this sets the parameter NAME to VALUE). 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 I gate value to 1,000, run the command:

build/linux/tools/Replay -- --no-fpe --parm EK2_VEL_I_GATE=1000 log_1.bin