%% Generate Lidar Point Cloud by Using Pedestrian Mesh
% Add the prebuilt pedestrian mesh to a driving scenario. Then, use lidarPointCloudGenerator System object to generate a point cloud of the pedestrian mesh.
% Create and show the prebuilt pedestrian mesh.

mesh = driving.scenario.pedestrianMesh;
egoMesh = driving.scenario.carMesh;
show(mesh);

% Create a driving scenario.

s = drivingScenario;

% Add a straight road to the driving scenario. The road has one lane in each direction.

road(s,[0 0 0; 30 0 0],'Lanes',lanespec([1 1]));

% Add a car as an ego vehicle and a pedestrian as a non-ego actor.

egoVehicle = vehicle(s,'ClassID',1,'Mesh',egoMesh);
trajectory(egoVehicle,[1 -2 0; 21.3 -2 0],20);
pedestrian = actor(s,'Length',0.24,'Width',0.45,'Height',1.7,'Position',[15 2 0],'ClassID',4,'Mesh',mesh);

% Plot the driving scenario. Set name-value pair 'Meshes','on' to show the meshes of the actors in the plot.

plot(s,'Meshes','on');

% Create a lidarPointCloudGenerator System object. Set the actor profiles of the System object to those in the driving scenario.

lidar = lidarPointCloudGenerator;
lidar.ActorProfiles = actorProfiles(s);

% Generate a lidar point cloud of the driving scenario.

player = pcplayer([-20 20],[-10 10],[0 4]);
while advance(s)
 tgts = targetPoses(egoVehicle);
 rdmesh = roadMesh(egoVehicle);
 [ptCloud,isValidTime] = lidar(tgts,rdmesh,s.SimulationTime);
    if isValidTime
    view(player,ptCloud);
    end
end

% Copyright 2019 The MathWorks, Inc.