%% Create and Modify Capsule-Based Obstacles
% Add obstacles to an environment using the dynamicCapsuleList object. Modify the properties of the obstacles. Remove an obstacle from the environment. Visualize the states of all objects in the environment at different timestamps.
% Create the dynamicCapsuleList object. Extract the maximum number of steps to use as the number of time stamps for the object paths.

capsuleList = dynamicCapsuleList;
numSteps = capsuleList.MaxNumSteps;

%
%% Add Obstacles
% Specify the states for the two obstacles as a linear path from x = 0 m to x = 100 m. The two obstacles are separated by 10 m in opposite directions on the y-axis.

obsState = linspace(0,1,numSteps)'.*[100 0 0];
obsState1 = obsState+[0 10 0];
obsState2 = obsState+[0 -10 0];

% Generate default poses and geometric structures for the two obstacles using obstacle IDs.

[obsIDs,obsPoseStruct] = obstaclePose(capsuleList,[1 2]);
[obsIDs,obsGeomStruct] = obstacleGeometry(capsuleList,obsIDs);

%
%% Update Obstacles
% Assign the states to the obstacles.

obsPoseStruct(1).States = obsState1;
obsPoseStruct(2).States = obsState2;

% Increase the radius of the first obstacle to 2 m.

obsGeomStruct(1).Geometry.Radius = 2;

% update the obstacles using the updateObstaclePose and updateObstacleGeometry object functions.

updateObstaclePose(capsuleList,obsIDs,obsPoseStruct);
updateObstacleGeometry(capsuleList,obsIDs,obsGeomStruct);

% Visualize the obstacles.

show(capsuleList,'TimeStep',1:numSteps);
axis equal

%
%% Remove Obstacles
% Remove the first obstacle from the capsule list by specifying its ID.

removeObstacle(capsuleList,1);

% Visualize the obstacles again.

show(capsuleList,'TimeStep',1:numSteps);
axis equal

% Copyright 2020 The MathWorks, Inc.