FR 3116640 A1 20220527 FR 2011937 A 20201120 L’invention concerne un procédé itératif d’estimation du mouvement d’au moins un corps matériel dans un espace environnant discrétisé en une grille de cellules, dans lequel comprenant les étapes suivantes : a) obtention d’une grille d’incohérence à l’itération t générée en réponse à une détection d'un changement d’état d’occupation dans au moins une des cellules de la grille de cellules entre une itération t-1 et l’itération t, b) génération par récurrence d’une grille de mouvement filtrée à l’itération t , ) comprenant, pour chaque cellule de la grille d’incohérence à l’itération t , une probabilité postérieure que le corps matériel ait effectué un mouvement selon au moins une composante de mouvement caractérisant ledit mouvement, ladite composante de mouvement faisant partie d’un ensemble discret de composantes autour de ladite cellule, ladite grille de mouvement filtrée à l’itération t ) étant générée à partir de la grille de mouvement filtrée à l’itération t-1 , ), d’une grille d’incohérence de l’itération t-1 , et de la grille d’incohérence à l’itération t . Figure pour l’abrégé : Fig 1 Procédé itératif d’estimation du mouvement d’un corps matériel par génération d’une grille de mouvement filtrée L'invention se rapporte à un procédé permettant d'estimer le mouvement d’un corps matériel en déplacement dans l’environnement d’un dispositif autonome (également appelé robot par la suite) à l'aide de capteurs de distance. Elle concerne également un dispositif pour la mise en œuvre d'un tel procédé. L'invention peut être appliquée à tout type de robots, par exemple des robots terrestres (voitures autonomes), robots aériens (drones), robots sous-marins, etc. Un robot mobile navigue dans l'espace pour effectuer une tâche. Pour naviguer de manière autonome, le robot doit acquérir des connaissances sur son environnement afin de planifier un chemin, éviter les collisions et naviguer en toute sécurité. Le robot s'appuie à cet effet sur un système de perception. Le système de perception récupère des données sur l'environnement grâce à des mesures à partir de capteurs embarqués. Un modèle informatique de l'environnement est ensuite construit et mis à jour en continu par le système de perception basé sur des mesures de capteurs. Le robot raisonnera et prendra des décisions de navigation basées sur le modèle d'environnement. Plusieurs types de modèles d'environnement existent dans l'état de l'art. L'un des plus couramment utilisés en robotique est la grille d’occupation initialement introduite dans l’article de H.P. Moravec et A. Elfes « High resolution maps from wide angle sonar », Proceedings. IEEE ICRA, volume 2, pages 116-121, Mar 1985. La grille d’occupation est une grille de probabilités : chaque cellule a une probabilité d’occupation, donc une valeur comprise entre 0 et 1. Une grille d’occupation est une carte d'une région délimitée de l'environnement entourant le robot. La région est subdivisée en plusieurs sous-régions adjacentes appelées cellules. Une cellule peut avoir trois dimensions (3D), par exemple, un cube de 10 cm × 10 cm × 10 cm. Il peut également être en deux dimensions (2D), par exemple, l'espace délimité par un carré de 10 cm × 10 cm. La collection de toutes les cellules forme une grille. Une cellule est caractérisée par une valeur comprise entre 0 et 1, représentant la probabilité que la cellule soit occupée (on parle de probabilité d’occupation). La grille de caractéristiques est obtenue par seuillage de la grille d’occupation, comme décrit dans la demande de brevet FR3041451. Une grille de caractéristiques est donc une grille booléenne: chaque cellule est « VRAIE » si sa probabilité d’occupation dépasse un certain seuil. Les grilles d’occupation présentent des propriétés avantageuses pour un système de perception. Ils constituent une méthode robuste pour fusionner plusieurs capteurs de différentes technologies. La demande de brevet FR3041451 fournit un exemple de procédé de fusion multi-capteurs mettant en œuvre des calculs en arithmétique entière. Les technologies de détection couramment utilisées sont les LIDAR, les RADAR, les caméras et les SONAR. Alors que les caméras donnent des couleurs et des textures détaillées, elles sont limitées dans l'obscurité. Les LIDAR peuvent donner une représentation détaillée de nuages de points, mais leurs performances diminuent en cas de mauvais temps (neige, brouillard ou pluie). La fusion multi-capteurs est pour cela essentielle pour surmonter la limitation d'une technologie donnée. Les grilles d'occupation permettent également de gérer les incertitudes de mesure et les bruits par des approches probabilistes. Les grilles de caractéristiques représentent ainsi l'espace libre et l'espace occupé par un ou plusieurs corps matériels. On appelle « corps matériels » (ou obstacle) toute substance ou objet matériel présentant une individualité et pouvant être détecté et identifié par un capteur approprié. Ainsi, sont considérés des corps matériels les objets inanimés, qu'ils soient naturels ou artificiels, les végétaux, les animaux, les êtres humains, mais aussi des particules liquides ou solides en suspension dans l'air, comme les nuages, voire des masses liquides ou gazeuses. Par exemple, pour une voiture autonome, les corps matériels courants sont les piétons, les autres voitures, les bâtiments, la végétation, les cyclistes, etc. Les corps matériels peuvent être mobiles, c'est-à-dire dynamiques ou statiques. Le mouvement des corps matériels peut varier dans le temps. Par exemple, un piéton peut se lever sans bouger pendant une courte période, puis marcher dans une direction. Le mouvement des corps matériels peut également être difficile à prévoir. Par exemple, un piéton qui marche peut soudainement changer de direction pour une raison inconnue. Bien que les grilles de caractéristiques fournissent une estimation de l'emplacement des corps matériels, il leur manque un modèle de leurs mouvements. En effet, estimer le mouvement des corps matériels est essentiel pour pouvoir suivre l’évolution des corps matériels dans le temps, prédire leurs positions dans un futur proche, prédire les collisions potentielles et adapter la planification de trajectoire de son propre robot en conséquence. Plusieurs travaux ont été réalisés dans l’état de la technique afin d’étendre les grilles de caractéristiques pour réaliser l’estimation du mouvement des corps matériels. Les corps matériels mobiles modifient l'état d'occupation des cellules au fil du temps. Pour estimer leur mouvement, l'approche couramment utilisée consiste à développer différents algorithmes pour suivre l'évolution des emplacements des cellules occupées dans le temps. Si ces solutions donnent des résultats prometteurs, leur mise en œuvre sur des unités de traitement embarquées - où les contraintes d'intégration telles que le faible coût, la faible consommation d'énergie et le traitement en temps réel doivent être satisfaites - reste un défi en raison d'une forte demande en puissance de calcul. Dans les solutions présentes dans l'état de l'art il existe deux types d'approches, dénommées ici le suivi des cellules indépendantes et la détection de cellules dynamiques. Dans la première approche de suivi des cellules indépendantes, en plus de l'estimation de l'état d'occupation de chaque cellule, une distribution de vitesse probabiliste par cellule est également estimée. La distribution de vitesse estime les vecteurs de vitesse probables de chaque cellule. Cette approche a été initialement introduite par l'algorithme du Filtre Bayésien d’Occupation dans la demande de brevet FR2890773. Le Filtre Bayésien d’Occupation estime l'occupation de chaque cellule et calcule également une distribution sur un nombre constant de vecteurs de vitesse possibles. Si le Filtre Bayésien d’Occupation permet d'estimer la vitesse, sa mise en œuvre se caractérise par une charge de calcul élevée et une consommation de mémoire élevée, gênant son intégration dans une unité de traitement embarquée. Le Filtre Bayésien d’Occupation a besoin d'une carte graphique haut de gamme dédiée pour fonctionner en temps réel, ce qui n’est pas compatible pour une intégration dans des robots destinés au grand public. Pour réduire la complexité de calcul du Filtre Bayésien d’Occupation, divers algorithmes basés sur des filtres à particules ont été mis au point, par exemple celui décrit dans l’article de Nuss, D., Reuter, S., Thom, M., Yuan, T., Krehl, G., Maile, M., Dietmayer, K. (2018) « A random finite set approach for dynamic occupancy grid maps with real-time application », The International Journal of Robotics Research, 37(8), 841–866. La définition d'une particule dans ces algorithmes peut différer mais en général, les particules sont un ensemble de points répartis dans l'espace. Les particules ont des coordonnées de position et un vecteur de vitesse. Une particule a également un poids utilisé pour estimer les distributions de vitesse. Entre les itérations successives, une particule se déplace en suivant sa vitesse (modulo l'introduction d'une erreur aléatoire). L'idée de base de ces algorithmes est de répandre au hasard des particules dans l'espace de sorte que leur mouvement suive le mouvement des corps matériels dynamiques. Les particules sont distribuées au sein de la grille de sorte qu'un grand nombre de particules sont présentes dans les cellules occupées par des corps matériels dynamiques. Bien que l'introduction de filtres à particules ait réduit la complexité algorithmique et également la consommation de mémoire, la mise en œuvre actuelle nécessite toujours des unités de traitement avec des dizaines de GigaFLOPS pour fonctionner en temps réel. Les implémentations actuelles de pointe sont effectuées sur des cartes graphiques intégrées dans des ordinateurs grand public. L'intégration dans des systèmes embarqués plus spécifiques tels que les microcontrôleurs reste toujours un défi car la spécification de paramètres importants comme le nombre de particules n'est pas encore claire. Il n'y a pas de méthode formelle pour déterminer le nombre minimum de particules de façon à ce que le filtre à particules converge. L'utilisation de filtres à particules rend également les algorithmes non déterministes. En effet, les filtres à particules reposent sur une étape d'échantillonnage, qui consiste essentiellement à tirer des particules en fonction de leur poids, selon une distribution d'échantillonnage connue. Le processus d'échantillonnage est un processus aléatoire où des générations de nombres aléatoires sont nécessaires dans la mise en œuvre. Par conséquent, deux exécutions de ces algorithmes basées sur la même séquence de mesures de capteurs peuvent ne pas produire exactement les mêmes résultats. Cette propriété non déterministe rend la vérification de ces algorithmes difficile. Dans la seconde approche de détection de cellules dynamiques, l'état de la cellule est étendu par une deuxième variable binaire qui est la dynamicité de la cellule : la cellule est-elle dynamique ou non (c'est-à-dire statique). Aucune distribution de vitesse n'est calculée. La probabilité qu'une cellule soit dynamique est estimée sur la base d'une analyse légère des incohérences entre les grilles d'occupation successives (voir par exemple l’article de Trung-Dung Vu, Olivier Aycard, Nils Appenrodt « Online Localization and Mapping with Moving Object Tracking in Dynamic Outdoor Environments », 2007 IEEE Intelligent Vehicles Symposium, Jun 2007, Istanbul, Turkey (inria-00194152)). Par exemple, une cellule est probablement dynamique si elle était probablement libre dans l'itération précédente et probablement occupée dans l'itération actuelle. Cela signifie qu'aucun corps matériel n'était présent dans la cellule lors de l'itération précédente, tandis qu'entre les deux itérations, un corps matériel s'est déplacé et a atteint la cellule à l'itération actuelle. Les approches qui détectent les cellules dynamiques sont légères en termes de calcul par rapport aux approches de suivi des cellules indépendantes. Elles sont moins gourmandes en calcul puisque seul un état binaire par cellule (la dynamicité) est estimé au lieu d'une distribution de probabilité sur un certain nombre de vitesses. Cependant, il leur manque une estimation du mouvement dynamique des cellules, une estimation qui est fournie par les distributions de vitesse ou par les particules dans le cas du suivi des cellules indépendantes. L’invention vise donc à fournir un procédé d’estimation du mouvement d’un corps matériel dans un espace environnant dont la mise en œuvre répondra aux contraintes d'intégration embarquées, tout en étant apte à estimer le mouvement dynamique des cellules. Un objet de l’invention est donc un procédé itératif, mis en œuvre par ordinateur ou par un circuit électronique dédié, d’estimation du mouvement d’au moins un corps matériel dans un espace environnant discrétisé en une grille de cellules, dans lequel, pour chaque itération t donnée, les étapes suivantes sont mises en œuvre : a) obtention d’une grille d’incohérence à l’itération t générée en réponse à une détection d'un changement d’état d’occupation dans au moins une des cellules de la grille de cellules entre une itération t-1 et l’itération t, b) génération par récurrence d’une grille de mouvement filtrée à l’itération t , ) comprenant, pour chaque cellule de la grille de cellules, une probabilité postérieure que le corps matériel ait effectué un mouvement selon au moins une composante de mouvement caractérisant ledit mouvement, ladite composante de mouvement faisant partie d’un ensemble discret de composantes de mouvement, ladite grille de mouvement filtrée à l’itération t ) étant générée à partir de la grille de mouvement filtrée à l’itération t-1 , ), d’une grille d’incohérence de l’itération t-1 , et de la grille d’incohérence à l’itération t . Avantageusement, l’étape b) comprend l’application d’un filtre binaire Bayésien, chaque composante de mouvement de l’ensemble discret de composantes étant une variable indépendante d’un filtre binaire Bayésien, la probabilité postérieure correspondant à la sortie dudit filtre. Avantageusement, l’étape a) comprend la génération d’une grille de caractéristiques à l’itération t , chaque cellule ayant une première valeur booléenne correspondant à un premier état d’occupation prédéterminé, ou ayant une seconde valeur booléenne différente de la première sinon, la grille d’incohérence à l’itération t étant générée à partir du changement de valeur booléenne de chaque cellule entre la grille de caractéristiques à l’itération t et une grille de caractéristiques générée lors d’une itération t-1 . Avantageusement, le procédé comprend les étapes préalables suivantes : a1) acquisition d’une pluralité de mesures de distance desdits corps matériels issues d’un ou plusieurs capteurs ; a2) application, à chaque dite mesure de distance, d'un modèle inverse du capteur correspondant sur la grille de cellules, pour déterminer une probabilité d'occupation par un corps matériel d'un ensemble de cellules de ladite grille de cellules ; et a3) construction de la grille de caractéristiques à partir des probabilités d'occupation estimées lors de l'étape a2). Avantageusement, la probabilité postérieure est approximée par une valeur appartenant à un ensemble de de cardinalité finie, ladite valeur étant identifiée par un indice entier . Avantageusement, dans l’étape b), on calcule, pour chaque élément de la grille de mouvement filtrée à l’itération t ), un indice propagé à partir des indices de la grille de mouvement filtrée calculée à l’itération précédente t-1, par la relation suivante : Pour chaque cellule A’ antécédente de la cellule A selon la direction i à l’instant t-1 ; Puis on applique un filtre binaire Bayésien avec comme entrées l’indice propagé , un indice de probabilité du modèle inverse de capteur qui correspond à la probabilité qu’une cellule A suive la composante de mouvement à l’itération sachant uniquement la mesure de capteur produite à la même itération, une probabilité que la composante de mouvement du corps matériel ne varie pas entre les itérations t-1 et t, et une probabilité que la composante de mouvement du corps matériel varie entre les itérations t-1 et t. Avantageusement, l’indice correspondant à la composante de prédiction du filtre binaire Bayésien pour l’estimation de composante de mouvement est obtenu à l’aide d’une table de consultation comprenant un ensemble fini d’indices de probabilités, et l’indice filtré est obtenu par addition d’indices entiers de probabilités. Avantageusement, la probabilité de conserver la même composante de mouvement entre les itérations t-1 et t et la probabilité de changer de composante de mouvement entre les itérations t-1 et t sont des paramètres constants en fonction du temps. Avantageusement, si, dans la grille d’incohérence de l’itération t-1 et dans la grille d’incohérence à l’itération t , un changement de valeur booléenne a été mesuré dans la composante de mouvement i par rapport à la cellule A, où est une constante entière ; sinon. Avantageusement, ledit ensemble de cardinalité finie de classes de probabilité est formé par l’union d’un ou plusieurs sous-ensembles tels que, lors de l’étape a3), une fusion de deux classes de probabilité appartenant à un même sous-ensemble fournisse un résultat appartenant aussi audit sous-ensemble. Avantageusement, l’ensemble de cardinalité finie de classes de probabilité, désigné par , est formé par l’union de deux sous-ensembles et définis par : l’indice n prenant des valeurs entières relatives, et les valeurs numériques des classes de probabilité étant définies par récurrence de la manière suivante : Où est un paramètre prédéterminé et dans lequel, lors de ladite étape a3), la fusion entre deux classes de probabilités , est calculée par application de l’équation suivante : Avantageusement, la composante de mouvement correspond à une direction entre deux cellules de la grille de cellules, ou à une vitesse de déplacement d'une cellule à une autre selon une direction donnée. L’invention se rapporte aussi à un procédé d’évitement d’un corps matériel en mouvement autour d’un corps mobile, mettant en œuvre le procédé précité pour estimer le mouvement du corps matériel, et qu’il envoie une commande à un actionneur du corps mobile afin d’éviter ledit corps matériel. L’invention se rapporte aussi à un dispositif d’estimation du mouvement d’un corps matériel dans un espace environnant un corps mobile, comprenant: - au moins un port d'entrée pour recevoir une pluralité de signaux représentatifs d'une série temporelle de mesures de distance issues d'un ou plusieurs capteurs de distance, et - un processeur de données configuré pour recevoir en entrée lesdits signaux, pour générer une grille de caractéristiques à partir desdits signaux, et pour caractériser une dynamique du corps matériel en appliquant un procédé précité. L’invention se rapporte aussi à un dispositif d’estimation du mouvement d’un corps matériel dans un espace environnant un corps mobile, comprenant: - au moins un port d'entrée pour recevoir une série temporelle de grilles de caractéristiques issues d'une ou plusieurs caméras événementielles, et - un processeur de données configuré pour recevoir en entrée ladite série et pour caractériser une dynamique du corps matériel en appliquant un procédé précité. L’invention se rapporte aussi à un corps mobile, comprenant un dispositif précité. D’autres caractéristiques, détails et avantages de l’invention ressortiront à la lecture de la description faite en référence aux dessins annexés donnés à titre d’exemple et qui représentent, respectivement : la représente une vue globale du procédé selon l’invention, à une itération t ; la représente un exemple de grille de caractéristiques à l’itération t ; la représente un exemple de grille d’incohérence à l’itération t et à l’itération t-1 la représente une vue détaillée de la génération d’une grille de mouvement filtrée de direction à l’itération t ; la représente une vue détaillée de la génération d’une grille de mouvement filtrée de vitesse à l’itération t ; la représente un masque de direction permettant le découpage, autour d’une cellule donnée, de l’ensemble des directions de déplacement ; la représente un masque de vitesse permettant le découpage, autour d’une cellule donnée, de l’ensemble des vitesses de déplacement ; la représente un tableau indiquant les indices de chaque direction du masque de direction, autour de chaque cellule de la grille ; la représente un exemple de grille d’incohérence sur laquelle est appliquée un masque de direction ; la représente le calcul de la propagation des indices d’une cellule, en fonction des indices de la grille de mouvement filtrée à l’itération précédente ; la représente un exemple de grille d’incohérence sur laquelle est appliquée un masque de vitesse ; la représente une variante des figures 6A et 6B, dans laquelle on utilise un masque comprenant vingt-quatre zones, permettant d’utiliser conjointement des composantes de mouvement de type direction, et des composantes de mouvement de type vitesse (pour une même direction) ; la illustre le cas où un sous-ensemble du masque est considéré. La représente, de façon schématique, les différentes données d’entrée et de sortie du procédé selon l’invention. Le procédé selon l’invention est présenté selon un premier mode de réalisation, dans lequel le mouvement d’un corps matériel est caractérisé par une première composante de mouvement correspondant à la direction et par une deuxième composante de mouvement correspondant à la vitesse. On utilisera donc un masque de direction, et un masque de vitesse. Génération de grille de caractéristiques Le procédé fonctionne de façon itérative : à chaque itération t, on effectue une nouvelle série de mesures, ce qui permet de mettre à jour l’estimation du mouvement. A chaque itération t, on génère une grille de caractéristiques, qu’on appellera par la suite grille de caractéristiques à l’itération t . Puis, on observe si des cases de la grille de caractéristiques qui sont « FAUX » à une itération donnée deviennent « VRAIE » à l’itération suivante » (ou l’inverse). L’information d’apparition, ou de disparition, se retrouve dans la grille d’incohérence à l’itération t . A chaque itération t, on dispose donc de la grille d’incohérence à l’itération t , et de la grille d’incohérence à l’itération t . Comme on peut le voir sur la figure 1, on génère ensuite une grille de mouvement filtrée de direction à l’itération t , et une grille de mouvement filtrée de vitesse à l’itération t , qui sont déterminées par récurrence à partir de la grille d’incohérence à l’itération t , de la grille d’incohérence à l’itération t , et respectivement de la grille de mouvement filtrée de direction à l’itération t-1 et de la grille de mouvement filtrée de vitesse à l’itération t-1 . L’idée à la base de l’invention consiste à décrire le mouvement de chaque cellule de la grille par un ensemble fini et discret de directions, et chaque direction est ensuite discrétisée en un nombre fini de vitesses. Cette représentation discrète des directions et des vitesses de déplacement est facilement configurable et impacte linéairement sur la complexité temporelle et sur les ressources en mémoire nécessaire pour exécuter l'algorithme. L’utilisateur, en jouant sur le nombre de directions et/ou sur le nombre de vitesses, peut ainsi jouer sur la précision du modèle de mouvement et sur les performances de mise en œuvre et d’exécution. En particulier, la complexité algorithmique dépend du nombre de cellules de la grille, du nombre de cellules de chaque masque, du nombre de directions, et du nombre de vitesses par direction. L’estimation de la dynamique des corps matériels se déplaçant autour du capteur est ainsi effectuée de façon déterministe, le procédé selon l’invention ne faisant appel à aucune génération de nombre aléatoire. Connaissant la fréquence d’itération des mesures , la longueur de chaque cellule et la longueur du masque (en nombre de cellules), on peut facilement déterminer la vitesse minimale détectée par itération ( , ainsi que la vitesse minimale détectée par itération ( , et jouer notamment sur la taille du masque pour régler la vitesse minimale de détection et la vitesse maximale de détection. La partie à gauche de la figure 2 illustre deux corps matériels détectés à l’itération t, à savoir les corps « Feat A » et « Feat B ». La grille de caractéristiques , illustrée par la partie à droite de la , peut être générée à partir d’une série de mesures de distance issues d’un ou de plusieurs capteurs. En fonction de la mesure de distance, on détermine ensuite une probabilité d’occupation, qui dépend du modèle inverse du capteur, comme décrit notamment dans la demande de brevet FR3041451. On obtient ainsi une probabilité d’occupation pour chaque cellule de la grille de cellules, comprise entre 0 et 1 (grille d’occupation). Cette probabilité est ensuite transformée en valeur booléenne (de type VRAI/FAUX), en appliquant un seuil, qui peut typiquement être égal à 0,5. Pour des raisons de simplicité de l’exposé, l’invention sera décrite avec un seul capteur permettant d’effectuer les mesures de distance. Le fait d’effectuer les mêmes calculs avec des mesures issues de plusieurs capteurs ne pose aucune difficulté pour l’homme du métier. La grille de caractéristiques , illustrée par exemple par la , a donc autant de cellules que la grille d’occupation, et chaque cellule a une valeur booléenne propre au caractère occupé ou non. Génération de grille d’incohérence La figure 3 illustre, pour trois itérations successives, la grille de caractéristiques à l’itération t-2 , la grille de caractéristiques à l’itération t-1 , et la grille de caractéristiques à l’itération t . Sur chacune de ces grilles, on peut voir des cellules dont la probabilité d’occupation est supérieure au seuil choisi. On construit deux grilles d’incohérence et . Chaque cellule de la grille d’incohérence prend la valeur booléenne « VRAI » si la cellule correspondante de la grille de caractéristiques a vu sa valeur booléenne changer entre la grille de caractéristiques et la grille de caractéristiques . De même, chaque cellule de la grille d’incohérence prend la valeur booléenne « VRAI » si la cellule correspondante de la grille de caractéristiques a vu sa valeur booléenne changer entre la grille de caractéristiques et la grille de caractéristiques . Une telle cellule prend une première valeur booléenne, par exemple « VRAI », les autres cellules prenant une deuxième valeur booléenne, par exemple « FAUX ». On obtient ainsi, pour trois itérations successives, deux grilles d’incohérence et Dans l’exemple de la figure 3, la grille d’incohérence comprend trois cellules incohérentes, et la grille d’incohérence en comprend deux. Les grilles d’incohérence sont ainsi calculées par l’ordinateur ou par le circuit électronique dédié mettant en œuvre le procédé selon l’invention, en fonction des grilles de caractéristiques, elles-mêmes issues des mesures d’au moins un capteur. En alternative, les grilles d’incohérence peuvent être directement fournies par des caméras événementielles, qui permettent de générer des données d'image d'événement en réponse à la détection d'un changement dans une scène qui se trouve dans son champ de vision. L’homme du métier pourra se référer par exemple à la demande de brevet FR3065133 à ce sujet. Génération de la mesure du déplacement Que les grilles d’incohérences aient été fournies directement par le capteur, ou calculées à partir de mesure de distance, on calcule à l’itération , pour chaque cellule de la grille, une probabilité postérieure qu’un corps matériel se trouvant dans une cellule A de la grille de cellules se déplace dans la direction i, parmi un ensemble discret de directions autour de la cellule A sachant l’ensemble des mesures entre l’itération et l’itération , et une probabilité postérieure qu’un corps matériel se trouvant dans une cellule A de la grille de cellules se déplace dans la direction i à la vitesse j sachant l’ensemble des mesures entre l’itération et l’itération . La probabilité postérieure et la probabilité postérieure peuvent être calculées par l’algorithme du filtre Bayésien binaire, qui permet d’estimer, de façon récursive, la distribution de probabilité d’une variable binaire aléatoire. Le filtre Bayésien binaire comprend deux grandes étapes, à savoir la prédiction et la mise à jour de mesure. La prédiction permet de prédire l’état courant d’occupation à partir des séquences précédentes de mesure, et la mise à jour permet de corriger l’estimation prédite avec des nouvelles mesures. Ces calculs peuvent être effectués en utilisant l'arithmétique en virgule flottante, ce qui nécessite des ressources importantes en termes de puissance de calcul, peu compatibles avec les contraintes propres aux systèmes embarqués. La probabilité postérieure est approximée par une valeur appartenant à un ensemble de cardinalité finie de valeurs numériques entre 0 et 1. L’ensemble étant fini, ses éléments peuvent être identifiés de manière unique par un indice qui est un nombre entier. Soit l’indice de l’élément qui correspond à la valeur numérique de . De même, l’indice représente l’indice de l’élément qui correspond à la valeur numérique de la probabilité postérieure . L’indice et l’indice étant des nombres entiers, ces indices sont calculés à travers des arithmétiques entières beaucoup plus simples, tout en conservant un niveau de précision acceptable et configurable (bijection entre un nombre entier et un nombre réel compris entre 0 et 1) en fonction des ressources de calcul disponibles. La figure 4, qui est propre à l’estimation de direction, reprend certaines des caractéristiques de la figure 1. Le filtre Bayésien binaire traitant de données entières, que l’on appellera par la suite filtre Bayésien binaire entier, reçoit, à chaque itération t, un ensemble d’indices propagés, résultant d’un processus de propagation des indices à l’itération précédente t-1 , ainsi que l’indice du modèle inverse de capteur , qui correspond à la probabilité qu’une cellule suive la direction à l’itération sachant uniquement la mesure de capteur produite à la même itération. Pour chaque cellule incohérente A de la grille d’incohérence ayant la première valeur booléenne (par exemple la valeur « VRAI »), on va donc regarder les antécédents de ces cellules dans la grille d’incohérence , et appliquer le masque de directions. Ainsi, pour le masque de directions, on considère une composante de mouvement de type « direction », qui correspond à une direction pour se déplacer d’une cellule à une autre. On procède selon le même principe pour l’estimation de vitesse, comme l’illustre la figure 5. On obtient, à chaque itération t, l’indice , pour chaque cellule A de la grille pour chaque direction i, et pour chaque vitesse j. Ainsi, pour le masque de vitesse, on considère une composante de mouvement de type « vitesse », qui correspond à la vitesse de déplacement d'une cellule à une autre selon une direction donnée. La illustre un exemple de masque de directions, et la un exemple de masque de vitesses. Le masque de directions contient 5x5 cellules, et huit directions, et le masque de vitesses contient 5x5 cellules et deux vitesses, mais d’autres valeurs peuvent bien entendu être adoptées. La cellule A se trouve au centre du masque. Chaque direction partant de la cellule est une variable aléatoire binaire indépendante. Pour l’estimation de la direction (cf. ), on emploie ainsi un filtre Bayésien binaire entier par direction. De même, comme l’illustre la , chaque direction partant d’une cellule en Ns vitesses, et chaque vitesse est une variable aléatoire binaire indépendante. Pour l’estimation de la vitesse (cf. ), on emploie ainsi un filtre Bayésien binaire entier par vitesse. Le fait de considérer chaque direction ou chaque vitesse (parmi un ensemble discret) en tant que variables indépendante d’un filtre binaire Bayésien permet d’estimer le déplacement de plusieurs corps matériels occupant une même cellule à un instant t, avec des probabilités de changement de direction et/ou de vitesse dont la somme n’est pas forcément égale à 1. Par exemple, deux piétons peuvent être dans une même cellule à un instant t. Le procédé peut tenir compte d’une probabilité égale à 0,9 qu’un des piétons tourne à gauche, et d’une probabilité égale à 0,9 que l’autre piéton tourne à droite. La figure 7 illustre la grille de mouvement filtrée de direction à l’itération t, , qui est une structure de données utilisée pour l’estimation de direction. On retrouve à gauche une grille où deux cellules A et B sont mises en valeurs. Les entrées de la grille de mouvement filtrée de direction correspondantes à cellules sont également mises en valeurs à droite de la figure. La structure de données correspond à un tableau à double entrée. Chaque ligne correspond à une cellule de la grille. Chaque colonne correspond à une des directions de l’ensemble discret de directions. On adopte la notation suivante : pour la cellule A, chaque colonne i prend l’indice Pour la cellule B, chaque colonne i prend l’indice On assume, dans le procédé selon l’invention, qu’une cellule incohérente, à savoir une cellule dans la grille d’incohérence, est potentiellement dynamique. Supposons que le contenu de la cellule A se déplace entre les itérations t-1 et t. Le contenu de A est situé dans A à l'itération t, mais il peut être situé dans d'autres cellules au voisinage de A à t-1. L'ensemble des emplacements possibles du contenu de A en t-1 est appelé « antécédents » de A. La zone où se trouvent les antécédents de A est délimitée par le masque de direction et le masque de vitesse. Les antécédents peuvent être définis en ce qui concerne les directions et les vitesses. Les fonctions suivantes désignent les antécédents d'une cellule en ce qui concerne les directions et les vitesses: désigne l'ensemble des antécédents possibles de la cellule A par rapport à la direction i. désigne l'ensemble des antécédents possibles de la cellule A concernant la vitesse j dans la direction i. La figure 8 illustre les fonctions et . Sur cette figure, les cellules incohérentes à l’itération t-1 sont les cellules U et V. Les cellules incohérentes à l’itération t sont les cellules A et B. Les antécédents de la cellule A par rapport à la direction 8 sont : . De même, les antécédents de la cellule A concernant la vitesse 1 dans la direction 8 sont : . Les antécédents de la cellule A concernant la vitesse 2 dans la direction 8 sont : . La mesure du déplacement dans la grille peut ensuite être exprimée par les fonctions suivantes et , définies ci-après. La fonction vérifie si une cellule A s'est potentiellement déplacée dans la direction i entre les itérations t-1 et t. Cette fonction renvoie une valeur booléenne: La fonction vérifie si une cellule A s'est potentiellement déplacée par rapport à la direction i et à la vitesse j entre les itérations t-1 et t. Cette fonction renvoie une valeur booléenne: L'application des deux fonctions de mesure de mouvement sur les exemples de la figure 8 donne les résultats suivants. La fonction retournera « FAUX » sauf pour , et . En outre, la fonction retournera « VRAI » pour , et , et « FAUX » pour les autres arguments de la fonction. Puis, on détermine des indices du modèle inverse de capteur, qui constituent la contribution de mise à jour des mesures produites à l’itération dans le filtre Bayésien binaire. Ces indices sont déterminés par rapport aux résultats de la fonction et de la fonction décrites précédemment : Les paramètres et sont des entiers positifs, constants, et choisis de façon empirique. On calcule ensuite la propagation des indices des probabilités postérieures des antécédents. Cette étape est illustrée par la . On calcule pour cela, pour chaque élément de la grille de mouvement filtrée de direction à l’itération t , un indice propagé à partir des indices de la grille de mouvement filtrée de direction calculée à itération précédente : Sur la figure 9, on considère, à titre d’exemple, deux cellules A et B, se propageant, entre t-1 et t, selon la direction 4. Ainsi, pour la cellule A, l’indice dans la grille de mouvement filtrée de direction vaut , et est nul pour les autres directions. Pour la cellule B, l’indice dans la grille de mouvement filtrée de direction vaut , et est nul pour les autres directions. Les autres cellules ne sont pas représentées sur le tableau, l’indice de probabilité correspondant étant nul pour toutes les directions. Le processus de propagation propage vers d’autres cellules les indices non nuls dans la grille de mouvement filtrée de direction en suivant les directions correspondantes. Dans l’exemple de la figure 9, seules les cellules A et B ont des indices non nuls dans la grille de mouvement filtrée de direction . Ces indices concernent la direction 4 pour les deux cellules. Leurs indices selon les autres directions sont nuls. Le résultat du processus de propagation est illustré en bas-gauche de la figure 9. Seules les cellules C, D, E, F, G et H ont des indices propagés non nuls. Les indices propagés des autres cellules sont nuls pour toutes les directions. Pour la cellule C, son seul antécédent ayant des indices non nuls dans est la cellule A selon la direction 4. Ainsi, l’indice propagé de la cellule C selon la direction 4 vaut . Les antécédents de la cellule D ayant des indices non nuls dans sont les cellules A et B selon la direction 4. Ainsi, l’indice propagé vaut . Filtrage du déplacement Une fois que le calcul des indices propagés a été effectué, on applique le filtre Bayésien binaire entier. Le filtrage est appliqué pour chaque nouvelle mesure entrante, à savoir à chaque itération. On rappelle que les données d’entrées sont l’indice propagé de l’itération précédente t-1 ainsi que l’indice de probabilité , qui constitue la contribution de mise à jour des mesures dans le filtre Bayésien binaire entier. Cette étape tire profit de la fonction de fusion entière pour la fonction de filtrage, en utilisant uniquement une arithmétique entière. On a représenté, de manière discrétisée, la probabilité postérieure et la probabilité postérieure respectivement par un indice et par un indice , dans un ensemble de cardinalité finie de classes de probabilité. L’ensemble de cardinalité finie de classes de probabilité est formé par l’union d’un ou plusieurs sous-ensembles tels que, lors de l’étape de mise à jour de la mesure, une fusion de deux classes de probabilité appartenant à un même sous-ensemble fournisse un résultat appartenant aussi audit sous-ensemble. Avantageusement, l’ensemble de cardinalité finie de classes de probabilité, désigné par , est formé par l’union de deux sous-ensembles et définis par : L’indice n prend des valeurs entières relatives, et les valeurs numériques des classes de probabilité sont définies par récurrence de la manière suivante : est donc un paramètre prédéterminé du filtre IBBF. Sa valeur est une constante entre 0 et 0,5. La fusion entre deux classes de probabilités , est calculée par application de l’équation suivante : Le dernier paramètre du filtre IBFF est , qui est le sous-ensemble de permettant de définir . Par exemple, si les indices de probabilités sont calculés sur huit bits, Le stockage des indices de probabilités sur huit bits permet de travailler avec une mémoire particulièrement compacte. Le résultat de la fusion de deux éléments de la séquence peut être calculé par une simple somme des indices des éléments d’entrée. L’étape de prédiction consiste à consulter, dans une table de consultation, l’indice correspondant à la probabilité que la cellule prenne la direction à l’itération sachant l’ensemble de toutes les mesures avant l’itération . Une fonction d’initialisation du filtre est d’abord invoquée, afin de pré-calculer la table de consultation. Le filtre est initialisé une fois pour toutes, en amont de l’estimation de mouvement. La fonction d’initialisation du filtre a quatre valeurs d’entrées : le paramètre défini précédemment, (le sous-ensemble de permettant de définir ), ainsi que les paramètres et qui correspondent respectivement à la probabilité de garder la même direction entre deux itérations successives, et à la probabilité de changer de direction entre deux itérations successives. La table de consultation est donc un tableau à deux entrées, une colonne pour , et une colonne pour la valeur correspondante dans la table. Le nombre de lignes est égal à la taille du sous-ensemble . La table de consultation est initialement vide. Pour chaque valeur , on calcule la probabilités d’après la formule définie précédemment par récurrence, à l’aide du paramètre et de la fusion . Puis, on fait prendre à la valeur de . La fonction est telle que chaque entrée de la table de consultation soit approximée afin de correspondre à un élément de : et Une fois que le filtre a été initialisé, on applique la fonction sur l’indice propagé , ce qui permet d’obtenir le terme de prédiction du filtre IBBF uniquement par consultation de tableau, sans passer par des calculs.. L’étape de mise à jour du filtre de la mesure consiste à effectuer l’opération suivante : On obtient donc, à l’issue de chaque itération, pour chaque cellule de la grille et pour chaque direction i, l’indice , qui correspond à la probabilité que le corps matériel se déplace dans la direction i. On applique également à chaque itération un filtre Bayésien binaire entier pour l’estimation de vitesse, comme illustré sur la . Les étapes du filtrage sont les mêmes que pour l’estimation de direction, à la différence près que les indices sont filtrés, à chaque itération, pour chaque direction du masque de direction, et pour chaque vitesse du masque de vitesse. Ainsi, au lieu de manipuler une grille de mouvement filtré pour la direction , qui est un tableau 2D de dimensions ( nombre de cellules de la grille, nombre de directions du masque), on manipule, pour les vitesses, une grille de mouvement filtré pour la vitesse , qui est un tableau 3D de dimensions ( nombre de vitesses du masque). Chaque élément de la grille de mouvement filtré pour la vitesse stocke un indice que la probabilité postérieure que la cellule A se soit déplacée depuis la direction avec la vitesse à l’itération . Ainsi, pour le calcul du filtrage du déplacement selon chaque vitesse, l’homme du métier pourra transposer, sans difficulté, les étapes de prédiction et de mise à jour du filtre IBBF s’agissant des données de vitesse. Le procédé a été décrit en tenant compte de deux composantes de mouvement caractérisant le mouvement d’un corps mobile, à savoir une composante de direction et une composante de vitesse. Selon un deuxième mode de réalisation, le procédé peut être mis en œuvre en ne considérant qu’une seule composante de mouvement, comme illustré par la . Dans ce cas, la composante de mouvement correspond à une direction entre deux cellules de la grille de cellules, avec plusieurs distances par directions (ce qui revient en fait à considérer plusieurs vitesses de déplacement par directions, compte tenu du changement de distance à chaque itération). L’espace autour de la cellule A est discrétisé en une pluralité de directions (zones 1, 4, 7, 13, 22, 23 et 24) correspondant à une première composante de mouvement de type direction. Chaque direction a par ailleurs plusieurs niveaux de « profondeur » dans le masque, correspondant à différentes vitesses, elles aussi discrétisées. Par exemple, la zone 4 a trois niveaux de profondeur, correspondant à trois vitesses différentes : la zone 4 elle-même, la zone 5 et la zone 6. Les calculs d’estimation du mouvement de corps matériels avec un seul masque comprenant plusieurs zones par direction (afin de discrétiser plusieurs vitesses par direction) sont effectués de façon similaire au premier mode de réalisation. Là aussi, chaque déplacement est une variable binaire aléatoire, estimée par une instance du filtre Bayésien binaire. En n’utilisant qu’un seul masque au lieu de deux, on supprime une structure de données, ce qui permet de gagner du temps de calcul, sans perdre pour autant de précision dans l’estimation du mouvement. A titre d’illustration, dans l’exemple de la , il y aurait vingt-quatre filtres à mettre à jour à chaque itération. Avec le premier mode de réalisation, il y aurait 8 filtres à mettre à jour pour les directions, et 24 filtres à mettre à jour pour les vitesses (3 vitesses possibles par direction), donc trente-deux filtres à mettre à jour à chaque itération. Le procédé selon l’invention n’implique pas nécessairement de tenir compte de toutes les composantes autour de chaque cellule. Comme l’illustre la , on peut ne s’intéresser qu’à certaines composantes (par exemple deux composantes situées dans la colonne de droite). Cela simplifie également la mise à jour des filtres. Cette implémentation peut être envisagée dans des situations où les déplacements de corps mobiles sont contraints selon certaines directions et/ou certaines vitesses, par exemple sur un tapis roulant dans un site industriel. Le procédé selon l’invention peut être mis en œuvre par au moins un capteur de distance, par exemple un LIDAR, un RADAR ou encore un SONAR, ou par une caméra apte à extraire des informations de distance à partir d’une scène acquise par le capteur. Les grilles de caractéristiques sont établies à partir des mesures de distance effectuées par le capteur. Dans le cas où le capteur est capable de générer des données d'image d'événement en réponse à la détection d'un changement dans une scène qui se trouve dans son champ de vision, ces données sont transmises au processeur de données afin de caractériser la dynamique de mouvement du corps matériel. Le capteur peut être embarqué à bord du véhicule; en alternative, la scène peut être acquise par le capteur, puis les informations d’estimation du mouvement du corps matériel situé dans la scène peuvent être transmises au corps mobile. Le capteur peut ainsi être positionné à un endroit fixe, par exemple dans un panneau de signalisation, et communiquer avec les véhicules à proximité afin d’actionner des commandes d’évitement. Le véhicule peut être autonome, ou bien non autonome, et dans ce cas le procédé selon l’invention permet d’assister le conducteur pour la détection d’obstacles. Le corps mobile peut également être tout dispositif apte à se mouvoir de façon autonome, par exemple un appareil domestique tel qu’un aspirateur autonome, ou encore un appareil de jardinage tel qu’une tondeuse à gazon autonome. Le corps mobile comprend par ailleurs des actionneurs, aptes à corriger la trajectoire du corps mobile autonome en fonction de l’estimation du mouvement du corps matériel qui a été effectuée grâce au procédé selon l’invention, en vue d’éviter le corps matériel. Le dispositif d’estimation peut également être installé à une position fixe, dans un capteur de détection d’intrusion. L’utilisation d’une caméra événementielle est particulièrement adaptée à la détection d’intrusion (la scène à observer est généralement fixe, sauf en cas d’intrusion). L’invention a été essentiellement décrite en discrétisant l’ensemble des probabilités dans un ensemble de cardinalité finie, afin de ne pas avoir à effectuer des calculs utilisant l'arithmétique en virgule flottante. Cette disposition permet en particulier de d’implémenter le procédé selon l’invention dans un système embarqué, ayant de fortes contraintes d’intégration. Le procédé selon l’invention pourrait également utiliser l'arithmétique en virgule flottante, en particulier si les capacités calculatoires du dispositif mettant en œuvre le procédé permettent d’effectuer l’estimation de mouvement en temps réel. Procédé itératif, mis en œuvre par ordinateur ou par un circuit électronique dédié, d’estimation du mouvement d’au moins un corps matériel dans un espace environnant discrétisé en une grille de cellules, dans lequel, pour chaque itération t donnée, les étapes suivantes sont mises en œuvre : a) obtention d’une grille d’incohérence à l’itération t générée en réponse à une détection d'un changement d’état d’occupation dans au moins une des cellules de la grille de cellules entre une itération t-1 et l’itération t, b) génération par récurrence d’une grille de mouvement filtrée à l’itération t , ) comprenant, pour chaque cellule de la grille de cellules, une probabilité postérieure que le corps matériel ait effectué un mouvement selon au moins une composante de mouvement caractérisant ledit mouvement, ladite composante de mouvement faisant partie d’un ensemble discret de composantes de mouvement, ladite grille de mouvement filtrée à l’itération t ) étant générée à partir de la grille de mouvement filtrée à l’itération t-1 , ), d’une grille d’incohérence de l’itération t-1 , et de la grille d’incohérence à l’itération t . Procédé selon la revendication 1, dans lequel l’étape b) comprend l’application d’un filtre binaire Bayésien, chaque composante de mouvement de l’ensemble discret de composantes étant une variable indépendante d’un filtre binaire Bayésien, la probabilité postérieure correspondant à la sortie dudit filtre. Procédé selon l’une des revendications précédentes, dans lequel l’étape a) comprend la génération d’une grille de caractéristiques à l’itération t , chaque cellule ayant une première valeur booléenne correspondant à un premier état d’occupation prédéterminé, ou ayant une seconde valeur booléenne différente de la première sinon, la grille d’incohérence à l’itération t étant générée à partir du changement de valeur booléenne de chaque cellule entre la grille de caractéristiques à l’itération t et une grille de caractéristiques générée lors d’une itération t-1 . Procédé selon la revendication 3, comprenant les étapes préalables suivantes : a1) acquisition d’une pluralité de mesures de distance desdits corps matériels issues d’un ou plusieurs capteurs ; a2) application, à chaque dite mesure de distance, d'un modèle inverse du capteur correspondant sur la grille de cellules, pour déterminer une probabilité d'occupation par un corps matériel d'un ensemble de cellules de ladite grille de cellules ; et a3) construction de la grille de caractéristiques à partir des probabilités d'occupation estimées lors de l'étape a2). Procédé selon l’une des revendications précédentes, dans lequel la probabilité postérieure est approximée par une valeur appartenant à un ensemble de de cardinalité finie, ladite valeur étant identifiée par un indice entier . Procédé selon la revendication 5, dans lequel, dans l’étape b), on calcule, pour chaque élément de la grille de mouvement filtrée à l’itération t ), un indice propagé à partir des indices de la grille de mouvement filtrée calculée à l’itération précédente t-1, par la relation suivante : Pour chaque cellule A’ antécédente de la cellule A selon la direction i à l’instant t-1 ; Puis on applique un filtre binaire Bayésien avec comme entrées l’indice propagé , un indice de probabilité du modèle inverse de capteur qui correspond à la probabilité qu’une cellule A suive la composante de mouvement à l’itération sachant uniquement la mesure de capteur produite à la même itération, une probabilité que la composante de mouvement du corps matériel ne varie pas entre les itérations t-1 et t, et une probabilité que la composante de mouvement du corps matériel varie entre les itérations t-1 et t. Procédé selon la revendication 6, dans lequel l’indice correspondant à la composante de prédiction du filtre binaire Bayésien pour l’estimation de composante de mouvement est obtenu à l’aide d’une table de consultation comprenant un ensemble fini d’indices de probabilités, et l’indice filtré est obtenu par addition d’indices entiers de probabilités. Procédé selon l’une des revendications 6 ou 7, dans lequel la probabilité de conserver la même composante de mouvement entre les itérations t-1 et t et la probabilité de changer de composante de mouvement entre les itérations t-1 et t sont des paramètres constants en fonction du temps. Procédé selon l’une des revendications 5 à 8, dans lequel : si, dans la grille d’incohérence de l’itération t-1 et dans la grille d’incohérence à l’itération t , un changement de valeur booléenne a été mesuré dans la composante de mouvement i par rapport à la cellule A, où est une constante entière ; sinon. Procédé selon l’une des revendications 5 à 9, dans lequel ledit ensemble de cardinalité finie de classes de probabilité est formé par l’union d’un ou plusieurs sous-ensembles tels que, lors de l’étape a3), une fusion de deux classes de probabilité appartenant à un même sous-ensemble fournisse un résultat appartenant aussi audit sous-ensemble. Procédé selon la revendication 10, dans lequel l’ensemble de cardinalité finie de classes de probabilité, désigné par , est formé par l’union de deux sous-ensembles et définis par : , l’indice n prenant des valeurs entières relatives, et les valeurs numériques des classes de probabilité étant définies par récurrence de la manière suivante : Où est un paramètre prédéterminé et dans lequel, lors de ladite étape a3), la fusion entre deux classes de probabilités , est calculée par application de l’équation suivante : Procédé selon l’une des revendications précédentes, dans lequel la composante de mouvement correspond à une direction entre deux cellules de la grille de cellules, ou à une vitesse de déplacement d'une cellule à une autre selon une direction donnée. Procédé d’évitement d’un corps matériel en mouvement autour d’un corps mobile, caractérisé en ce qu’il met en œuvre le procédé selon l'une des revendications 1 à 12 pour estimer le mouvement du corps matériel, et qu’il envoie une commande à un actionneur du corps mobile afin d’éviter ledit corps matériel. Dispositif d’estimation du mouvement d’un corps matériel dans un espace environnant un corps mobile, comprenant: - au moins un port d'entrée pour recevoir une pluralité de signaux représentatifs d'une série temporelle de mesures de distance issues d'un ou plusieurs capteurs de distance, et - un processeur de données configuré pour recevoir en entrée lesdits signaux, pour générer une grille de caractéristiques à partir desdits signaux, et pour caractériser une dynamique du corps matériel en appliquant un procédé selon l'une des revendications 1 à 12. Dispositif d’estimation du mouvement d’un corps matériel dans un espace environnant un corps mobile, comprenant: - au moins un port d'entrée pour recevoir une série temporelle de grilles de caractéristiques issues d'une ou plusieurs caméras événementielles, et - un processeur de données configuré pour recevoir en entrée ladite série et pour caractériser une dynamique du corps matériel en appliquant un procédé selon l'une des revendications 1 ou 5 à 12. Corps mobile, comprenant un dispositif selon l’une des revendications 14 ou 15.