basic implementation of client/server for AERPAW, whole lot of mess included
This commit is contained in:
73
aerpaw/@scenario/run.m
Normal file
73
aerpaw/@scenario/run.m
Normal file
@@ -0,0 +1,73 @@
|
||||
function obj = run(obj)
|
||||
arguments (Input)
|
||||
obj (1, 1) {mustBeA(obj, 'scenario')};
|
||||
end
|
||||
arguments (Output)
|
||||
obj (1, 1) {mustBeA(obj, 'scenario')};
|
||||
end
|
||||
|
||||
count = 0;
|
||||
|
||||
while true
|
||||
%% UAV operations (simulated only)
|
||||
if coder.target("MATLAB")
|
||||
% Iterate over UAVs
|
||||
for ii = 1:size(obj.uavs, 1)
|
||||
% Determine behavior from UAV opMode
|
||||
if obj.uavs{ii}.opMode == OPMODE.INVALID
|
||||
error("Invalid UAV opMode");
|
||||
elseif obj.uavs{ii}.opMode == OPMODE.INITIALIZED
|
||||
% Waiting for starting position to be sent by the controller
|
||||
if all(~(isnan(obj.uavs{ii}.commandPos)))
|
||||
% Teleport to starting position
|
||||
obj.uavs{ii}.pos = obj.uavs{ii}.commandPos;
|
||||
|
||||
% reset to no command
|
||||
obj.uavs{ii}.commandPos = NaN(1, 3);
|
||||
|
||||
% Acknowledge command receipt to controller by reporting a new opMode
|
||||
obj.uavs{ii}.commandOpMode = OPMODE.SET;
|
||||
end
|
||||
else
|
||||
error("Unexpected UAV opMode");
|
||||
end
|
||||
end
|
||||
elseif coder.target("C++")
|
||||
coder.cinclude('udp_comm.h');
|
||||
% Iterate over UAVs
|
||||
for ii = 1:size(obj.uavs, 1)
|
||||
mode = uint8(0);
|
||||
coder.ceval('recvOpMode', coder.wref(mode));
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
%% Server operations
|
||||
% Compute guidance for UAVs and issue commands
|
||||
if obj.opMode == OPMODE.INVALID
|
||||
error("Invalid controller opMode");
|
||||
elseif obj.opMode == OPMODE.INITIALIZED
|
||||
% On the first iteration, command UAVs to go to their starting positions
|
||||
commandPos = obj.inits.pos;
|
||||
elseif obj.opMode == OPMODE.SET
|
||||
% begin experiment once the controller and UAVs are ready
|
||||
if unique(cellfun(@(x) x.opMode.id, obj.uavs)) == OPMODE.SET.id
|
||||
keyboard
|
||||
end
|
||||
else
|
||||
error("Unexpected controller opMode");
|
||||
end
|
||||
|
||||
% Transmit commands
|
||||
% Command drones to their starting positions
|
||||
for ii = 1:size(obj.uavs, 1)
|
||||
obj.uavs{ii} = obj.sendTarget(obj.uavs{ii}, commandPos(ii, 1:3));
|
||||
end
|
||||
keyboard
|
||||
|
||||
|
||||
|
||||
% tally iterations
|
||||
count = count + 1;
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user