added sensor tilting and rf sensor sim test cases

This commit is contained in:
2026-05-03 14:32:53 -07:00
parent e950d43fc8
commit 0e39e0037d
13 changed files with 154 additions and 29 deletions
+9
View File
@@ -0,0 +1,9 @@
function value = halfAngle(obj)
arguments (Input)
obj (1, 1) {mustBeA(obj, "sigmoidSensor")};
end
arguments (Output)
value (1, 1) double;
end
value = obj.alphaTilt;
end
+8 -1
View File
@@ -1,17 +1,24 @@
function obj = initialize(obj, alphaDist, betaDist, alphaTilt, betaTilt)
function obj = initialize(obj, alphaDist, betaDist, alphaTilt, betaTilt, tilt, azimuth)
arguments (Input)
obj (1, 1) {mustBeA(obj, "sigmoidSensor")}
alphaDist (1, 1) double;
betaDist (1, 1) double;
alphaTilt (1, 1) double;
betaTilt (1, 1) double;
tilt (1, 1) double = 0;
azimuth (1, 1) double = 0;
end
arguments (Output)
obj (1, 1) {mustBeA(obj, "sigmoidSensor")}
end
% Sensor performance parameters
obj.alphaDist = alphaDist;
obj.betaDist = betaDist;
obj.alphaTilt = alphaTilt;
obj.betaTilt = betaTilt;
% Sensor pointing parameters
obj.tilt = tilt;
obj.azimuth = azimuth;
end
+10 -6
View File
@@ -8,16 +8,20 @@ function value = sensorPerformance(obj, agentPos, targetPos)
value (:, 1) double;
end
% compute direct distance and distance projected onto the ground
d = vecnorm(agentPos - targetPos, 2, 2); % distance from sensor to target
x = vecnorm(agentPos(1:2) - targetPos(:, 1:2), 2, 2); % distance from sensor nadir to target nadir (i.e. distance ignoring height difference)
% Unit vectors from agent to each target
diffs = targetPos - agentPos;
d = vecnorm(diffs, 2, 2);
dirs = diffs ./ d;
% compute tilt angle
tiltAngle = (180 - atan2d(x, targetPos(:, 3) - agentPos(3))); % degrees
% Boresight unit vector: tilt=0 nadir [0,0,-1]; azimuth 0=+Y, 90=+X clockwise
boresight = [sind(obj.tilt)*sind(obj.azimuth), sind(obj.tilt)*cosd(obj.azimuth), -cosd(obj.tilt)];
% Angular offset from boresight to each target direction
angularOffset = acosd(dirs * boresight');
% Membership functions
mu_d = obj.distanceMembership(d);
mu_t = obj.tiltMembership(tiltAngle);
mu_t = obj.tiltMembership(angularOffset);
value = mu_d .* mu_t; % assume pan membership is always 1
end
+2 -1
View File
@@ -12,8 +12,9 @@ classdef sigmoidSensor
end
methods (Access = public)
[obj] = initialize(obj, alphaDist, betaDist, alphaTilt, betaTilt); % 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] = 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
end
methods (Access = private)