copy
Description
Examples
Perform Informed Sampling with MPNet
This example shows how to perform informed sampling using a pretrained MPNet. Up to a certain number of iterations, an MPNet state sampler predicts samples using the pretrained MPNet. The samples predicted using the MPNet are biased towards a subspace that contains an optimal path solution. After the specified number of iterations, the sampler switches to the uniform sampling approach. You can change the number of iterations by specifying the MaxLearnedSamples
property of the stateSamplerMPNET
object.
Load Pretrained MPNet
Load a data file containing a pretrained MPNet into the MATLAB® workspace. The MPNet has been trained on various 2-D maze maps with widths and heights of 10 meters and resolutions of 2.5 cells per meter. Each maze map contains a passage width of 5 grid cells and wall thickness of 1 grid cell.
data = load("mazeMapTrainedMPNET.mat")
data = struct with fields:
encodingSize: [9 9]
lossWeights: [100 100 0]
mazeParams: {[5] [1] 'MapSize' [10 10] 'MapResolution' [2.5000]}
stateBounds: [3x2 double]
trainedNetwork: [1x1 dlnetwork]
Create Maze Map for Sampling
Create a random maze map for sampling. The grid size () must be same the as that of the maps used for training the MPNet.
rng(10,"twister")
map = mapMaze(5,1,MapSize=[12 12],MapResolution=2.0833);
Specify the start pose and goal pose.
start = [2 10 0]; goal = [5 4 0];
Visualize the input map.
figure show(map) hold on plot(start(1),start(2),plannerLineSpec.start{:}) plot(goal(1),goal(2),plannerLineSpec.goal{:}) legend(Location="bestoutside") hold off
Create MPNet State Sampler
Specify the state bounds, and create an SE(2) state space object.
x = map.XWorldLimits; y = map.YWorldLimits; theta = [-pi pi]; stateBounds = [x; y; theta]; stateSpace = stateSpaceSE2(stateBounds);
Configure the mpnetSE2
object to use the pretrained MPNet for predicting state samples on a random map. Set the EncodingSize
property values of the mpnetSE2
object to that of the value used for training the network.
mpnet = mpnetSE2(Network=data.trainedNetwork,StateBounds=stateBounds,EncodingSize=data.encodingSize);
Create an MPNet state sampler for computing state samples to use for motion planning. Specify the map environment, the start pose and the goal pose as inputs to the state sampler. The default value for MaxLearnedSamples
is 50
. This implies that the first 50 samples returned by the state sampler are learning-based samples, predicted using the pretrained MPNet.
sampler_orig = stateSamplerMPNET(stateSpace,mpnet,Environment=map,StartState=start,GoalState=goal)
sampler_orig = stateSamplerMPNET with properties: StateSpace: [1x1 stateSpaceSE2] MotionPlanningNetwork: [1x1 mpnetSE2] Environment: [1x1 binaryOccupancyMap] StartState: [2 10 0] GoalState: [5 4 0] MaxLearnedSamples: 50 GoalThreshold: 1
Sample State Space Using MPNet State Sampler
Generate 50 state samples that lie between the start pose and the goal pose using the MPNet state sampler. In this case, the MPNet state sampler generates all 50 samples by using the pretrained MPNet.
states_orig = sample(sampler_orig,50);
Create Copies of MPNet State Sampler and Vary Maximum Learned Samples
Create copies of the default MPNet state sampler object. Modify the maximum learned samples property of the sampler to study its impact on the sampling results.
Set the MaxLearnedSamples
property to 10
. In this case, the MPNet state sampler generates the first 10 samples using the pretrained MPNet and the remaining 40 samples using the uniform sampling approach.
sampler_2 = copy(sampler_orig); sampler_2.MaxLearnedSamples = 10;
Set the MaxLearnedSamples
property to 30
. In this case, the MPNet state sampler generates the first 30 samples using the pretrained MPNet and the remaining 20 samples using the uniform sampling approach.
sampler_3 = copy(sampler_orig); sampler_3.MaxLearnedSamples = 30;
Sample State Space Using Modified MPNet State Sampler
Use each of the modified MPNet state samplers to generate the same number of samples as that of the default sampler. In this case, use them each to generate 50 samples.
states_2 = sample(sampler_2,50); states_3 = sample(sampler_3,50);
Plot and Compare Sampling Results
Create a figure with adequate space to display plots for all three state samplers.
fig1 = figure(Position=[0,0,1200,300]);
Plot the output of the MPNet state sampler with the maximum number of learned samples set to 10.
subplot(1,3,1,Parent=fig1) show(map) hold on plot(start(1),start(2),plannerLineSpec.start{:}) plot(goal(1),goal(2),plannerLineSpec.goal{:}) plot(states_2(:,1),states_2(:,2),plannerLineSpec.state{:}) title("MaxLearnedSamples = 10") hold off
Plot the output of the MPNet state sampler with the maximum number of learned samples set to 30.
subplot(1,3,2,Parent=fig1) show(map) hold on plot(start(1),start(2),plannerLineSpec.start{:}) plot(goal(1),goal(2),plannerLineSpec.goal{:}) plot(states_3(:,1),states_3(:,2),plannerLineSpec.state{:}) title("MaxLearnedSamples = 30") hold off
Plot the output of the default MPNet state sampler. The default value for the maximum number of learned samples is 50. As you increase the maximum number of learned samples to match the number of state samples to generate, the output samples become more focused along a path between the given start pose and the goal pose.
subplot(1,3,3,Parent=fig1) show(map) hold on plot(start(1),start(2),plannerLineSpec.start{:}) plot(goal(1),goal(2),plannerLineSpec.goal{:}) plot(states_orig(:,1),states_orig(:,2),plannerLineSpec.state{:}) title("MaxLearnedSamples = 50 (default)") hold off
Further Exploration
From the sampling results, you can infer that the MPNet state sampler returns optimal state samples if the maximum number of learned samples is equal to the maximum number of samples to be computed. However, if the MPNet is trained on a data set with fewer map environments or path samples, the prediction accuracy of the network decreases. The MPNet state sampler might return an insufficient number of learned samples between the start pose and goal pose, and you cannot use it for path planning. In such cases, the value of MaxLearnedSamples
must be less than the number of samples required. This enables the MPNet state sampler to switch to the uniform sampling approach after a specified number of iterations, thus guaranteeing a path solution.
Input Arguments
sampler1
— MPNet state sampler object
stateSamplerMPNET
object
MPNet state sampler object, specified as a stateSamplerMPNET
object.
Output Arguments
sampler2
— Copy of MPNet state sampler object
stateSamplerMPNET
object
Copy of MPNet state sampler object, returned as a stateSamplerMPNET
object.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Version History
Introduced in R2023b
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)