refactored sensing objective into domain, random inits

This commit is contained in:
2025-11-15 16:01:18 -08:00
parent e0f365b21b
commit afa5d79c1d
13 changed files with 110 additions and 51 deletions

View File

@@ -1,22 +1,21 @@
function obj = initialize(obj, objectiveFunction, footprint, groundAlt, discretizationStep)
function obj = initialize(obj, objectiveFunction, domain, discretizationStep)
arguments (Input)
obj (1,1) {mustBeA(obj, 'sensingObjective')};
objectiveFunction (1, 1) {mustBeA(objectiveFunction, 'function_handle')};
footprint (:, 2) double;
groundAlt (1, 1) double = 0;
domain (1, 1) {mustBeGeometry};
discretizationStep (1, 1) double = 1;
end
arguments (Output)
obj (1,1) {mustBeA(obj, 'sensingObjective')};
end
obj.groundAlt = groundAlt;
obj.groundAlt = domain.minCorner(3);
% Extract footprint limits
xMin = min(footprint(:, 1));
xMax = max(footprint(:, 1));
yMin = min(footprint(:, 2));
yMax = max(footprint(:, 2));
xMin = min(domain.footprint(:, 1));
xMax = max(domain.footprint(:, 1));
yMin = min(domain.footprint(:, 2));
yMax = max(domain.footprint(:, 2));
xGrid = unique([xMin:discretizationStep:xMax, xMax]);
yGrid = unique([yMin:discretizationStep:yMax, yMax]);

View File

@@ -0,0 +1,27 @@
function obj = initializeRandomMvnpdf(obj, domain, protectedRange, discretizationStep)
arguments (Input)
obj (1, 1) {mustBeA(obj, 'sensingObjective')};
domain (1, 1) {mustBeGeometry};
protectedRange (1, 1) double = 1;
discretizationStep (1, 1) double = 1;
end
arguments (Output)
obj (1, 1) {mustBeA(obj, 'sensingObjective')};
end
% Set random objective position
mu = domain.minCorner;
while domain.distance(mu) < protectedRange
mu = domain.random();
end
mu = mu(1:2);
% Set random distribution parameters
sig = [2 + rand * 2, 1; 1, 2 + rand * 2];
% Set up random bivariate normal distribution function
objectiveFunction = @(x, y) mvnpdf([x(:), y(:)], mu, sig);
% Regular initialization
obj = obj.initialize(objectiveFunction, domain, discretizationStep);
end

View File

@@ -18,7 +18,6 @@ function f = plot(obj, ind, f)
o.HitTest = 'off';
o.PickableParts = 'none';
hold(f.CurrentAxes, "off");
else
hold(f.Children(1).Children(ind(1)), "on");
o = surf(f.Children(1).Children(ind(1)), obj.X, obj.Y, repmat(obj.groundAlt, size(obj.X)), obj.values ./ max(obj.values, [], "all"), 'EdgeColor', 'none');

View File

@@ -12,7 +12,8 @@ classdef sensingObjective
end
methods (Access = public)
[obj] = initialize(obj, objectiveFunction, footprint, groundAlt, discretizationStep);
[obj] = initialize(obj, objectiveFunction, domain, discretizationStep);
[obj] = initializeRandomMvnpdf(obj, domain, protectedRange, discretizationStep);
[f ] = plot(obj, ind, f);
end
end