From 6c1682e8913fbf2813c0184e74800eab315913df Mon Sep 17 00:00:00 2001 From: Andrew Mourcos Date: Sun, 4 Nov 2018 12:25:58 -0500 Subject: [PATCH] played with scenario --- Andrew's-Simulation.mat | Bin 0 -> 28204 bytes Andrew_s_Simulation.m | 272 ++++++++++++++++++ ...UsingSyntheticRadarandVisionDataWorkshop.m | 2 +- 3 files changed, 273 insertions(+), 1 deletion(-) create mode 100644 Andrew's-Simulation.mat create mode 100644 Andrew_s_Simulation.m diff --git a/Andrew's-Simulation.mat b/Andrew's-Simulation.mat new file mode 100644 index 0000000000000000000000000000000000000000..90d2a2d01cdcf21649c25e2cf1a149e63bcd0e5f GIT binary patch literal 28204 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 S|5;QvMf(y3#mt;j{(k`Nq8TIr literal 0 HcmV?d00001 diff --git a/Andrew_s_Simulation.m b/Andrew_s_Simulation.m new file mode 100644 index 0000000..9db2588 --- /dev/null +++ b/Andrew_s_Simulation.m @@ -0,0 +1,272 @@ +%Andrew_s_Simulation - Returns sensor detections +% allData = Andrew_s_Simulation returns sensor detections in a structure +% with time for an internally defined scenario and sensor suite. +% +% [allData, scenario, sensors] = Andrew_s_Simulation optionally returns +% the drivingScenario and detection generator objects. + +% Generated by MATLAB(R) 9.5 and Automated Driving System Toolbox 1.3. +% Generated on: 04-Nov-2018 11:48:59 + +% Create the drivingScenario object and ego car +[scenario, egoCar] = createDrivingScenario; + +% Create all the sensors +[sensors, numSensors] = createSensors(scenario); + +allData = struct('Time', {}, 'ActorPoses', {}, 'ObjectDetections', {}, 'LaneDetections', {}); + +BEP = createDemoDisplay(egoCar, sensors); +running = true; +while running + + % Generate the target poses of all actors relative to the ego car + poses = targetPoses(egoCar); + time = scenario.SimulationTime; + + objectDetections = {}; + laneDetections = []; + isValidTime = false(1, numSensors); + + % Generate detections for each sensor + for sensorIndex = 1:numSensors + [objectDets, numObjects, isValidTime(sensorIndex)] = sensors{sensorIndex}(poses, time); + objectDetections = [objectDetections; objectDets(1:numObjects)]; %#ok + end + + % Aggregate all detections into a structure for later use + if any(isValidTime) + allData(end + 1) = struct( ... + 'Time', scenario.SimulationTime, ... + 'ActorPoses', actorPoses(scenario), ... + 'ObjectDetections', {objectDetections}, ... + 'LaneDetections', {laneDetections}); + end + + % Advance the scenario one time step and exit the loop if the scenario is complete + running = advance(scenario); + updateBEP(BEP, egoCar, detections, confirmedTracks, positionSelector, velocitySelector); +end + +% Restart the driving scenario to return the actors to their initial positions. +restart(scenario); + +% Release all the sensor objects so they can be used again. +for sensorIndex = 1:numSensors + release(sensors{sensorIndex}); +end + +%%%%%%%%%%%%%%%%%%%% +% Helper functions % +%%%%%%%%%%%%%%%%%%%% + +% Units used in createSensors and createDrivingScenario +% Distance/Position - meters +% Speed - meters/second +% Angles - degrees +% RCS Pattern - dBsm + +function [sensors, numSensors] = createSensors(scenario) +% createSensors Returns all sensor objects to generate detections + +% Assign into each sensor the physical and radar profiles for all actors +profiles = actorProfiles(scenario); +sensors{1} = visionDetectionGenerator('SensorIndex', 1, ... + 'SensorLocation', [3.7 0], ... + 'MaxRange', 100, ... + 'DetectorOutput', 'Objects only', ... + 'Intrinsics', cameraIntrinsics([1814.81018227767 1814.81018227767],[320 240],[480 640]), ... + 'ActorProfiles', profiles); +sensors{2} = visionDetectionGenerator('SensorIndex', 2, ... + 'SensorLocation', [-1 0], ... + 'Yaw', -180, ... + 'MaxRange', 100, ... + 'DetectorOutput', 'Objects only', ... + 'Intrinsics', cameraIntrinsics([1814.81018227767 1814.81018227767],[320 240],[480 640]), ... + 'ActorProfiles', profiles); +sensors{3} = radarDetectionGenerator('SensorIndex', 3, ... + 'SensorLocation', [1.9 0], ... + 'ActorProfiles', profiles); +sensors{4} = radarDetectionGenerator('SensorIndex', 4, ... + 'SensorLocation', [0 0.9], ... + 'Yaw', 90, ... + 'MaxRange', 50, ... + 'FieldOfView', [90 5], ... + 'ActorProfiles', profiles); +sensors{5} = radarDetectionGenerator('SensorIndex', 5, ... + 'SensorLocation', [0 -0.9], ... + 'Yaw', -90, ... + 'MaxRange', 50, ... + 'FieldOfView', [90 5], ... + 'ActorProfiles', profiles); +sensors{6} = radarDetectionGenerator('SensorIndex', 6, ... + 'SensorLocation', [2.8 -0.9], ... + 'Yaw', -90, ... + 'MaxRange', 50, ... + 'FieldOfView', [90 5], ... + 'ActorProfiles', profiles); +sensors{7} = radarDetectionGenerator('SensorIndex', 7, ... + 'SensorLocation', [2.8 0.9], ... + 'Yaw', 90, ... + 'MaxRange', 50, ... + 'FieldOfView', [90 5], ... + 'ActorProfiles', profiles); +numSensors = 7; +end + +function [scenario, egoCar] = createDrivingScenario +% createDrivingScenario Returns the drivingScenario defined in the Designer + +% Construct a drivingScenario object. +scenario = drivingScenario; + +% Add all road segments +roadCenters = [6 5.4 0; + 35.8 7.5 0; + 26.5 -12.3 0; + 45.3 -13.4 0]; +marking = [laneMarking('Solid', 'Color', [0.98 0.86 0.36]) +laneMarking('Dashed', 'Length', 8, 'Space', 2) +laneMarking('Solid')]; +laneSpecification = lanespec(2, 'Width', 4.925, 'Marking', marking); +road(scenario, roadCenters, 'Lanes', laneSpecification); + +% Add the ego car +egoCar = vehicle(scenario, ... + 'ClassID', 1, ... + 'Position', [12.1 8.4 0]); +waypoints = [12.1 8.4 0; + 18.7 12.6 0; + 27.1 13.6 0; + 32.5 11 0; + 32.9 5.1 0; + 24.9 -4.7 0; + 23.5 -9.9 0; + 25.3 -15.7 0; + 31 -19.1 0; + 37.5 -19 0; + 44.7 -16.6 0]; +speed = 30; +trajectory(egoCar, waypoints, speed); + +% Add the non-ego actors +truck = vehicle(scenario, ... + 'ClassID', 2, ... + 'Length', 8.2, ... + 'Width', 2.5, ... + 'Height', 3.5, ... + 'Position', [37.5 12.5 0]); +waypoints = [37.5 12.5 0; + 36.2 1.3 0; + 31.2 -4.2 0; + 28.6 -9.9 0; + 31.3 -13.8 0; + 37.2 -13.8 0; + 43.7 -11.5 0]; +speed = 5; +trajectory(truck, waypoints, speed); + +car1 = vehicle(scenario, ... + 'ClassID', 1, ... + 'Position', [6.4 9.9 0]); +waypoints = [6.4 9.9 0; + 13 14.9 0; + 25.4 19 0; + 34.8 15.4 0; + 32.4 8.2 0; + 27.2 -0.9 0; + 23.6 -8.9 0; + 25.7 -16.9 0; + 35.4 -19.9 0; + 44.7 -16.7 0]; +speed = 60; +trajectory(car1, waypoints, speed); +end + +function BEP = createDemoDisplay(egoCar, sensors) + % Make a figure + hFigure = figure('Position', [0, 0, 1200, 640], 'Name', 'Sensor Fusion with Synthetic Data Example'); + movegui(hFigure, [0 -1]); % Moves the figure to the left and a little down from the top + + % Add a car plot that follows the ego vehicle from behind + hCarViewPanel = uipanel(hFigure, 'Position', [0 0 0.5 0.5], 'Title', 'Chase Camera View'); + hCarPlot = axes(hCarViewPanel); + chasePlot(egoCar, 'Parent', hCarPlot); + + % Add a car plot that follows the ego vehicle from a top view + hTopViewPanel = uipanel(hFigure, 'Position', [0 0.5 0.5 0.5], 'Title', 'Top View'); + hCarPlot = axes(hTopViewPanel); + chasePlot(egoCar, 'Parent', hCarPlot, 'ViewHeight', 130, 'ViewLocation', [0 0], 'ViewPitch', 90); + + % Add a panel for a bird's-eye plot + hBEVPanel = uipanel(hFigure, 'Position', [0.5 0 0.5 1], 'Title', 'Bird''s-Eye Plot'); + + % Create bird's-eye plot for the ego car and sensor coverage + hBEVPlot = axes(hBEVPanel); + frontBackLim = 60; + BEP = birdsEyePlot('Parent', hBEVPlot, 'Xlimits', [-frontBackLim frontBackLim], 'Ylimits', [-35 35]); + + % Plot the coverage areas for radars + for i = 1:7 + cap = coverageAreaPlotter(BEP,'FaceColor','red','EdgeColor','red'); + plotCoverageArea(cap, sensors{i}.SensorLocation,... + sensors{i}.MaxRange, sensors{i}.Yaw, sensors{i}.FieldOfView(1)); + end + + % Plot the coverage areas for vision sensors + for i = 1:2 + cap = coverageAreaPlotter(BEP,'FaceColor','blue','EdgeColor','blue'); + plotCoverageArea(cap, sensors{i}.SensorLocation,... + sensors{i}.MaxRange, sensors{i}.Yaw, 45); + end + + % Create a vision detection plotter put it in a struct for future use + detectionPlotter(BEP, 'DisplayName','vision', 'MarkerEdgeColor','blue', 'Marker','^'); + + % Combine all radar detections into one entry and store it for later update + detectionPlotter(BEP, 'DisplayName','radar', 'MarkerEdgeColor','red'); + + % Add road borders to plot + laneMarkingPlotter(BEP, 'DisplayName','lane markings'); + + % Add the tracks to the bird's-eye plot. Show last 10 track updates. + trackPlotter(BEP, 'DisplayName','track', 'HistoryDepth',10); + + axis(BEP.Parent, 'equal'); + xlim(BEP.Parent, [-frontBackLim frontBackLim]); + ylim(BEP.Parent, [-40 40]); + + % Add an outline plotter for ground truth + outlinePlotter(BEP, 'Tag', 'Ground truth'); +end + +function updateBEP(BEP, egoCar, detections, confirmedTracks, psel, vsel) + % Update road boundaries and their display + [lmv, lmf] = laneMarkingVertices(egoCar); + plotLaneMarking(findPlotter(BEP,'DisplayName','lane markings'),lmv,lmf); + + % update ground truth data + [position, yaw, length, width, originOffset, color] = targetOutlines(egoCar); + plotOutline(findPlotter(BEP,'Tag','Ground truth'), position, yaw, length, width, 'OriginOffset', originOffset, 'Color', color); + + % Prepare and update detections display + N = numel(detections); + detPos = zeros(N,2); + isRadar = true(N,1); + for i = 1:N + detPos(i,:) = detections{i}.Measurement(1:2)'; + if detections{i}.SensorIndex > 6 % Vision detections + isRadar(i) = false; + end + end + plotDetection(findPlotter(BEP,'DisplayName','vision'), detPos(~isRadar,:)); + plotDetection(findPlotter(BEP,'DisplayName','radar'), detPos(isRadar,:)); + + % Prepare and update tracks display + trackIDs = {confirmedTracks.TrackID}; + labels = cellfun(@num2str, trackIDs, 'UniformOutput', false); + [tracksPos, tracksCov] = getTrackPositions(confirmedTracks, psel); + tracksVel = getTrackVelocities(confirmedTracks, vsel); + plotTrack(findPlotter(BEP,'DisplayName','track'), tracksPos, tracksVel, tracksCov, labels); +end + diff --git a/SensorFusionUsingSyntheticRadarandVisionDataWorkshop.m b/SensorFusionUsingSyntheticRadarandVisionDataWorkshop.m index 560a288..7c30cdd 100644 --- a/SensorFusionUsingSyntheticRadarandVisionDataWorkshop.m +++ b/SensorFusionUsingSyntheticRadarandVisionDataWorkshop.m @@ -255,4 +255,4 @@ function updateBEP(BEP, egoCar, detections, confirmedTracks, psel, vsel) [tracksPos, tracksCov] = getTrackPositions(confirmedTracks, psel); tracksVel = getTrackVelocities(confirmedTracks, vsel); plotTrack(findPlotter(BEP,'DisplayName','track'), tracksPos, tracksVel, tracksCov, labels); -end +end \ No newline at end of file