01 Premières réflexions - scenaristeur/brange GitHub Wiki

ça serait bien un robot qui range ma chambre...

c'est la réponse que m'a retourné mon fils de huit ans , un jour ou je lui demandait de ranger sa chambre...

je comprenais son souhait et je le partageais. J'aimerais bien moi aussi avoir une maison toujours propre , m'abstenir de la corvée de ménage le samedi matin, passer plus de temps avec mes enfants

Dois-je attendre 10 ou 20 ans pour que cela soit? ou bien puis-je faire avancer les choses?

un robot qui range les petites voitures, qui débarrasse la table. ..

Passionné d'informatique je pensais tout de suite aux cartes électroniques Arduino qui permettent la programmation de moteurs depuis un ordinateur.

Possédant parallèlement un téléphone sous Android j' élaborais un plan. Dans l'idéal il suffirait de parler a son téléphone, de lui dire "range les petites voitures". Celui-ci se connecterait au réseau wifi de la maison, transmettrait l'information au robot fabriqué a partir de la carte Arduino elle aussi connectée au wifi et le robot exécuterait la tache.

Et le robot me direz-vous?

le robot devra pouvoir se déplacer, trouver les voitures, les attraper , les transporter et les ranger . Chez nous les petites voitures se rangent dans une caisse à petites voitures, une caisse Ikea en plastique qui elle même a sa place dans le placard de la chambre des garçons.

En farfouillant sur internet a la recherche d'un robot idéal, on découvre plusieurs pistes comme le robot NAO, robot de loisirs programmable, un peu cher pour une petite bourse. Alors apparaissent des d'autres pistes comme les sites "DIY" (Do it yourself) ou l'on trouve des tutoriaux pour créer soit même son robot avec souvent la carte Arduino comme base de départ.

Mais pour créer son robot, d'abord faut-il savoir exactement ce qu'on va lui demander. Ranger les petites voitures, oui... mais un robot qui n'aurait qu'une seule fonctionnalité, celle de ranger les petites voitures serait-il bien utile ? la réponse est non... Bien évidemment...

Comme décrit précédemment, j'aimerais bien, moi aussi, profiter de ce robot, lui donner ou lui demander quelque tache peu intéressante. Et si je pouvais lui demander de mettre et débarrasser la table, faire les lessives, plier le linge et le ranger ( nous sommes 6 a la maison dont la moitié n'a pas encore 10 ans...), il deviendrait alors beaucoup plus utile.

En y regardant de plus près, les corvées de mon fils et les miennes n'étaient pas si éloignées les uns des autres. En effet, dans les deux cas, il est question de prendre un objet et de le déplacer, de le mettre à la bonne place, les petites voitures dans leur caisse, les couverts sur la table puis au lave-vaisselle, le linge dans la machine, puis au sèche-linge (ou sur l'étendeur), puis dans le placard de la personne propriétaire du vêtement (en ayant pris soin de l'avoir plié)... et tout ça pendant que moi je suis au bureau ou que j'en profite pour prendre du bon temps.

Hou là ! Ça se complique...

Le robot capable de faire tout ça serait bien compliqué à réaliser, et à programmer, très cher et certainement peu adaptable aux nouvelles situations . Autre problème de taille, j'habite une maison sur deux niveaux, et d'après les vidéos que j'ai pu croiser sur internet, les robots qui montent les marches semblent pour l'instant encombrant et assez patauds. Bien que j'ai espoir que les choses évoluent et qu'ils deviennent moins gauches, ça m'embêterait de devoir être bloqué dans l'escalier et d'attendre que le robot soit passé. D'autant que l'escalier n'est pas rectiligne mais forme un angle droit sur les 5 ou 6 marches du bas. Manquerait plus que le robot ne tombât et ne blessât quelqu'un.

La sécurité avant tout.

Le robot devra donc en plus avoir comme priorité, et avant tout autre tache de s'assurer qu'il ne fait courir aucun risque, ni aux personnes ni aux animaux ni aux biens se trouvant dans son environnement.

A ce stade, il convient de définir le concept d'environnement. Dans les exemples précités, l'environnement se trouve être la maison, dans la limite de la couverture wifi. Il faudra en plus, que le robot soit informé des limites de son environnement pour éviter qu'il n'en sorte et ne se perde.

Qui voudrait d'un robot dangereux, complexe, encombrant et peu adaptable ? Moi non, alors le souhait de mon fils et mon rêve ne seraient-ils qu'utopies? Devrons-nous toujours nous charger des corvées interminables? Devons-nous attendre 30 ans que des robots complexes et performants soient créés? S'adapteront-ils alors facilement à nos besoins ou devons nous chercher une autre solution ?

Nous voilà face à un gros problème,

mais que fait-on en programmation lorsque l'on se retrouve confronté à un gros problème ? On tente de le découper en plusieurs petits problèmes, qui devraient logiquement être plus faciles à résoudre. Alors pourquoi ne pas faire de même avec notre robot? Le couper ou plutôt l'imaginer comme un combinaison de plusieurs petits robots, des modules robotiques qui communiqueraient les uns avec les autres, qui s'entraideraient?

L'un de ces modules communiquant est déjà tout trouvé, c'est mon téléphone portable. C'est grâce a lui que je pourrais transmettre mes demandes au système, et recevoir des informations de celui-ci, en retour via le réseau wifi. Grâce au logiciel de reconnaissance vocale présent dans mon téléphone (edit : ou aux librairies javascript), je peux parler dans mon téléphone pour transmettre une instruction, celle-ci est transformée en texte. Dans l'autre sens, la synthèse vocale qui transforme du texte ( des messages d'erreur par exemple) en message audible devrait pouvoir me transmettre des informations depuis le système.

Une bonne analyse de l'instruction d'origine transformée en texte devrait permettre l'extraction des données essentielles et leur interprétation afin de les transmettre au système.

L'utilisation du système doit être très simple. Je parle dans mon téléphone pour donner une instruction et celui-ci m'informe quand la tache est terminée ou si le système n'a pas pu l'effectuer en m'indiquant la raison. Elle doit pouvoir être utilisable par un enfant.

21/01/13 . 1h34 Le téléphone serait donc notre premiere interface d'entrée du système. Il faut pouvoir également inter-agir avec le système depuis un ordinateur personnel ou depuis une tablette.

Côté robot, en plus des robots a base d'Arduino précédemment cités (sur les sites diy) de nouveaux projets semblent faire surface tel le robot Pob conçu et fabriqué par la société Pob-Technologie à Villeurbanne, qui pourrait être un bon départ. Pob est un petit robot muni d'un bras articulé, d'un module wifi et d'une caméra, capable d'attraper une petite bouteille d'eau, de se déplacer et d'arroser une plante. Il devrait également être capable d'attraper les petites voitures de mon fils et de les déposer dans la caisse plastique à condition de lui transmettre les bonnes instructions. Pob est un robot modulaire. On peut en fonction des besoins lui ajouter des capteurs de distance. Pob semble être un pas vers la démocratisation de la robotique.

En partant de ce premier constat et du principe que le robot Pob est modulable, que d'autres idées de robot avec d'autres fonctionnalités peuvent émerger, on peut définir plus précisément le cœur du système dont il est ici question.

Reprenons notre premier cas d'utilisation, celui du rangement des petites voitures.

L'interface utilisateur doit être la plus simple possible pour demander au système d'exécuter une tache. On peut donc enregistrer une instruction vocale, transformée en texte, ou bien saisir le texte directement dans un formulaire. On peut également utiliser une interface avec des boutons. Mais l'entrée la plus utile serait encore la prise de photo.

Prendre une photo pour transmettre une instruction au système.

Il suffirait de prendre une photo des petites voitures éparpillées dans la chambre ou de la table pour demander aux robots de ranger les petites voitures. L'idée ici est de faire en sorte que le système analyse la photo prise et la compare à l'environnement connu.

Comment comparer cette photo avec l'environnement ?

Il existe plusieurs librairies (sous partie d'un programme) qui sont élaborées pour la vision par ordinateur (Computer Vision). Opencv est celle sur laquelle je me suis le plus penché. Parmi les nombreuses fonctions d'OpenCv, trois peuvent nous être utiles ici :

L'environnement global

Etant dans notre exemple la maison, on peut considérer chaque pièce comme un sous-environnement. Dans chaque pièce, un meuble, un placard, un caisse en plastique peuvent également être chacun considéré comme un environnement différent.

Le robot devra donc avoir en mémoire ou avoir accès à un panorama de la chambre rangée. Le fait de prendre une photo des petites voitures sur le parquet conduira à la comparaison de celle-ci et à son identification. Je prend une photo et le système la compare aux panoramas désignés comme représentant des pièces de la maison. Dans notre cas, le système devrait trouver grâce a la fonction matching d'OpenCv, une grande probabilité pour que la photo prise corresponde au plancher de la chambre des garçons (background extraction). Si la photo n'avait pas été trouvée parmi les panoramas représentant les pièces, elle aurait été comparée avec les panoramas des sous-environnements de chaque pièce (bureau, placard,boite...) Une fois le matching (reconnaissance) de la photo par rapport à l'environnement effectué, la fonction différence intervient. Elle compare deux photos et en extrait les différences. Dans notre exemple les différences correspondront aux objets que l'on demande a notre système de ranger.

#Une instruction découpée en 4 parties On peut de cette manière guider un robot en lui indiquant l'objet qu'il faudra déplacer. De ce fait on peut décomposer, généraliser une instruction en 4 parties : un verbe, un objet, une origine, et une destination. exemple : "|ranger| les petites voitures | sur le parquet | dans la boite des petites voitures |"

Intervient alors la notion d'apprentissage du robot.

Au départ le robot ne sait pas à quoi correspondent les différences entre la photo prise et le panorama de la chambre rangée. Il a juste identifié la photo comme faisant partie de la chambre des garçons et a repéré des différences. Une autre fonction de la Librairie OpenCv intervient alors : la reconnaissance d'objet( object détection). Cette fonction accompagnée de la fonction haair-trainning (apprentissage) permet de classifier les objets. Il suffira donc de s'arranger pour que le robot confronté à une différence entre deux photos puisse identifier la nature de l'objet concerné. Il consultera ensuite une base de données ou sont stockées les caractéristiques de chaque type d'objet. Le nombre d'objet dans une maison étant important mais limité, on peut considérer que la base de données des objets d'une maison sera construite progressivement, un peu comme l'apprentissage chez les jeunes enfants.

Lorsque le robot rencontrera un objet qui n'est pas dans la base de données, il pourra le comparer au objets existants, demander des précisions sur la nature de l'objet, son nom, ainsi que l'endroit ou plutôt l'environnement dans lequel cet objet doit être rangé. Dans notre exemple l'utilisateur indiquera une seule fois que, ce que le système a trouvé comme différence entre la photo et le parquet de la chambre correspond à des petites voitures, et qu'il conviendrait de les ranger dans l'environnement "boite en plastique" prévue à cet effet, cette même boite trouvant sa place dans l'environnement "placard de droite", lui-même sous-environnement de l'environnement placard situé dans l'environnement "chambre des garçons", elle même faisant partie de l'environnement "maison". Nous avons de cette manière informé le système de notre instruction :

  • objet: "les petites voitures"
  • origine: "le parquet de la chambre des garçons"
  • destination : "la caisse en plastique"
  • verbe: le verbe par défaut sera "ranger"

Grâce à la fonction de matching le robot devrait également pouvoir déterminer dans quelle pièce ou quel environnement il se situe, en comparant l'image fournie par sa caméra avec les différents panorama enregistrés.

En utilisant les fonctions de collision comme celle présentes dans Processing on devrait pouvoir demander au robot de se mouvoir http://www.openprocessing.org/search/?q=colision tout en évitant de heurter d'autres objets. voir aussi : Un robot qui évite les obstacles Celui-là, notamment, où il est question d'agents http://www.openprocessing.org/sketch/82295

j'ai déjà élaboré une ébauche du système et je continue à la paufiner.

Synthétiquement, le système se résume ainsi : une interface entre les habitants de la maison et les différents modules robotiques.

Perspectives

Modifications de l'habitation. Les contraintes liées a l'environnement sont multiples et peuvent paraître insurmontables comme l'escalier, l'ouverture des portes du placard à voiture ou de la caisse en plastique, la hauteur de la table, l'ouverture de la machine à laver.

Mais à long terme, on peux supposer, sans trop se tromper, que le mobilier évoluera également intégrant aussi des modules robotiques s'approchant de la domotique en pleine croissance mais encore réservée.

Lorsque les fabricants de machine à laver intégreront eux aussi un module wifi (ou CPL) dans leur machines il sera possible de débloquer la porte ou sélectionner un programme en envoyant une instruction sur le réseau wifi ou depuis internet.

Le robot chargé de la lessive pourra demander au système l'ouverture de la porte, y déposera le linge, et attendra le signal que la machine transmettra au système lui indiquant la fin du cycle. D'une autre manière les portes battantes des placards pourraient être transformées en portes coulissantes.

Les architectes et designers seront au fur et à mesure amenés à intégrer ces modules robotiques utiles au quotidien de chacun, car tout le monde (ou presque…) lave son linge, fait le ménage... Ils devront prévoir des emplacements où stationneront les robots mobiles en attente d'instructions, leur faire une place dans un meuble? leur réserver une pièce? En tout cas il faudra progressivement les intégrer à l'environnement lors de la conception des futurs bâtiments... leur prévoir un moyen de monter à l'étage pour accomplir leur tache ou imaginer un monte-charge ou encore un module robotique dont la fonction serait de monter les autres robots à l'étage.

28.1.13 1h34

Lire la suite : Premiers Tests