sample
Exemples d'états de l'échantillonneur d'état gaussien
Depuis R2023b
Description
Exemples
Exemple d'espace d'état SE (2) à l'aide d'un échantillonneur d'état gaussien
Échantillonnez un espace d'état SE(2) à l'aide d'un échantillonneur d'état gaussien et observez l'impact des valeurs des paramètres de l'échantillonneur sur les résultats d'échantillonnage.
Définissez la valeur de départ pour vous assurer de générer les mêmes résultats.
rng(50,"twister");
Créez une carte d'occupation simple avec un passage étroit.
map = binaryOccupancyMap; occupied = [5*ones(9,1),[1; 2; 3; 4; 5; 7; 8; 9; 10]]; setOccupancy(map,occupied,1); figure(Position=[0, 0, 200, 200]) show(map)
Définissez les limites inférieure et supérieure des variables de l'espace d'état x
, y
et theta
à partir de la carte d'occupation.
x = map.XWorldLimits; y = map.YWorldLimits; theta = [-pi pi];
Créez un objet SE(2) d'espace d'état à l'aide des variables d'espace d'état spécifiées. Vérifiez la validité des états dans l'espace d'état d'entrée à l'aide d'un validateur d'état. Définissez la distance de validation sur 0,01.
ss = stateSpaceSE2([x; y; theta]); sv = validatorOccupancyMap(ss,Map=map); sv.ValidationDistance = 0.01;
Exemple d'espace d'état à l'aide d'un échantillonneur d'état gaussien
Créez un échantillonneur d'état gaussien avec les valeurs de paramètres par défaut. Par défaut:
Le nombre maximum de tentatives que l'échantillonneur doit effectuer pour trouver les échantillons d'état est fixé à 10.
Les valeurs d'écart type le long de laetles directions sont définies respectivement sur 0,1, 0,1 et 0,0628.
sampler_orig = stateSamplerGaussian(sv)
sampler_orig = stateSamplerGaussian with properties: StateSpace: [1x1 stateSpaceSE2] StateValidator: [1x1 validatorOccupancyMap] StandardDeviation: [0.1000 0.1000 0.0628] MaxAttempts: 10
Générez 40 échantillons pour la planification de mouvements à partir de l'espace d'état d'entrée.
states_orig = sample(sampler_orig,40);
Vous pouvez générer des échantillons optimaux en modifiant le nombre maximum de tentatives et les valeurs d'écart type. Si les échantillons sont dispersés dans tout l'espace d'entrée, augmentez le nombre maximum de tentatives et les valeurs d'écart type pour concentrer les échantillons d'état autour de la limite de l'obstacle.
Varier le nombre maximum de tentatives
Créez des copies de l'objet échantillonneur d'état d'origine et modifiez le nombre maximum de tentatives, propriété de l'échantillonneur, MaxAttempts,
pour étudier son impact sur les résultats d'échantillonnage. Définissez les valeurs d’écart type sur les valeurs par défaut.
Définissez le nombre maximum de tentatives pour trouver des échantillons valides sur 100 et générez 40 nouveaux échantillons à partir de l'espace d'état d'entrée.
sampler_2 = copy(sampler_orig); sampler_2.MaxAttempts = 100; states_2 = sample(sampler_2,40);
Définissez le nombre maximum de tentatives pour trouver des échantillons valides sur 200 et générez 40 nouveaux échantillons à partir de l'espace d'état d'entrée.
sampler_3 = copy(sampler_orig); sampler_3.MaxAttempts = 200; states_3 = sample(sampler_3,40);
Affichez les résultats à l'aide de la fonction d'assistance helperDisplayStates
. Notez que, à mesure que le nombre de tentatives augmente, les échantillons se concentrent davantage autour de la limite de l’obstacle.
helperDisplayStates(map,states_orig,sampler_2,states_2,sampler_3,states_3,"MaxAttempts");
Varier l'écart type
Créez des copies de l'objet échantillonneur d'état d'origine et modifiez l'écart type, propriété de l'échantillonneur, StandardDeviation,
pour étudier son impact sur les résultats d'échantillonnage. Définissez le nombre maximum de tentatives sur 200.
Générez 40 échantillons avec les valeurs d’écart type par défaut.
sampler_orig.MaxAttempts = 200; states_orig = sample(sampler_orig,40);
Définissez les valeurs d’écart type sur [0,01 0,01 0,06]. Générez 40 nouveaux échantillons à partir de l’espace d’état d’entrée.
sampler_4 = copy(sampler_orig); sampler_4.StandardDeviation = [0.01 0.01 0.06]; states_4 = sample(sampler_4,40);
Définissez les valeurs d’écart type sur [0,5 0,5 0,06]. Générez 40 nouveaux échantillons à partir de l’espace d’état d’entrée.
sampler_5 = copy(sampler_orig); sampler_5.StandardDeviation = [0.5 0.5 0.06]; states_5 = sample(sampler_5,40);
Affichez les résultats à l'aide de la fonction d'assistance helperDisplayStates
. Notez que, à mesure que vous augmentez les valeurs d’écart type, les échantillons se concentrent davantage autour de la limite de l’obstacle. Cependant, si les valeurs d'écart type sont supérieures à la largeur des passages étroits dans l'espace d'entrée, l'échantillonneur génère des résultats incorrects.
helperDisplayStates(map,states_orig,sampler_4,states_4,sampler_5,states_5,"Std.Deviation");
Fonction d'assistance
helperDisplayStates
affiche les résultats à l’aide d’une fenêtre de figure personnalisée.
function helperDisplayStates(map,states_orig,sampler_2,states_2,sampler_3,states_3,select) if select == "MaxAttempts" title_1 = "MaxAttempts = 10 (Default value)"; title_2 = strcat("MaxAttempts = ",num2str(sampler_2.MaxAttempts)); title_3 = strcat("MaxAttempts = ",num2str(sampler_3.MaxAttempts)); elseif select == "Std.Deviation" title_1 = "StandardDeviation = [0.1 0.1 0.06] (Default value)"; title_2 = strcat("StandardDeviation = [0.01 0.01 0.06]"); title_3 = strcat("StandardDeviation = [0.5 0.5 0.06]"); end fig_1 = figure(Position=[0 0 700 300]); movegui("center") panel_1 = uipanel(fig_1, ... Position=[0 0 0.33 1], ... Title=title_1); hPlot1 = axes(panel_1); show(map,Parent=hPlot1); hold on; plot(states_orig(:,1),states_orig(:,2),plannerLineSpec.state{:}) hold off panel_2 = uipanel(fig_1, ... Position=[0.33 0 0.33 1], ... Title=title_2); hPlot2 = axes(panel_2); show(map,Parent=hPlot2); hold on; plot(states_2(:,1),states_2(:,2),plannerLineSpec.state{:}) hold off panel_3 = uipanel(fig_1, ... Position=[0.66 0 0.33 1], ... Title=title_3); hPlot3 = axes(panel_3); show(map,Parent=hPlot3); hold on; plot(states_3(:,1),states_3(:,2),plannerLineSpec.state{:}) hold off end
Arguments d'entrée
sampler
— Objet échantillonneur d'état
Objet stateSamplerGaussian
Objet échantillonneur d'état, spécifié comme objet stateSamplerGaussian
.
numsamples
— Nombre d'échantillons
1
(par défaut) | entier positif
Nombre d'échantillons, spécifié sous forme d'entier positif.
Types de données : double
Arguments de sortie
states
— Échantillons d'état
M-by- N matrice de valeurs réelles
Échantillons d'état, renvoyés sous la forme d'une matrice M-par- N de valeurs réelles. M est le nombre d’états. N est le nombre de variables d'état. Chaque ligne de la matrice spécifie les variables d'état correspondant au modèle d'espace d'état d'entrée. Par exemple, pour le modèle d'espace d'état SE(2), N vaut 3 et chaque ligne est de la forme [x
, y
, theta
].
Types de données : double
Historique des versions
Introduit dans R2023b
Commande MATLAB
Vous avez cliqué sur un lien qui correspond à cette commande MATLAB :
Pour exécuter la commande, saisissez-la dans la fenêtre de commande de MATLAB. Les navigateurs web ne supportent pas les commandes MATLAB.
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)