diff --git a/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/Xa8LYoHW6o1icagNgoJY5eYksJ0d.xml b/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/Xa8LYoHW6o1icagNgoJY5eYksJ0d.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/Xa8LYoHW6o1icagNgoJY5eYksJ0d.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/Xa8LYoHW6o1icagNgoJY5eYksJ0p.xml b/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/Xa8LYoHW6o1icagNgoJY5eYksJ0p.xml
new file mode 100644
index 0000000..a6d7c3c
--- /dev/null
+++ b/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/Xa8LYoHW6o1icagNgoJY5eYksJ0p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/ryNm0kOvTMRy3DefgdmGp1GqV-Yd.xml b/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/ryNm0kOvTMRy3DefgdmGp1GqV-Yd.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/ryNm0kOvTMRy3DefgdmGp1GqV-Yd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/ryNm0kOvTMRy3DefgdmGp1GqV-Yp.xml b/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/ryNm0kOvTMRy3DefgdmGp1GqV-Yp.xml
new file mode 100644
index 0000000..35868a2
--- /dev/null
+++ b/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/ryNm0kOvTMRy3DefgdmGp1GqV-Yp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/wiELvAwZYF03DX0eRNI7i1vkqXkd.xml b/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/wiELvAwZYF03DX0eRNI7i1vkqXkd.xml
new file mode 100644
index 0000000..99772b4
--- /dev/null
+++ b/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/wiELvAwZYF03DX0eRNI7i1vkqXkd.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/wiELvAwZYF03DX0eRNI7i1vkqXkp.xml b/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/wiELvAwZYF03DX0eRNI7i1vkqXkp.xml
new file mode 100644
index 0000000..54fb3b1
--- /dev/null
+++ b/resources/project/LMc5a8ETDcRip3rYsQxn56S6obM/wiELvAwZYF03DX0eRNI7i1vkqXkp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/sensingModels/@sigmoidSensor/distanceMembership.m b/sensingModels/@sigmoidSensor/distanceMembership.m
new file mode 100644
index 0000000..a36e2cc
--- /dev/null
+++ b/sensingModels/@sigmoidSensor/distanceMembership.m
@@ -0,0 +1,10 @@
+function x = distanceMembership(obj, d)
+ arguments (Input)
+ obj (1, 1) {mustBeA(obj, 'sigmoidSensor')};
+ d (:, 1) double;
+ end
+ arguments (Output)
+ x (:, 1) double;
+ end
+ x = 1 - (1 ./ (1 + exp(-obj.betaDist .* (abs(d) - obj.alphaDist))));
+end
\ No newline at end of file
diff --git a/sensingModels/@sigmoidSensor/plotParameters.m b/sensingModels/@sigmoidSensor/plotParameters.m
new file mode 100644
index 0000000..e59f64d
--- /dev/null
+++ b/sensingModels/@sigmoidSensor/plotParameters.m
@@ -0,0 +1,44 @@
+function f = plotParameters(obj)
+ arguments (Input)
+ obj (1, 1) {mustBeA(obj, 'sigmoidSensor')};
+ end
+ arguments (Output)
+ f (1, 1) {mustBeA(f, 'matlab.ui.Figure')};
+ end
+
+ % Distance and tilt sample points
+ d = 0:(obj.alphaDist / 100):(2*obj.alphaDist);
+ t = -90:1:90;
+
+ % Sample membership functions
+ d_x = obj.distanceMembership(d);
+ t_x = obj.tiltMembership(deg2rad(t));
+
+ % Plot resultant sigmoid curves
+ f = figure;
+ tiledlayout(f, 2, 1, "TileSpacing", "tight", "Padding", "compact");
+
+ % Distance
+ nexttile(1, [1, 1]);
+ grid(f.Children(1).Children(1), "on");
+ title(f.Children(1).Children(1), "Distance Membership Sigmoid");
+ xlabel(f.Children(1).Children(1), "Distance (m)");
+ ylabel(f.Children(1).Children(1), "Membership");
+ hold(f.Children(1).Children(1), 'on');
+ plot(f.Children(1).Children(1), d, d_x, 'LineWidth', 2);
+ hold(f.Children(1).Children(1), 'off');
+ ylim([0, 1]);
+
+ % Tilt
+ nexttile(2, [1, 1]);
+ grid(f.Children(1).Children(1), "on");
+ title(f.Children(1).Children(1), "Tilt Membership Sigmoid");
+ xlabel(f.Children(1).Children(1), "Tilt (deg)");
+ ylabel(f.Children(1).Children(1), "Membership");
+ hold(f.Children(1).Children(1), 'on');
+ plot(f.Children(1).Children(1), t, t_x, 'LineWidth', 2);
+ hold(f.Children(1).Children(1), 'off');
+
+
+ keyboard
+end
\ No newline at end of file
diff --git a/sensingModels/@sigmoidSensor/sensorPerformance.m b/sensingModels/@sigmoidSensor/sensorPerformance.m
index f48ff99..882959c 100644
--- a/sensingModels/@sigmoidSensor/sensorPerformance.m
+++ b/sensingModels/@sigmoidSensor/sensorPerformance.m
@@ -15,9 +15,8 @@ function value = sensorPerformance(obj, agentPos, agentPan, agentTilt, targetPos
tiltAngle = atan2(targetPos(:, 3) - agentPos(3), x) - agentTilt;
% Membership functions
- mu_d = 1 - (1 ./ (1 + exp(-obj.betaDist .* (d - obj.alphaDist)))); % distance
- mu_p = 1; % pan
- mu_t = (1 ./ (1 + exp(-obj.betaTilt .* (tiltAngle + obj.alphaTilt)))) - (1 ./ (1 + exp(-obj.betaTilt .* (tiltAngle - obj.alphaTilt)))); % tilt
+ mu_d = obj.distanceMembership(d);
+ mu_t = obj.tiltMembership(tiltAngle);
- value = mu_d .* mu_p .* mu_t;
+ value = mu_d .* mu_t; % assume pan membership is always 1
end
\ No newline at end of file
diff --git a/sensingModels/@sigmoidSensor/sigmoidSensor.m b/sensingModels/@sigmoidSensor/sigmoidSensor.m
index 577d12c..ab50816 100644
--- a/sensingModels/@sigmoidSensor/sigmoidSensor.m
+++ b/sensingModels/@sigmoidSensor/sigmoidSensor.m
@@ -13,5 +13,10 @@ classdef sigmoidSensor
[obj] = initialize(obj, alphaDist, betaDist, alphaPan, betaPan, alphaTilt, betaTilt);
[values, positions] = sense(obj, agent, sensingObjective, domain, partitioning);
[value] = sensorPerformance(obj, agentPos, agentPan, agentTilt, targetPos);
+ plotParameters(obj);
+ end
+ methods (Access = private)
+ x = distanceMembership(obj, d);
+ x = tiltMembership(obj, t);
end
end
\ No newline at end of file
diff --git a/sensingModels/@sigmoidSensor/tiltMembership.m b/sensingModels/@sigmoidSensor/tiltMembership.m
new file mode 100644
index 0000000..0551aa2
--- /dev/null
+++ b/sensingModels/@sigmoidSensor/tiltMembership.m
@@ -0,0 +1,10 @@
+function x = tiltMembership(obj, t)
+ arguments (Input)
+ obj (1, 1) {mustBeA(obj, 'sigmoidSensor')};
+ t (:, 1) double;
+ end
+ arguments (Output)
+ x (:, 1) double;
+ end
+ x = (1 ./ (1 + exp(-obj.betaTilt .* (t + obj.alphaTilt)))) - (1 ./ (1 + exp(-obj.betaTilt .* (t - obj.alphaTilt))));
+end
\ No newline at end of file
diff --git a/test/test_sigmoidSensor.m b/test/test_sigmoidSensor.m
index 676aac7..d5e3862 100644
--- a/test/test_sigmoidSensor.m
+++ b/test/test_sigmoidSensor.m
@@ -34,6 +34,9 @@ classdef test_sigmoidSensor < matlab.unittest.TestCase
alphaTilt = deg2rad(15);
betaTilt = 3;
tc.testClass = tc.testClass.initialize(alphaDist, betaDist, NaN, NaN, alphaTilt, betaTilt);
+
+ % Plot
+ tc.testClass.plotParameters();
% Performance at current position should be maximized (1)
% some wiggle room is needed for certain parameter conditions,