dimanche 9 juin 2019

Behavior Tree et Arduino Uno

C'est bien beau de connecter différents senseur et actuateurs sur un microcontrôleur, mais si ce n'est que pour afficher la valeur obtenue ou démarrer un moteur selon une valeur limite, me semble que c'est un occasion manquée d'utiliser un microcontrôleur efficacement. Afin d'ajouter un peu d'intelligence dans si peu de ressources, il faut tout de même faire quelques pirouettes.

Programmer en C n'est pas toujours facile et réussir à implémenter des comportements complexes est ni simple a écrire ni, et encore moins, à déboguer. Une technique efficace développée pour la conception de jeux vidéo est l'utilisation de Behavior Tree, ou en tant que traduction littérale "arbre de comportement". Cet arbre est composé de différents type de nœuds, soit de contrôle, de décoration ou d'action.

Unity et Unreal en font abondamment usage pour la création de NPC et c'est une technique reconnue en intelligence artificielle. Plusieurs autre engin en font aussi usage. Si l'implémentation dans le jeu vous intéresse, voici quelques vidéos sur Tom Clancy's The Division et l'excellent Horizon Zero Dawn.

Ceci dit, il est impossible de porter la plupart des librairies existantes puisqu'elle se base sur une utilisation efficace de l'allocation dynamique en mémoire. Une manière de contrer le problème est d'utiliser un pool limité pré-alloué mais vient avec la contrainte de taille fixe pour les éléments ( noeuds ) utilisés par l'arbre. Puisque le nombre total ne peux être bien grand, des techniques de proxy et de priorité et une bonne gestion des éléments non utilisé sont plus qu'essentiels.

Autre facteur limitant, l'utilisation de blackboard ne peut être aussi permissif qu'une simple clé/valeur. Donc un tableau de 16 entier de 16 bits dont l'indice devient la clé et la valeur est limité à 2 octets.

Ceci dit, puisque l'édition du Behavior Tree peut être externe et sérialiser en Flash, une partie de la complexité peut être relégué à l'éditeur.

Ceci dit,  je ne suis qu'au début de mon implémentation pour Arduino UNO et j'essaie de l'inclure dans une librairie, donc deux fronts en même temps. Bien que j'ai commencé l'implémentation à l'intérieur de ma librairie de robots, j'en ferait une version simplifiée pour en tester plus efficacement la stabilité et l'utilité. Le tout devra inclure du code Python et probablement un minimum de Web pour en faire un éditeur. Encore un autre mini projet qui pourrait être quasiment un créneau de développement à lui-seul!

Aucun commentaire:

Enregistrer un commentaire