controller logging and analysis improvements
This commit is contained in:
@@ -1,19 +1,32 @@
|
||||
function T = readControllerLogs(filepath)
|
||||
function T2 = readControllerLogs(filepath)
|
||||
arguments (Input)
|
||||
filepath (1, 1) string;
|
||||
end
|
||||
arguments (Output)
|
||||
T table;
|
||||
T2 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 = readtable(filepath, 'VariableNamingRule', 'preserve');
|
||||
s = split(T.(T.Properties.VariableNames{1}), ']');
|
||||
s2 = strip(s(startsWith(s(:, 2), " ("), 1), 'left', '[');
|
||||
d = datetime(s2, "InputFormat", "yyyy-MM-dd HH:mm:ss.SSSSSS")';
|
||||
it = s(startsWith(s(:, 2), " ("), 2);
|
||||
it = str2double(strip(strip(it, 'left'), 'left', '('));
|
||||
T.Var3 = strip(append(T.Var3, " ", T.Var4, " ", T.Var5, " ", T.Var6, " ", T.Var7));
|
||||
T.Var4 = []; T.Var5 = []; T.Var6 = []; T.Var7 = [];
|
||||
msg = T.(T.Properties.VariableNames{2});
|
||||
msg = msg(startsWith(s(:, 2), " ("), :);
|
||||
s3 = split(msg, ') ');
|
||||
s3 = s3(:, 2);
|
||||
msg = append(s3, T.Var3(startsWith(s(:, 2), " (")));
|
||||
T2 = table(it, d', msg, 'VariableNames', ["iteration", "timestamp", "message"]);
|
||||
% 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), :) = [];
|
||||
% T(ismissing(T.message), :) = [];
|
||||
end
|
||||
@@ -1,5 +1,5 @@
|
||||
%% Plot AERPAW logs (trajectory, radio)
|
||||
resultsPath = fullfile(matlab.project.rootProject().RootFolder, "sandbox", "test2"); % Define path to results copied from AERPAW platform
|
||||
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)
|
||||
@@ -8,16 +8,17 @@ controllerPath = fullfile(r(startsWith({r.name}, 'controller_')).folder, r(start
|
||||
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)));
|
||||
if seconds(min(dt)) < 4
|
||||
warning("Minimum command spacing %2.3f questionably short for AERPAW", seconds(min(dt)));
|
||||
rpIdx = startsWith(controller.message, "Iteration duration: ");
|
||||
s = split(controller.message(rpIdx), "Iteration duration: ");
|
||||
s = split(s(:, 2), ' s');
|
||||
s = duration(strcat("00:", s(:, 1)), "InputFormat", "mm:ss.SSS");
|
||||
s.Format = "mm:ss.SSS";
|
||||
fprintf("Minimum command spacing: %2.3f seconds\n", seconds(min(s)));
|
||||
fprintf("Maximum command spacing: %2.3f seconds\n", seconds(max(s)));
|
||||
fprintf("Mean command spacing: %2.3f seconds\n", seconds(mean(s)));
|
||||
fprintf("Median command spacing: %2.3f seconds\n", seconds(median(s)));
|
||||
if seconds(min(s)) < 4
|
||||
warning("Minimum command spacing %2.3f questionably short for AERPAW", seconds(min(s)));
|
||||
end
|
||||
|
||||
% Plot GPS logged data and scenario information (domain, objective, obstacles)
|
||||
|
||||
Reference in New Issue
Block a user