Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

isConnected

Vérifiez si le graphique des facteurs est connecté

Depuis R2022a

Description

La fonction isConnected renvoie un indicateur logique qui indique si le graphe de facteurs, ou un graphe de facteurs partiel construit à partir de nœuds de pose spécifiés, contient un chemin entre chaque paire de nœuds.

connected = isConnected(graph) renvoie un indicateur logique indiquant si le graphe de facteurs spécifié contient un chemin entre chaque paire de nœuds qui lui est associée.

exemple

connected = isConnected(graph,poseNodeIDs) renvoie un indicateur logique indiquant si un graphique de facteurs partiels composé des ID de nœuds de pose spécifiés poseNodeIDs, et des facteurs associés et des nœuds sans pose, contient un chemin entre chaque paire de nœuds. Pour plus d’informations, consultez Connectivité du graphique factoriel.

Exemples

réduire tout

Créez un graphique factoriel.

fg = factorGraph;
poseIDs1 = generateNodeID(fg,2,"factorTwoPoseSE3")
poseIDs1 = 2×2

     0     1
     1     2

poseFactors1 = factorTwoPoseSE3(poseIDs1);
addFactor(fg,poseFactors1);

Vérifiez la connectivité.

isConnected(fg)
ans = logical
   1

Le graphe est connecté car il existe un chemin entre chaque paire de nœuds du graphe. Par exemple, vous pouvez atteindre le nœud 2 depuis le nœud 0 en passant par le nœud 1.

Essayez ensuite d'ajouter un nœud déconnecté. Générez un ID de nœud pour un facteur GPS.

gpsID = generateNodeID(fg,1,"factorGPS")
gpsID = 3

Créez le facteur GPS et ajoutez-le au graphique des facteurs.

gpsFactor = factorGPS(gpsID);
addFactor(fg,gpsFactor);

Vérifiez la connectivité. Notez que comme le nouveau nœud spécifié par le facteur GPS n’est connecté à aucun des nœuds précédents, il y a une déconnexion.

isConnected(fg)
ans = logical
   0

Ajoutez un autre facteur entre le nœud 2 et le nœud 3 pour résoudre cette déconnexion.

poseFactors2 = factorTwoPoseSE3([2 3]);
addFactor(fg,poseFactors2);

Vérifiez la connectivité pour vérifier que le graphique est à nouveau connecté.

isConnected(fg)
ans = logical
   1

Arguments d'entrée

réduire tout

Objet Factor, spécifié comme objet factorGraph .

ID des nœuds de pose pour vérifier la connexion dans le graphe de facteurs, spécifiés comme un vecteur de ligne d'éléments N d'entiers non négatifs. N est le nombre total de nœuds à vérifier.

Les nœuds de pose spécifiés par poseNodeIDs doivent tous être de type "POSE_SE2", ou doivent tous être de type "POSE_SE3". Les nœuds de pose spécifiés doivent également être uniques. Par exemple, poseNodeIDs ne peut pas être [1 2 1] car l'ID de nœud 1 n'est pas unique dans ce vecteur.

Les nœuds de pose spécifiés dans le graphe de facteurs doivent former un graphe de facteurs connecté. Pour plus d’informations, consultez Connectivité du graphique factoriel.

Arguments de sortie

réduire tout

Le graphique est connecté dans le graphique factoriel ou dans le graphique factoriel partiel, renvoyé sous la forme 1 (true) si le graphique factoriel contient un chemin entre chaque paire de nœuds spécifiés et 0 (false) s'il ne contient pas de chemin entre chaque paire de nœuds spécifiés.

En savoir plus

réduire tout

Connectivité du graphique factoriel

Un graphe factoriel est considéré comme connecté s’il existe un chemin entre chaque paire de nœuds. Par exemple, pour un graphe de facteurs contenant quatre nœuds de pose, connectés consécutivement par trois facteurs, il existe des chemins dans le graphe de facteurs allant d'un nœud du graphique à n'importe quel autre nœud du graphique.

connected = isConnected(fg,[1 2 3 4])
connected =

     1

Simple factor graph showing for connectivity between four pose nodes

Si le graphe ne contient pas le nœud 3, bien qu'il existe toujours un chemin du nœud 1 au nœud 2, il n'y a pas de chemin du nœud 1 ou du nœud 2 au nœud 4.

connected = isConnected(fg,[1 2 4])
connected =

     0

Simple factor graph showing disconnectivity by not having node 3

Un graphique factoriel entièrement connecté est important pour l’optimisation. Si le graphique factoriel n'est pas entièrement connecté, l'optimisation se produit séparément pour chacun des graphiques déconnectés, ce qui peut produire des résultats indésirables. La connectivité des graphiques peut devenir plus complexe lorsque vous spécifiez certains sous-ensembles d'ID de nœud de pose à optimiser. En effet, la fonction optimize optimise des parties du graphique de facteurs en utilisant les ID spécifiés pour identifier les facteurs à utiliser pour créer un graphique de facteurs partiel. optimize ajoute un facteur au graphique de facteur partiel si ce facteur se connecte à l'un des nœuds de pose spécifiés et ne se connecte à aucun nœud de pose non spécifié. La fonction ajoute également tous les nœuds non posés auxquels les facteurs ajoutés se connectent, mais n'ajoute pas d'autres facteurs connectés à ces nœuds. Par exemple, pour ce graphique de facteurs, il existe trois nœuds de pose, deux nœuds sans pose et les facteurs qui relient les nœuds.

Conceptual partial factor graph created by specifying pose nodes 1 and 2

Si vous spécifiez les nœuds 1 et 2, les facteurs 1, 3, 4 et 5 forment un graphique de facteurs pour l'optimisation car ils se connectent aux nœuds de pose 1 et 2. L'optimisation inclut les nœuds 4 et 5 car ils se connectent à des facteurs liés aux ID de nœud de pose spécifiés.

Conceptual partial factor graph created by specifying pose nodes 1 and 2

Si vous spécifiez poseNodeIDs comme [1 3], alors la fonction optimize optimise chaque graphe séparé séparément car le graphe de facteurs formé ne contient pas de chemin. entre les nœuds 1 et 3.

Conceptual partial factor graph, disconnected because there is no path between nodes 1 and 3

Capacités étendues

Génération de code C/C++
Générez du code C et C++ avec MATLAB® Coder™.

Historique des versions

Introduit dans R2022a

développer tout

Voir aussi

Objets