full simulation with RF sensors
This commit is contained in:
+9
-2
@@ -25,9 +25,16 @@ function [obj] = run(obj)
|
||||
obj.validate();
|
||||
end
|
||||
|
||||
% Clear RF sensor caches
|
||||
if isa(obj.agents{1}.sensorModel, "rfSensor")
|
||||
for ss = 1:size(obj.agents, 1)
|
||||
obj.agents{ss}.sensorModel = obj.agents{ss}.sensorModel.clearRssCache;
|
||||
end
|
||||
end
|
||||
|
||||
% Update partitioning before moving (this one is strictly for
|
||||
% plotting purposes, the real partitioning is done by the agents)
|
||||
obj.partitioning = obj.agents{1}.partition(obj.agents, obj.domain.objective);
|
||||
[obj.partitioning, obj.agents] = obj.agents{1}.partition(obj.agents, obj.domain.objective);
|
||||
|
||||
% Determine desired communications links
|
||||
if ~obj.useFixedTopology
|
||||
@@ -42,7 +49,7 @@ function [obj] = run(obj)
|
||||
% Moving
|
||||
% Iterate over agents to simulate their unconstrained motion
|
||||
for jj = 1:size(obj.agents, 1)
|
||||
obj.agents{jj} = obj.agents{jj}.run(obj.domain, obj.partitioning, obj.timestepIndex, jj, obj.useDoubleIntegrator, obj.dampingCoeff, obj.timestep, obj.optimizeSensorPointing);
|
||||
obj.agents{jj} = obj.agents{jj}.run(obj.domain, obj.partitioning, obj.timestepIndex, jj, obj.useDoubleIntegrator, obj.dampingCoeff, obj.timestep, obj.optimizeSensorPointing, obj.agents([1:(jj - 1), (jj + 1):size(obj.agents, 1)]));
|
||||
end
|
||||
|
||||
% Adjust motion determined by unconstrained gradient ascent using
|
||||
|
||||
+36
-5
@@ -13,10 +13,39 @@ function writeInits(obj)
|
||||
|
||||
% Collect agent parameters
|
||||
collisionRadii = cellfun(@(x) x.collisionGeometry.radius, obj.agents);
|
||||
alphaDist = cellfun(@(x) x.sensorModel.alphaDist, obj.agents);
|
||||
betaDist = cellfun(@(x) x.sensorModel.betaDist, obj.agents);
|
||||
alphaTilt = cellfun(@(x) x.sensorModel.alphaTilt, obj.agents);
|
||||
betaTilt = cellfun(@(x) x.sensorModel.betaTilt, obj.agents);
|
||||
if isprop(obj.agents{1}.sensorModel, "alphaDist")
|
||||
% sigmoidSensor parameters
|
||||
alphaDist = cellfun(@(x) x.sensorModel.alphaDist, obj.agents);
|
||||
betaDist = cellfun(@(x) x.sensorModel.betaDist, obj.agents);
|
||||
alphaTilt = cellfun(@(x) x.sensorModel.alphaTilt, obj.agents);
|
||||
betaTilt = cellfun(@(x) x.sensorModel.betaTilt, obj.agents);
|
||||
|
||||
% others to zero
|
||||
lossExponent = zeros(size(obj.agents));
|
||||
P_TX = zeros(size(obj.agents));
|
||||
BW = zeros(size(obj.agents));
|
||||
f_c = zeros(size(obj.agents));
|
||||
G_RX_dBi = zeros(size(obj.agents));
|
||||
beamwidthExponent = zeros(size(obj.agents));
|
||||
|
||||
elseif isprop(obj.agents{1}.sensorModel, "P_TX")
|
||||
% rfSensor parameters
|
||||
lossExponent = cellfun(@(x) x.sensorModel.lossExponent, obj.agents);
|
||||
P_TX = cellfun(@(x) x.sensorModel.P_TX, obj.agents);
|
||||
BW = cellfun(@(x) x.sensorModel.BW, obj.agents);
|
||||
f_c = cellfun(@(x) x.sensorModel.f_c, obj.agents);
|
||||
G_RX_dBi = cellfun(@(x) x.sensorModel.G_RX_dBi, obj.agents);
|
||||
beamwidthExponent = cellfun(@(x) x.sensorModel.beamwidthExponent, obj.agents);
|
||||
|
||||
% others to zero
|
||||
alphaDist = zeros(size(obj.agents));
|
||||
betaDist = zeros(size(obj.agents));
|
||||
alphaTilt = zeros(size(obj.agents));
|
||||
betaTilt = zeros(size(obj.agents));
|
||||
end
|
||||
% joint parameters
|
||||
tilt = cellfun(@(x) x.sensorModel.tilt, obj.agents);
|
||||
azimuth = cellfun(@(x) x.sensorModel.azimuth, obj.agents);
|
||||
comRanges = cellfun(@(x) x.commsGeometry.radius, obj.agents);
|
||||
initialStepSize = cellfun(@(x) x.initialStepSize, obj.agents);
|
||||
pos = cell2mat(cellfun(@(x) x.pos, obj.agents, 'UniformOutput', false));
|
||||
@@ -30,7 +59,9 @@ function writeInits(obj)
|
||||
"barrierGain", obj.barrierGain, "barrierExponent", obj.barrierExponent, "numObstacles", numInputObs, ...
|
||||
"numAgents", size(obj.agents, 1), "collisionRadius", collisionRadii, "comRange", comRanges, ...
|
||||
"useDoubleIntegrator", obj.useDoubleIntegrator, "dampingCoeff", obj.dampingCoeff, "useFixedTopology", obj.useFixedTopology, ...
|
||||
"alphaDist", alphaDist, "betaDist", betaDist, "alphaTilt", alphaTilt, "betaTilt", betaTilt, ...
|
||||
"tilt", tilt, "azimuth", azimuth, ... % joint sensor parameters
|
||||
"alphaDist", alphaDist, "betaDist", betaDist, "alphaTilt", alphaTilt, "betaTilt", betaTilt, ... % sigmoid sensor parameters
|
||||
"lossExponent", lossExponent, "P_TX", P_TX, "BW", BW, "f_c", f_c, "G_RX_dBi", G_RX_dBi, "beamwidthExponent", beamwidthExponent, ... % RF sensor parameters
|
||||
... % ^^^ PARAMETERS ^^^ | vvv STATES vvv
|
||||
"pos", pos, "objectivePos", obj.domain.objective.groundPos, "objectiveSigma", obj.domain.objective.objectiveSigma, ...
|
||||
"domainMin", obj.domain.minCorner, "domainMax", obj.domain.maxCorner, ...
|
||||
|
||||
Reference in New Issue
Block a user