我正在使用OOP在matlab中进行模拟。我需要点从初始点移动到指定点,等待一点,然后飞回基地。作为参考,我正在使用的类是
classdef uavclass
properties (Constant = true)
maxVertClimb = 2;
maxHorizSpeed = 5;
sensorRange = 25;
unloadingTime = 60;
safeDistance = 5;
chargingTime = 300;
minCruiseAlt = 20;
maxCruiseAlt = 70;
end
properties (Access = public, Constant = false)
position@double vector = [];
charge@double scalar = 100;
destination@double vector = [];
end
methods
function obj = uavclass(x,y,z)
obj.position = [x,y,z];
end
function obj = changeCharge(obj,b)
obj.position = b;
end
function obj = uavMoveTo(obj,destin)
if obj.position(1) ~= destin(2) && obj.position(2) ~= destin(3)
obj.position(1) = destin(2);
obj.position(2) = destin(3);
end
end
function obj = uavReturn(obj,destin)
obj.position
function obj = uavRise(obj)
pause(2)
obj.position(3) = 20;
end
function obj = uavLower(obj)
pause(2)
obj.position(3) = 0;
end
end
end
此刻我有一个循环,其中点将直接传送,等待,然后传送到下一个目的地,如下所示。
for t = 1:200
pause(0.1)
if t == times(1)
uav1 = uav1.uavRise()
uav1 = uav1.uavMoveTo(event1)
uav1 = uav1.uavLower()
end
if t == times(6)
uav1 = uav1.uavRise()
uav1 = uav1.uavMoveTo(event6)
uav1 = uav1.uavLower()
end
XY(:,1) = [uav1.position(1),uav2.position(1),uav3.position(1),uav4.position(1),...
uav5.position(1),];
XY(:,2) = [uav1.position(2),uav2.position(2),uav3.position(2),uav4.position(2),...
uav5.position(2),];
set(UAVs, 'XData', XY(:,1), 'YData', XY(:,2));
end
XY是uavs的XY位置点的矩阵,在我用初始坐标(在循环之前定义)生成它们之后。
uav1 = uavclass(0,50,0);
uav2 = uavclass(50,0,0);
uav3 = uavclass(0,-50,0);
uav4 = uavclass(-50,0,0);
uav5 = uavclass(0,0,0);
XY = [];
XY(:,1) = [uav1.position(1),uav2.position(1),uav3.position(1),uav4.position(1),...
uav5.position(1),];
XY(:,2) = [uav1.position(2),uav2.position(2),uav3.position(2),uav4.position(2),...
uav5.position(2),];
set函数中绘制的对象UAV是
UAVs = plot(XY(:,1), XY(:,2),'Marker', '.','Color', 'r', 'LineStyle', 'none','MarkerSize', 8);
我需要做的是不是传送无人机,而是需要以5米/秒的速度移动到目的地。我只能通过首先沿x轴移动无人机,然后沿直线而不是对角线移动y轴来实现这一点。我怎样才能最好使用类方法来实现它?