From f3f9ec3db22e2ed02dc79710a73b5ca7d8543d73 Mon Sep 17 00:00:00 2001 From: Kevin D Date: Mon, 6 Apr 2026 18:16:00 -0700 Subject: [PATCH] added minimum command spacing log parser and check --- aerpaw/results/readControllerLogs.m | 19 +++++++++++++++++++ aerpaw/results/readRadioLogs.m | 1 - aerpaw/results/resultsAnalysis.m | 17 +++++++++++++++++ .../boyWn-mt0RFdVNBj1mgEcGMQh_Ed.xml | 6 ++++++ .../boyWn-mt0RFdVNBj1mgEcGMQh_Ep.xml | 2 ++ 5 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 aerpaw/results/readControllerLogs.m create mode 100644 resources/project/cCclYJTOop6jkdZsItlf7iNuov4/boyWn-mt0RFdVNBj1mgEcGMQh_Ed.xml create mode 100644 resources/project/cCclYJTOop6jkdZsItlf7iNuov4/boyWn-mt0RFdVNBj1mgEcGMQh_Ep.xml diff --git a/aerpaw/results/readControllerLogs.m b/aerpaw/results/readControllerLogs.m new file mode 100644 index 0000000..cedbde2 --- /dev/null +++ b/aerpaw/results/readControllerLogs.m @@ -0,0 +1,19 @@ +function T = readControllerLogs(filepath) + arguments (Input) + filepath (1, 1) string; + end + arguments (Output) + T table; + end + assert(isfile(filepath), "File not found at %s", filepath); + + T = readtable(filepath); + T.Var1 = datetime(strip(strip(append(T.Var1, " ", T.Var2), 'left', '['), 'right', ']'), "InputFormat", "yyyy-MM-dd HH:mm:ss.SSSSSS"); + T.Var2 = []; + T.Var3 = strip(append(T.Var3, " ", T.Var4, " ", T.Var5, " ", T.Var6, " ", string(T.Var7), " ", T.Var8, " ", T.Var9)); + T.Var4 = []; T.Var5 = []; T.Var6 = []; T.Var7 = []; T.Var8 = []; T.Var9 = []; + T.Properties.VariableNames{1} = 'timestamp'; + T.Properties.VariableNames{2} = 'message'; + + T(ismissing(T.message), :) = []; +end \ No newline at end of file diff --git a/aerpaw/results/readRadioLogs.m b/aerpaw/results/readRadioLogs.m index 9ab042d..a54079d 100644 --- a/aerpaw/results/readRadioLogs.m +++ b/aerpaw/results/readRadioLogs.m @@ -2,7 +2,6 @@ function R = readRadioLogs(logPath) arguments (Input) logPath (1, 1) string {isfolder(logPath)}; end - arguments (Output) R (:, 8) table; end diff --git a/aerpaw/results/resultsAnalysis.m b/aerpaw/results/resultsAnalysis.m index 0d425d2..1c7b59e 100644 --- a/aerpaw/results/resultsAnalysis.m +++ b/aerpaw/results/resultsAnalysis.m @@ -1,6 +1,23 @@ %% Plot AERPAW logs (trajectory, radio) resultsPath = fullfile(matlab.project.rootProject().RootFolder, "sandbox", "two_around_wall"); % Define path to results copied from AERPAW platform +% Measure intervals between issuing commands from the controller +% (make sure this is ~4-5 seconds at minimum to avoid overwhelming the UAV autopilot) +r = dir(resultsPath); +controllerPath = fullfile(r(startsWith({r.name}, 'controller_')).folder, r(startsWith({r.name}, 'controller_')).name); +controllerPath = dir(controllerPath); +controllerPath = fullfile(controllerPath(endsWith({controllerPath.name}, '_controller_log.txt')).folder, controllerPath(endsWith({controllerPath.name}, '_controller_log.txt')).name); +controller = readControllerLogs(controllerPath); +rpIdx = startsWith(controller.message, "Sent REQUEST_POSITION to client 1"); +rpTimes = controller.timestamp(rpIdx); +dt = diff(rpTimes); +dt.Format = "mm:ss.SSS"; +fprintf("Minimum command spacing: %2.3f seconds\n", seconds(min(dt))); +fprintf("Maximum command spacing: %2.3f seconds\n", seconds(max(dt))); +fprintf("Mean command spacing: %2.3f seconds\n", seconds(mean(dt))); +fprintf("Median command spacing: %2.3f seconds\n", seconds(median(dt))); +assert(seconds(min(dt)) > 4, "Minimum command spacing questionably short"); + % Plot GPS logged data and scenario information (domain, objective, obstacles) seaToGroundLevel = 110; % measured approximately from USGS national map viewer plotWholeFlight = true; % do not attempt to automatically trim initial and final positioning and landing from flight plot (buggy) diff --git a/resources/project/cCclYJTOop6jkdZsItlf7iNuov4/boyWn-mt0RFdVNBj1mgEcGMQh_Ed.xml b/resources/project/cCclYJTOop6jkdZsItlf7iNuov4/boyWn-mt0RFdVNBj1mgEcGMQh_Ed.xml new file mode 100644 index 0000000..99772b4 --- /dev/null +++ b/resources/project/cCclYJTOop6jkdZsItlf7iNuov4/boyWn-mt0RFdVNBj1mgEcGMQh_Ed.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/project/cCclYJTOop6jkdZsItlf7iNuov4/boyWn-mt0RFdVNBj1mgEcGMQh_Ep.xml b/resources/project/cCclYJTOop6jkdZsItlf7iNuov4/boyWn-mt0RFdVNBj1mgEcGMQh_Ep.xml new file mode 100644 index 0000000..a84ce4e --- /dev/null +++ b/resources/project/cCclYJTOop6jkdZsItlf7iNuov4/boyWn-mt0RFdVNBj1mgEcGMQh_Ep.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file