Радарный датчик позволяет БПЛА обнаруживать другие транспортные средства в воздушном пространстве, так что БПЛА может предсказывать другое движение транспортного средства и принимать решения для обеспечения зазора от других транспортных средств. Этот пример показывает, как симулировать радарный датчик, установленный на БПЛА, используя uavScenario
и radarDataGenerator
объекты. Во время симуляции сценария radarDataGenerator
g объекта
включает в сценарии летные пути другого транспортного средства. Автомобиль , оборудованный датчиком может использовать такую информацию отслеживания, чтобы решить, произойдет ли столкновение, и решить, требуется ли изменение плана рейса.
Сценарий проверки состоит из двух БПЛА. БПЛА с неподвижным крылом является целевое транспортное средство а мультироторный БПЛА отслеживает БПЛА с неподвижным радарным датчиком.
% Use fixed random seed for simulation repeatablity. rng(0) % Create a scenario that runs for 10 seconds. s = uavScenario("StopTime",10,"HistoryBufferSize",200); % Create a fixed-wing target that moves from [30 0 0] to [20 10 0]. target = uavPlatform("Target",s,"Trajectory",waypointTrajectory([30 0 0; 20 10 0],"TimeOfArrival",[0 10])); updateMesh(target,"fixedwing", {1}, [1 0 0], eul2tform([0 0 pi])); % Create a quadrotor that moves from [0 0 0] to [10 10 0]. egoMultirotor = uavPlatform("EgoVehicle",s,"Trajectory",waypointTrajectory([0 0 0; 10 10 0],"TimeOfArrival",[0 10])); updateMesh(egoMultirotor,"quadrotor",{1},[0 1 0],eul2tform([0 0 pi])); % Mount a radar on the quadrotor. radarSensor = radarDataGenerator("no scanning","SensorIndex",1,"UpdateRate",10,... "FieldOfView",[120 80],... "HasElevation", true,... "ElevationResolution", 3,... "AzimuthResolution", 1, ... "RangeResolution", 10, ... meters "RangeRateResolution",3,... "RangeLimits", [0 750],... "TargetReportFormat","Tracks",... "TrackCoordinates",'Scenario',... "HasINS", true,... "HasFalseAlarms",true,... "FalseAlarmRate",1e-5,... "HasRangeRate",true,... "FalseAlarmRate", 1e-7); % Create the sensor. ExampleHelperUAVRadar inherits from the uav.SensorAdaptor class. radar = uavSensor("Radar",egoMultirotor,ExampleHelperUAVRadar(radarSensor),"MountingAngles", [0 0 0]);
Предварительный просмотр сценария с помощью show3D
функция.
[ax,plotFrames] = show3D(s);
xlim([-5,15]);
ylim([-5,35]);
hold on
Настройте сценарий, запустите симуляцию и проверьте обнаружение.
% Add detection and sensor field of view to the plot. trackSquare = plot3(plotFrames.NED,nan,nan,nan,"-"); radarDirection = hgtransform("Parent",plotFrames.EgoVehicle.Radar,"Matrix",eye(4)); coverageAngles = linspace(-radarSensor.FieldOfView(1)/360*pi, radarSensor.FieldOfView(1)/360*pi,128); coveragePatch = patch([0 radarSensor.RangeLimits(2)*cos(coverageAngles) 0], ... [0 radarSensor.RangeLimits(2)*sin(coverageAngles) 0],... "blue","FaceAlpha",0.3,... "Parent",radarDirection); hold(ax,"off"); % Start simulation. setup(s); while advance(s) % Update sensor readings and read data. updateSensors(s); % Plot updated radar FOV. egoPose = read(egoMultirotor); radarFOV = coverageConfig(radarSensor, egoPose(1:3),quaternion(egoPose(10:13))); radarDirection.Matrix = eul2tform([radarFOV.LookAngle(1)/180*pi 0 0]); % Obtain detections from the radar and visualize them. [isUpdated,time,confTracks,numTracks,config] = read(radar); if numTracks > 0 trackSquare.XData = [trackSquare.XData,confTracks(1).State(1)]; trackSquare.YData = [trackSquare.YData,confTracks(1).State(3)]; trackSquare.ZData = [trackSquare.ZData,confTracks(1).State(5)]; drawnow limitrate end show3D(s,"FastUpdate", true,"Parent",ax); pause(0.1); end
Трек БПЛА-цели визуализируется во время симуляции. Используя это предсказание дорожки, автомобиль , оборудованный датчиком теперь может принимать решения о том, произойдет ли столкновение. Это позволяет вам реализовать алгоритмы избегания препятствий и протестировать их с этим сценарием.