poseGraphSolverOptions
Options du solveur pour l'optimisation du graphique de pose
Depuis R2020b
Description
renvoie l'ensemble des options du solveur avec les valeurs par défaut pour le type de solveur de graphe de pose spécifié.solverOptions
= poseGraphSolverOptions(solverType
)
Exemples
Optimiser et couper les fermetures de boucles pour les graphiques de pose 2D
Optimisez un graphique de pose en fonction des nœuds et des contraintes de bord. Boucle de coupe fermée en fonction de leurs erreurs résiduelles de bord.
Chargez l’ensemble de données contenant un graphique de pose 2D. Inspectez l'objet poseGraph
pour afficher le nombre de nœuds et de fermetures de boucle.
load grid-2d-posegraph.mat pg disp(pg)
poseGraph with properties: NumNodes: 120 NumEdges: 193 NumLoopClosureEdges: 74 LoopClosureEdgeIDs: [120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 ... ] (1x74 double) LandmarkNodeIDs: [1x0 double]
Tracez le graphique de pose sans les identifiants. Les lignes rouges indiquent les fermetures de boucles identifiées dans l'ensemble de données. Les poses dans le graphique doivent suivre un quadrillage, mais montrer des signes de dérive au fil du temps.
show(pg,'IDs','off'); title('Original Pose Graph')
Optimisez le graphique de pose à l'aide de la fonction optimizePoseGraph
. Par défaut, cette fonction utilise le solveur "builtin-trust-region"
. Étant donné que le graphique de pose contient des fermetures de boucle incorrectes, le graphique de pose résultant n'est en réalité pas souhaitable.
pgOptim = optimizePoseGraph(pg); figure; show(pgOptim);
Examinez les erreurs résiduelles de bord pour le graphique de pose d'origine. De grandes valeurs d’erreur aberrantes à la fin indiquent de mauvaises fermetures de boucle.
resErrorVec = edgeResidualErrors(pg);
plot(resErrorVec);
title('Edge Residual Errors by Edge ID')
Certaines fermetures de boucles doivent être supprimées du graphique de pose en fonction de leur erreur résiduelle. Utilisez la fonction trimLoopClosures
pour supprimer ces mauvaises fermetures de boucle. Définissez le seuil maximum et de troncature pour les paramètres de découpage. Ce seuil est défini en fonction de la précision des mesures et doit être adapté à votre système.
trimParams.MaxIterations = 100; trimParams.TruncationThreshold = 25; solverOptions = poseGraphSolverOptions;
Utilisez la fonction trimLoopClosures
avec les paramètres de découpage et les options du solveur.
[pgNew, trimInfo, debugInfo] = trimLoopClosures(pg,trimParams,solverOptions);
À partir de la sortie trimInfo
, tracez les fermetures de boucle supprimées du graphique de pose optimisé. En traçant avec le tracé des erreurs résiduelles auparavant, vous pouvez voir que les grandes fermetures de boucles d'erreur ont été supprimées.
removedLCs = trimInfo.LoopClosuresToRemove; hold on plot(removedLCs,zeros(length(removedLCs)),'or') title('Edge Residual Errors and Removed Loop Closures') legend('Residual Errors', 'Removed Loop Closures') xlabel('Edge IDs') ylabel('Edge Residual Error') hold off
Affichez le nouveau graphique de pose avec les mauvaises fermetures de boucles supprimées.
show(pgNew,"IDs","off");
Arguments d'entrée
solverType
— Type de solveur de graphique de pose
'builtin-trust-region'
(par défaut) | 'g2o-levenberg-marquardt'
Type de solveur de graphique de pose, spécifié comme 'builtin-trust-region'
ou 'g2o-levenberg-marquardt'
.
La fonction génère un ensemble d'options de solveur avec des valeurs par défaut pour le type de solveur de graphique de pose spécifié :
pgSolverTrustRegion = poseGraphSolverOptions('builtin-trust-region')
pgSolverTrustRegion = TrustRegion (builtin-trust-region-dogleg) options: MaxIterations: 300 MaxTime: 10 FunctionTolerance: 1.0000e-08 GradientTolerance: 5.0000e-09 StepTolerance: 1.0000e-12 InitialTrustRegionRadius: 100 VerboseOutput: 'off'
pgSolverG2o = poseGraphSolverOptions('g2o-levenberg-marquardt')
pgSolverG2o = G2oLevenbergMarquardt (g2o-levenberg-marquardt) options: MaxIterations: 300 MaxTime: 10 FunctionTolerance: 1.0000e-09 VerboseOutput: 'off'
Types de données : char
| string
Arguments de sortie
solverOptions
— Options du solveur de graphe de pose
Paramètres poseGraphSolverOptions
Options du solveur de graphe de pose, spécifiées sous la forme d'un ensemble de paramètres générés en appelant la fonction poseGraphSolverOptions
. La fonction génère un ensemble d'options de solveur avec des valeurs par défaut pour le type de solveur de graphique de pose spécifié.
Si l'entrée solverType
est définie sur "builtin-trust-region"
:
Défaut | Description | |
---|---|---|
MaxIterations | 300 | Nombre maximum d'itérations, spécifié sous forme d'entier positif. L'optimiseur se ferme après avoir dépassé ce nombre d'itérations. |
MaxTime | 500 | Temps maximum autorisé, spécifié sous forme d'un scalaire numérique positif en secondes. L'optimiseur se ferme après avoir dépassé ce délai. |
FunctionTolerance | 1e-8 | Limite inférieure de la variation de la fonction de coût, spécifiée sous forme scalaire. Si la modification de la fonction de coût tombe en dessous de cette valeur entre les étapes d'optimisation, l'optimiseur se termine. |
GradientTolerance | 0.5e-8 | Limite inférieure de la norme du gradient, spécifiée sous forme scalaire. La norme du gradient est calculée en fonction de la fonction de coût de l'optimisation. Si la norme tombe en dessous de cette valeur, l'optimiseur se ferme. |
StepTolerance | 1e-12 | Limite inférieure de la taille du pas, spécifiée sous forme scalaire. Si la norme de l'étape d'optimisation tombe en dessous de cette valeur, l'optimiseur se termine. |
InitialTrustRegionRadius | 100 | Rayon initial de la région de confiance, spécifié sous forme de scalaire. |
VerboseOutput | 'off' ou 'on' | Affichez les informations d'itération intermédiaire sur la ligne de commande MATLAB® . |
Si l'entrée solver
est définie sur "g2o-levenberg-marquardt"
:
Défaut | Description | |
---|---|---|
MaxIterations | 300 | Nombre maximum d'itérations, spécifié sous forme d'entier positif. L'optimiseur se ferme après avoir dépassé ce nombre d'itérations. |
MaxTime | 500 | Temps maximum autorisé, spécifié sous forme d'un scalaire numérique positif en secondes. L'optimiseur se ferme après avoir dépassé ce délai. |
FunctionTolerance | 1e-8 | Limite inférieure de la variation de la fonction de coût, spécifiée sous forme scalaire. Si la modification de la fonction de coût tombe en dessous de cette valeur entre les étapes d'optimisation, l'optimiseur se termine. |
VerboseOutput | 'off' ou 'on' | Affichez les informations d'itération intermédiaire sur la ligne de commande MATLAB . |
Historique des versions
Introduit dans R2020b
Voir aussi
Fonctions
trimLoopClosures
|edgeResidualErrors
|edgeResidualErrors
|removeEdges
|edgeNodePairs
|edgeConstraints
Objets
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)