mirror of https://github.com/ArduPilot/ardupilot
Replay: added --logmatch option
match logging rate to input log
This commit is contained in:
parent
679b43efc9
commit
7abaa75653
|
@ -71,7 +71,7 @@ void LR_MsgHandler_ARSP::process_message(uint8_t *msg)
|
||||||
require_field_float(msg, "Temp"));
|
require_field_float(msg, "Temp"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void LR_MsgHandler_FRAM::process_message(uint8_t *msg)
|
void LR_MsgHandler_NKF1::process_message(uint8_t *msg)
|
||||||
{
|
{
|
||||||
wait_timestamp_from_msg(msg);
|
wait_timestamp_from_msg(msg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,10 +69,10 @@ private:
|
||||||
AP_Airspeed &airspeed;
|
AP_Airspeed &airspeed;
|
||||||
};
|
};
|
||||||
|
|
||||||
class LR_MsgHandler_FRAM : public LR_MsgHandler
|
class LR_MsgHandler_NKF1 : public LR_MsgHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LR_MsgHandler_FRAM(log_Format &_f, DataFlash_Class &_dataflash,
|
LR_MsgHandler_NKF1(log_Format &_f, DataFlash_Class &_dataflash,
|
||||||
uint64_t &_last_timestamp_usec) :
|
uint64_t &_last_timestamp_usec) :
|
||||||
LR_MsgHandler(_f, _dataflash, _last_timestamp_usec) { };
|
LR_MsgHandler(_f, _dataflash, _last_timestamp_usec) { };
|
||||||
|
|
||||||
|
|
|
@ -255,9 +255,9 @@ bool LogReader::handle_log_format_msg(const struct log_Format &f)
|
||||||
msgparser[f.type] = new LR_MsgHandler_ARSP(formats[f.type], dataflash,
|
msgparser[f.type] = new LR_MsgHandler_ARSP(formats[f.type], dataflash,
|
||||||
last_timestamp_usec,
|
last_timestamp_usec,
|
||||||
airspeed);
|
airspeed);
|
||||||
} else if (streq(name, "FRAM")) {
|
} else if (streq(name, "NKF1")) {
|
||||||
msgparser[f.type] = new LR_MsgHandler_FRAM(formats[f.type], dataflash,
|
msgparser[f.type] = new LR_MsgHandler_NKF1(formats[f.type], dataflash,
|
||||||
last_timestamp_usec);
|
last_timestamp_usec);
|
||||||
} else if (streq(name, "CHEK")) {
|
} else if (streq(name, "CHEK")) {
|
||||||
msgparser[f.type] = new LR_MsgHandler_CHEK(formats[f.type], dataflash,
|
msgparser[f.type] = new LR_MsgHandler_CHEK(formats[f.type], dataflash,
|
||||||
last_timestamp_usec,
|
last_timestamp_usec,
|
||||||
|
|
|
@ -263,6 +263,7 @@ private:
|
||||||
float tolerance_vel = 2;
|
float tolerance_vel = 2;
|
||||||
const char **nottypes = NULL;
|
const char **nottypes = NULL;
|
||||||
uint16_t downsample = 0;
|
uint16_t downsample = 0;
|
||||||
|
bool logmatch = false;
|
||||||
uint32_t output_counter = 0;
|
uint32_t output_counter = 0;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
|
@ -288,6 +289,7 @@ private:
|
||||||
void usage(void);
|
void usage(void);
|
||||||
void set_user_parameters(void);
|
void set_user_parameters(void);
|
||||||
void read_sensors(const char *type);
|
void read_sensors(const char *type);
|
||||||
|
void write_ekf_logs(void);
|
||||||
void log_check_generate();
|
void log_check_generate();
|
||||||
void log_check_solution();
|
void log_check_solution();
|
||||||
bool show_error(const char *text, float max_error, float tolerance);
|
bool show_error(const char *text, float max_error, float tolerance);
|
||||||
|
@ -313,6 +315,7 @@ void Replay::usage(void)
|
||||||
::printf("\t--tolerance-vel tolerance for velocity in meters/second\n");
|
::printf("\t--tolerance-vel tolerance for velocity in meters/second\n");
|
||||||
::printf("\t--nottypes list of msg types not to output, comma separated\n");
|
::printf("\t--nottypes list of msg types not to output, comma separated\n");
|
||||||
::printf("\t--downsample downsampling rate for output\n");
|
::printf("\t--downsample downsampling rate for output\n");
|
||||||
|
::printf("\t--logmatch match logging rate to source\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -323,7 +326,8 @@ enum {
|
||||||
OPT_TOLERANCE_POS,
|
OPT_TOLERANCE_POS,
|
||||||
OPT_TOLERANCE_VEL,
|
OPT_TOLERANCE_VEL,
|
||||||
OPT_NOTTYPES,
|
OPT_NOTTYPES,
|
||||||
OPT_DOWNSAMPLE
|
OPT_DOWNSAMPLE,
|
||||||
|
OPT_LOGMATCH
|
||||||
};
|
};
|
||||||
|
|
||||||
void Replay::flush_dataflash(void) {
|
void Replay::flush_dataflash(void) {
|
||||||
|
@ -375,6 +379,7 @@ void Replay::_parse_command_line(uint8_t argc, char * const argv[])
|
||||||
{"tolerance-vel", true, 0, OPT_TOLERANCE_VEL},
|
{"tolerance-vel", true, 0, OPT_TOLERANCE_VEL},
|
||||||
{"nottypes", true, 0, OPT_NOTTYPES},
|
{"nottypes", true, 0, OPT_NOTTYPES},
|
||||||
{"downsample", true, 0, OPT_DOWNSAMPLE},
|
{"downsample", true, 0, OPT_DOWNSAMPLE},
|
||||||
|
{"logmatch", false, 0, OPT_LOGMATCH},
|
||||||
{0, false, 0, 0}
|
{0, false, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -445,6 +450,10 @@ void Replay::_parse_command_line(uint8_t argc, char * const argv[])
|
||||||
downsample = atoi(gopt.optarg);
|
downsample = atoi(gopt.optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OPT_LOGMATCH:
|
||||||
|
logmatch = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'h':
|
case 'h':
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
|
@ -694,6 +703,22 @@ void Replay::set_user_parameters(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
write out EKF log messages
|
||||||
|
*/
|
||||||
|
void Replay::write_ekf_logs(void)
|
||||||
|
{
|
||||||
|
if (!LogReader::in_list("EKF", nottypes)) {
|
||||||
|
_vehicle.dataflash.Log_Write_EKF(_vehicle.ahrs,false);
|
||||||
|
}
|
||||||
|
if (!LogReader::in_list("AHRS2", nottypes)) {
|
||||||
|
_vehicle.dataflash.Log_Write_AHRS2(_vehicle.ahrs);
|
||||||
|
}
|
||||||
|
if (!LogReader::in_list("POS", nottypes)) {
|
||||||
|
_vehicle.dataflash.Log_Write_POS(_vehicle.ahrs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Replay::read_sensors(const char *type)
|
void Replay::read_sensors(const char *type)
|
||||||
{
|
{
|
||||||
if (!done_parameters && !streq(type,"FMT") && !streq(type,"PARM")) {
|
if (!done_parameters && !streq(type,"FMT") && !streq(type,"PARM")) {
|
||||||
|
@ -763,16 +788,8 @@ void Replay::read_sensors(const char *type)
|
||||||
if (_vehicle.ahrs.get_home().lat != 0) {
|
if (_vehicle.ahrs.get_home().lat != 0) {
|
||||||
_vehicle.inertial_nav.update(_vehicle.ins.get_delta_time());
|
_vehicle.inertial_nav.update(_vehicle.ins.get_delta_time());
|
||||||
}
|
}
|
||||||
if (downsample == 0 || ++output_counter % downsample == 0) {
|
if ((downsample == 0 || ++output_counter % downsample == 0) && !logmatch) {
|
||||||
if (!LogReader::in_list("EKF", nottypes)) {
|
write_ekf_logs();
|
||||||
_vehicle.dataflash.Log_Write_EKF(_vehicle.ahrs,false);
|
|
||||||
}
|
|
||||||
if (!LogReader::in_list("AHRS2", nottypes)) {
|
|
||||||
_vehicle.dataflash.Log_Write_AHRS2(_vehicle.ahrs);
|
|
||||||
}
|
|
||||||
if (!LogReader::in_list("POS", nottypes)) {
|
|
||||||
_vehicle.dataflash.Log_Write_POS(_vehicle.ahrs);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (_vehicle.ahrs.healthy() != ahrs_healthy) {
|
if (_vehicle.ahrs.healthy() != ahrs_healthy) {
|
||||||
ahrs_healthy = _vehicle.ahrs.healthy();
|
ahrs_healthy = _vehicle.ahrs.healthy();
|
||||||
|
@ -786,6 +803,10 @@ void Replay::read_sensors(const char *type)
|
||||||
log_check_solution();
|
log_check_solution();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (logmatch && streq(type, "NKF1")) {
|
||||||
|
write_ekf_logs();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue