Cours:SaeFusionDecision
Fusion de décision multicapteurs, par vote pondéré
Le vote pondéré est particulièrement adapté à une architecture multi-capteurs car il permet de traduire une hiérarchie de fiabilité tout en restant déterministe et interprétable, en restant léger en calculs
Sommaire
Mécanisme général
Chaque module de perception (issu d'un capteur) doit renvoyer plus qu'une donnée brute, mais plutôt un vecteur de décision ou un score pour chaque action possible.
Par exemple :
- Actions possibles :
Avancer,Tourner_Gauche,Tourner_Droite,Stop,Reculer. - Sortie du capteur i : Un vecteur de scores
S_i = [s_avancer, s_gauche, s_droite, s_stop, s_reculer].- Exemple 1 : Le LIDAR voit un mur à 2m devant :
Stop: 0.9,Gauche: 0.8,Droite: 0.1,Avancer: 0.0. - Exemple 2 : La caméra voit la voie libre :
Avancer: 0.9,Stop: 0.1.
- Exemple 1 : Le LIDAR voit un mur à 2m devant :
Agrégation et Décision
Le score final pour chaque action est la somme pondérée :
Score_final(action) = Σ_i (W_i × s_action) pour i allant de 1 à N (N = nb de capteurs).
Décision :
- L'action avec le score final le plus élevé est choisie, éventuellement à condition qu'elle dépasse un seuil de validité minimal (pour éviter de bouger si tous les capteurs sont incertains).
- Il est possible de mettre en place une sécurité. Par exemple Si le score
Stop_Urgencedes capteurs de proximité (Ultrason/IR) dépasse un seuil critique (ex: 0.95), l'actionStopest exécutée immédiatement, quel que soit le vote des autres.
Filtrage :
- Pour éviter les oscillations (zigzag) si les scores sont proches, appliquez un lissage temporel
Choix des poids
Les poids W_i peuvent être dynamiques et dépendre du contexte. Par exemple :
W_i = C_base × F_contexte × F_confiance
- C_base (Hiérarchie statique) : Priorité intrinsèque à décider en amont. Par exemple :
- Ultrason/IR : Poids très élevé pour l'action
Stop(sécurité physique prioritaire). - LIDAR : Poids élevé pour la navigation globale.
- Caméra : Poids moyen (sensible à la lumière).
- Ultrason/IR : Poids très élevé pour l'action
- F_contexte (Fiabilité environnementale) : Priorité qui peut dépendre de l'environnement, d'autres capteurs, ... Par exemple
- Si luminosité < seuil → Poids Caméra ≈ 0.
- Si surface absorbante (tapis noir) → Poids Ultrason/IR réduit.
- Si brouillard/poussière → Poids LIDAR/Caméra réduit.
- F_confiance (Auto-évaluation) :
- Chaque élément de détection peut renvoyer son propre score de confiance (ex: probabilité de la détection d'obstacle). Par exemple si la détection de la caméra est incertainte (confiance 0.4), son vote est automatiquement pondéré à la baisse.
Point de vigilance
Il faut prévoir un cas par défaut si le vote est parfaitement équilibré ou si le score maximal est trop faible (incertitude globale trop haute). La décision par défaut doit être conservative : Arrêt sécurisé ou Recul prudent.
Exemple concret
Prenons le Lidar et la caméra Pixi :
- ces deux modules founissent un angle qui indique le cap à suivre
- il s'agit donc de fusionner la décision de ces deux modules, pour calculer un angle unique de cap à suivre.
Cas simple : pondération générale
On décide d'un poids général pour chacun des modules (pour les hiérarchiser), par exemple :
-
poids_lidar = 0.6 -
poids_pixi = 0.4
Ici on décide de privilégier la décision du lidar par rapport à celle de la caméra.
Il faut s'assurer que poids_lidar + poids_pixi = 1
La fusion est la somme pondérée des deux décisions (donc des deux angles). Soit
score_lidar = poids_lidarscore_pixi = poids_pixiangle_final = lidar.angle * score_lidar + pixi.angle * score_pixi
- On pourrait aussi décider que les poids changent en fonction de la situation. Par exemple :
- distance faible (infériure à un seuil) =>
score_lidar = 0.6etscore_pixi = 0.4 - distance élevée (supérieure au seuil) =>
score_lidar = 0.3etscore_pixi = 0.7
- distance faible (infériure à un seuil) =>
Avec estimation de confiance
Si on arrive à estimer une fiabilité de chaque mesure, chaque module donne un angle et une confiance (entre 0 et 1). Donc par exemple:
- Lidar :
lidar.angle=10etlidar.confiance=0.7 - Pixi :
pixi.angle=-5etpixi.confiance=0.3
La confiance peut être estimée à partir de la distance, ou bien de la largeur de la réponse.
On peut donc faire également la somme pondérée des deux angles. Il faut s'assurer que la somme des scores vaut 1. Donc :
score_lidar = lidar.confiance/(lidar.confiance + pixi.confiance)score_pixi = pixi.confiance/(lidar.confiance + pixi.confiance)angle_final = lidar.angle * score_lidar + pixi.angle * score_pixi
Avec estimation de confiance ET hiérarchie
On peut évidemment combiner les deux. On aurait donc :
- Une pondération générale des deux modules :
-
poids_lidar = 0.6 -
poids_pixi = 0.4
-
- Une confiance pour chaque mesures :
-
lidar.confiance=0.7 -
pixi.confiance=0.3 - Et évidemment nos deux mesures :
-
lidar.angle=10 -
pixi.angle=-5
Il suffit alors de calculer des score en multipliant les poids (et en s'assurant que la somme des scores vaut 1) :
-
score_lidar = lidar.confiance*poids_lidar/(lidar.confiance*poids_lidar + pixi.confiance*poids_pixi) -
score_pixi = pixi.confiance*poids_pixi/(lidar.confiance*poids_lidar + pixi.confiance*poids_pixi) -
angle_final = lidar.angle * score_lidar + pixi.angle * score_pixi
La feuille de calcul suivante illustre cette fusion : https://docs.google.com/spreadsheets/d/16FwxqFmsJsAHjfXUKSS-HSLFPvuHmSxn/edit?usp=sharing&ouid=103791012157110322336&rtpof=true&sd=true