improved sigmoid sensor parameter plotting for thesis figure
This commit is contained in:
1 parent
acfb2719e2
commit
cfc0ed4748
3 files changed
+48
-5
No files matched your search
@@ -1,22 +1,32 @@
|
|||||||
function f = plotParameters(obj)
|
function f = plotParameters(obj, f)
|
||||||
arguments (Input)
|
arguments (Input)
|
||||||
obj (1, 1) {mustBeA(obj, "sigmoidSensor")};
|
obj (1, 1) {mustBeA(obj, "sigmoidSensor")};
|
||||||
|
f (1, 1) {mustBeA(f, "matlab.ui.Figure")} = figure;
|
||||||
end
|
end
|
||||||
arguments (Output)
|
arguments (Output)
|
||||||
f (1, 1) {mustBeA(f, "matlab.ui.Figure")};
|
f (1, 1) {mustBeA(f, "matlab.ui.Figure")};
|
||||||
end
|
end
|
||||||
|
|
||||||
% Distance and tilt sample points
|
% Distance and tilt sample points
|
||||||
d = 0:(obj.alphaDist / 100):(2*obj.alphaDist);
|
d = 0:(obj.alphaDist / 1000):(2*obj.alphaDist);
|
||||||
t = -90:1:90;
|
t = -90:0.1:90;
|
||||||
|
|
||||||
% Sample membership functions
|
% Sample membership functions
|
||||||
d_x = obj.distanceMembership(d);
|
d_x = obj.distanceMembership(d);
|
||||||
t_x = obj.tiltMembership(t);
|
t_x = obj.tiltMembership(t);
|
||||||
|
|
||||||
|
% pad ends of sampled results with zeros at +/- some big number
|
||||||
|
big = 1e6 * max(d);
|
||||||
|
d = [-big, d, big];
|
||||||
|
t = [-big, t, big];
|
||||||
|
d_x = [0, d_x', 0];
|
||||||
|
t_x = [0, t_x', 0];
|
||||||
|
|
||||||
% Plot resultant sigmoid curves
|
% Plot resultant sigmoid curves
|
||||||
f = figure;
|
hold(gca(f), "on");
|
||||||
|
if isempty(gca(f).Children)
|
||||||
tiledlayout(f, 2, 1, "TileSpacing", "tight", "Padding", "compact");
|
tiledlayout(f, 2, 1, "TileSpacing", "tight", "Padding", "compact");
|
||||||
|
end
|
||||||
|
|
||||||
% Distance
|
% Distance
|
||||||
nexttile(1, [1, 1]);
|
nexttile(1, [1, 1]);
|
||||||
@@ -24,9 +34,12 @@ function f = plotParameters(obj)
|
|||||||
title("Distance Membership Sigmoid");
|
title("Distance Membership Sigmoid");
|
||||||
xlabel("Distance (m)");
|
xlabel("Distance (m)");
|
||||||
ylabel("Membership");
|
ylabel("Membership");
|
||||||
|
ld = legend();
|
||||||
hold("on");
|
hold("on");
|
||||||
plot(d, d_x, "LineWidth", 2);
|
plot(d, d_x, "LineWidth", 2);
|
||||||
hold("off");
|
hold("off");
|
||||||
|
xData = cell2mat(arrayfun(@(x) x.XData(2:(end - 1)), f.Children.Children(end).Children, 'UniformOutput', false));
|
||||||
|
xlim([min(xData, [], "all"), max(xData, [], "all")]);
|
||||||
ylim([0, 1]);
|
ylim([0, 1]);
|
||||||
|
|
||||||
% Tilt
|
% Tilt
|
||||||
@@ -35,8 +48,21 @@ function f = plotParameters(obj)
|
|||||||
title("Tilt Membership Sigmoid");
|
title("Tilt Membership Sigmoid");
|
||||||
xlabel("Tilt (deg)");
|
xlabel("Tilt (deg)");
|
||||||
ylabel("Membership");
|
ylabel("Membership");
|
||||||
|
lt = legend();
|
||||||
hold("on");
|
hold("on");
|
||||||
plot(t, t_x, "LineWidth", 2);
|
plot(t, t_x, "LineWidth", 2);
|
||||||
hold("off");
|
hold("off");
|
||||||
|
xlim([-90, 90]);
|
||||||
ylim([0, 1]);
|
ylim([0, 1]);
|
||||||
|
|
||||||
|
% add legends
|
||||||
|
nexttile(1, [1, 1]);
|
||||||
|
f.Children.Children(3).String{end} = sprintf("Sensor %d", length(f.Children.Children(end).Children));
|
||||||
|
f.Children.Children(1).String{end} = sprintf("Sensor %d", length(f.Children.Children(end).Children));
|
||||||
|
|
||||||
|
nexttile(2, [1, 1]);
|
||||||
|
f.Children.Children(3).String{end} = sprintf("Sensor %d", length(f.Children.Children(end).Children));
|
||||||
|
f.Children.Children(1).String{end} = sprintf("Sensor %d", length(f.Children.Children(end).Children));
|
||||||
|
|
||||||
|
hold(gca(f), "off");
|
||||||
end
|
end
|
||||||
@@ -16,7 +16,7 @@ classdef sigmoidSensor
|
|||||||
[obj] = initialize(obj, alphaDist, betaDist, alphaTilt, betaTilt, tilt, azimuth); % initialize sensor, define parameters
|
[obj] = initialize(obj, alphaDist, betaDist, alphaTilt, betaTilt, tilt, azimuth); % initialize sensor, define parameters
|
||||||
[value] = sensorPerformance(obj, agentPos, targetPos); % determine sensor performance for a given single sensor and target geometry
|
[value] = sensorPerformance(obj, agentPos, targetPos); % determine sensor performance for a given single sensor and target geometry
|
||||||
[value] = halfAngle(obj); % tilt angle (deg) at which sensor performance is halved
|
[value] = halfAngle(obj); % tilt angle (deg) at which sensor performance is halved
|
||||||
[f] = plotParameters(obj); % debug, plot sensor response as a function of distance and tilt angle
|
[f] = plotParameters(obj, f); % debug, plot sensor response as a function of distance and tilt angle
|
||||||
end
|
end
|
||||||
methods (Access = private)
|
methods (Access = private)
|
||||||
x = distanceMembership(obj, d); % used in computing distance factor of sensor performance
|
x = distanceMembership(obj, d); % used in computing distance factor of sensor performance
|
||||||
|
|||||||
@@ -57,6 +57,23 @@ classdef test_sigmoidSensor < matlab.unittest.TestCase
|
|||||||
% Performance at great tilt should be 0
|
% Performance at great tilt should be 0
|
||||||
tc.verifyEqual(tc.testClass.sensorPerformance([0, 0, h], [5, 5, 0]), 0, "AbsTol", 1e-9);
|
tc.verifyEqual(tc.testClass.sensorPerformance([0, 0, h], [5, 5, 0]), 0, "AbsTol", 1e-9);
|
||||||
end
|
end
|
||||||
|
function test_thesis_graphic(tc)
|
||||||
|
s = [sigmoidSensor, sigmoidSensor];
|
||||||
|
|
||||||
|
alphaDist = [2, 8];
|
||||||
|
betaDist = [25, 1];
|
||||||
|
alphaTilt = [50, 15]; % degrees
|
||||||
|
betaTilt = [0.2, 3];
|
||||||
|
|
||||||
|
s(1) = s(1).initialize(alphaDist(1), betaDist(1), alphaTilt(1), betaTilt(1));
|
||||||
|
s(2) = s(2).initialize(alphaDist(2), betaDist(2), alphaTilt(2), betaTilt(2));
|
||||||
|
|
||||||
|
% Plot
|
||||||
|
f = s(1).plotParameters;
|
||||||
|
f = s(2).plotParameters(f);
|
||||||
|
|
||||||
|
legend(["Sensor 1"; "Sensor 2"]);
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
Reference in new issue
Block a user