Quel langage pour programmer un robot humanoïde?

Parmi les langages existants, lequel offre les fonctions les plus adaptées à la programmation d'un robot ou androïde?

Les robots humanoïde ne devraient pas être programmés comme des ordinateurs. Aussi machines soient-ils, il semble impossible de pouvoir prédéterminer tous leurs actes et les inscrire en lignes de code, car dans un environnement réel et non plus à travers un clavier les informations qu'ils reçoivent sont en nombre illimité.

Androïde à programmer

Aussi la conception des langages pour ordinateurs semble peu adaptée à la robotique, mais il y a certainement un langage qui convient plus que les autres.

Les robots doivent pouvoir apprendre

Les robots humanoïdes doivent être capable d'apprentissage, ce qui veut dire que même si on leur décrit un méthode opératoire pour accomplir une tâche, ce que fait un programme, leur savoir vis à vis de celle-ci, doit évoluer et s'adapter en fonction des résultats obtenus quand le robot tente de l'accomplir.

Le langage de programmation devrait donc permettre une fois un traitement défini, que celui-ci se perfectionne automatiquement en fonction des résultats et se complète de lui-même pour les cas imprévus que le robot tentera d'abord de traiter avec ce qu'il sait mais pour lesquels il se forgera lui-même de nouveaux modes opératoires.

Ils doivent échanger leur savoir

Les robots doivent être capables d'échange. On voit dans les annonces de presse qu'ils savent se montrer performants chacun pour une fonction, l'un par exemple pour marcher ou courir, l'autre pour parler, l'autre pour imiter les expressions humaines, mais chacun est limité à une capacité, il ne semble pas possible de transmettre à l'un ce que sait faire l'autre et moins encore de combiner ces capacités et les faire fonctionner ensemble.
Il faut donc que le langage de programmation soit capable de permettre ces combinaisons de programmes.

Le parallèlisme est une fonction de base nécessaire

Les robots sont composés de parts qui doivent fonctionner simultanément. Il faut donc que le langage de programmation implémente le parallélisme, ce que font souvent les langages modernes. Le language dédié à la robotique UrbiScript l'implémente même dans sa syntaxe et Urbiforge offre un ensemble d'outils prêts à utiliser avec ce langage et une bibliothèque UObjets d'interface avec les robots.

Ils ont besoin d'une représentation du monde extérieur

Comme nous-même, ils ont besoin d'une représentation interne du Monde, une forme de conscience donc.

Les langages de programmation savent décrire des objets, qui sont faits de fonctions et variables, pour représenter les objets réels. Ce sont les classes, et on peut les adapter à un problème différent par l'héritage.
Des objets ainsi représentés sous forme de valeurs et de fonctions dépendant de paramètres restent totalement formels, c'est pourquoi il faudrait que les langages puissent aller au delà des classes. Car les objets du monde réel ne sont pas tous définis de façon rigide, le monde est en constant mouvement et la représentation du monde doit suivre ce dynamisme.

En conclusion, le langage actuel le plus adapté est...

Le langage C++ est largement utilisé en robotique pour les pilotes matériels et pour certains programmes spécialisés. Mais c'est un choix qui repose sur l'habitude et les compétences des programmeurs, et non parce qu'il convient le mieux.

Le langage plus récent Go qui veut le remplacer s'écarte du modèle des classes statiques et les remplace par des interfaces. Mais cela n'est pas dynamique pour autant.

Les langages à flux de données (dataflow) sont encore une option à envisager. On programme visuellement en combinant de objets comme on peut le faire avec certains système de développement pour robots. Ce qui compte pour ce langage, ce sont les états et leurs connexions. Le changement d'un état pour un objet change l'état des autres objets connectés, et c'est une forme de représentation du monde concret plus réaliste que celle des algorithmes. Mais plutôt complexe à mettre en oeuvre...

JavaScript lui-aussi s'écarte du modèle orienté-objet statique avec des objets qui évoluent durant le traitement, ce qui est un pas vers ce que nous cherchons. En effet cela peut faciliter l'apprentissage si la machine fabrique des classes descriptives d'un objet réel en les complétant au fur et à mesure qu'il découvre de nouveaux aspects de l'objet.
Il est possible grâce aux prototypes de transmettre aux autres instances d'un objet ce qui est ajouté dynamiquement à un objet, ce qui convient aussi à ce que nous cherchons.

Mais pour répondre vraiment à ce que nous cherchons, il faudrait que ces objets dynamiques soient plus que des ensembles de variables et fonctions. C'est là quelque chose qui reste à définir.

JavaScript est un langage parallèle qui fonctionne en attachant des évènements à des objets. Le parallélisme de JavaScript pourrait sans doute remplacer les connexions des états dataflows, si on attache des évènements aux objets, avec l'avantage que les connexions soient dynamiques et évolutives.

Finalement, pour le dynamisme, l'apprentissage, l'échange du savoir, JavaScript semble le langage le plus approprié pour programmer un robot humanoïde évoluant parmi les humains.

Par Denis Sureau le 29 novembre 2011.
Photo: Androïde Aiko par Le Trung.