Programmer un robot photophile

Le robot photophile est un robot qui se dirige vers la lumière (photophile = qui aime la lumière). C'est peut-être le plus simple de tous les algorithmes de détection. Si vous êtes un débutant, il pourrait être votre premier algorithme.

Un robot qui se dirige vers la lumière (photophile)
Vue artistique d'un robot qui se dirige vers la lumière

Comment capter la lumière

Pour que cela fonctionne, votre robot a besoin d'au moins deux capteurs de détection de lumière.
Les photorésitances sont souvent employées et faciles à utiliser car elles s'intègrent dans un circuit comme des résistances. La valeur de la résistance change en fonction de l'intensité lumineuse à laquelle elle est exposée.

Un détecteur infra-rouge, ou une photodiode, est aussi un composant valable pour ce genre d'application ou expérience.
En fait, tout dépendra du type de lumière (longueur d'onde ou bande spectrale) qu'il faut détecter.

Les capteurs se placent à l'avant du robot et sont espacés les uns des autres. Un sur le côté gauche de votre robot, l'autre situé sur le côté droit.

Le système qui pilote votre robot va lire la valeur analogique des deux capteurs, faire une comparaison et prendra une décision sur les actions à effectuer pour atteindre la source lumineuse.

Programmation

Comportement

Le capteur qui reçoit le plus de lumière donne la direction que votre robot doit prendre.
Si la photo-résistance de gauche reçois plus de lumière que la photo-résistance de droite, le robot doit tourner ou tendre vers la gauche.
Si les deux capteurs renvoient la même valeur, ce qui signifie qu'ils reçoivent la même quantité de lumière, le robot doit continuer tout droit.

Description fonctionnelle du robot photophile
Description fonctionnelle d'un robot photophile

Pseudo-code :


lire capteur_gauche
lire capteur_droit

si capteur_gauche détecte plus de lumière que capteur_droit
faire tourner le robot vers la gauche

si capteur_droit détecte plus de lumière que capteur_gauche
faire tourner le robot vers la droite

si capteur_droit détecte même lumière que capteur_gauche
faire aller le robot tout droit

recommencer

Remarque : l'algorithme du photophile fonctionne très bien avec l'algorithme de commande différentielle.

Photophile en mode évitement d'objets

En utilisant le même code et le même robot, vous pouvez faire une petite modification pour que votre robot soit capable d'éviter les objets.

Pliez les photo-résistances de sorte qu'elles pointent vers le bas, et soient proches du sol. Selon l'éclairage, les objets seront vus comme des ombres sur le sol. Eviter ces zones sombres pour votre robot photophile fera partie de son comportement naturel.

Bien sûr, si un objet brille (reflet), ou si vous avez un plancher sombre et des murs blancs, il se pourrait que le fonctionnement soit dégradé. Il faudra alors jouer sur les seuils de détection des capteurs. L'idéal étant de disposer d'un sol assez clair avec des objets foncés ou qui absorbent la lumière.

Suivre une ligne

Pour transformer votre photophile en robot suiveur de ligne blanche il suffit de faire pointer les cellules photo-résistantes vers le sol. Les photo-résistances seront rapprochées l'une de l'autre, de sorte que la distance qui les sépare soit inférieure à la largeur de la ligne blanche. Là encore vous pouvez utiliser le même algorithme.

Amélioration de l'algorithme

Algorithme avec une dose de logique floue

Cet algorithme fait la même chose que l'original. Mais dans ce cas, le contrôle repose sur une évaluation plus avancée des valeurs des capteurs. La comparaison n'est plus ternaire mais en « logique floue ».

En pratique, votre robot ne possède plus seulement les trois modes de base (tourner à gauche, tourner à droite et aller de l'avant) mais au lieu de cela, il aura des commandes proportionnelles comme tourner à gauche de 10 degrés ou tourner à droite rapidement. Le code n'est pas plus complexe mais plus subtil à mettre au point (détermination de la constante de proportionnalité).

Pseudo-code :


lire capteur_gauche
lire capteur_droit

commande_moteur_gauche = 
(capteur_gauche - capteur_droit) × constante_proportionnelle

commande_moteur_droit = 
(capteur_droit - capteur_gauche) × constante_proportionnelle

recommencer

Photophile approche « split-brain »

Cet algorithme fonctionne sans comparaison des valeurs des photo-résistances.
Au lieu de cela, il suffit de commander le moteur droit à partir de la lumière provenant du capteur gauche, et le moteur gauche avec seulement les données présentes sur le capteur droit.

Robot en mode split-brain
Un robot photophile câblé en mode « split-brain »

Vous pouvez également obtenir des variations intéressantes en inversant les capteurs pour expérimenter un comportement de type split-brain.

Pseudo-code :

lire capteur_gauche
lire capteur_droit

mouvement_roue_gauche = capteur_droit × constante
mouvement_roue_droite = capteur_gauche × constante

recommencer

A propos du « split-brain »

Dans le cerveau humain, la communication entre les deux hémisphères cérébraux se fait par des faisceaux d'axones qui les relient entre eux. La plus volumineuse de ces commissures s'appelle corps calleux.

Corps calleux du cerveau humain
Description du corps calleux du cerveau humain

Il apparaît qu'un sectionnement de ce corps calleux (pour une raison médicale) n'empêche pas de vivre le sujet ainsi opéré. Ce dédoublement du cerveau (split-brain) n'empêche pas la réalisation des tâches courantes de la vie de tous les jours.

Pour notre robot, l'approche split-brain est un mode fonctionnement ou les données ne sont pas partagées. En effet, dans la description de cet algorithme ne figure pas la comparaison des valeurs des capteurs pour évaluer les actions à faire.
Une roue effectue son mouvement proportionnellement à la seule grandeur analogique du capteur qui lui est attribué ; cela s'effectue comme ci l'autre ensemble capteur + roue n'existait pas.

Robot photophobe

Le robot photophobe fuit la lumière au lieu de la poursuivre. Il y a trois manières pour faire cela.

La première consiste simplement à inverser les positions des photo-résistances gauche et droite. Le câblage ne change pas et le code est identique. Cela permettra au robot d'éviter la lumière. C'est un peu comme ci on demandait à un humain d'intervertir ses deux yeux sans déconnecter les nerfs optiques ! Ce n'est pas très pratique.

La deuxième manière consiste à faire un changement du câblage.
La position des capteurs reste fixe (ce qui rend le sytème plus stable et plus fiable mécaniquement). Il faut inverser l'arrivée des fils des photo-résistances au niveau des connecteurs d'entrée de la carte pilotant le système et les moteurs.

Robot en mode photophobe
Robot câblé en mode photophobe

La troisième manière consiste à faire un changement dans le code.
C'est la manière que je préfère car elle met en oeuvre une approche comportementale de la programmation du robot. Nous ne changeons rien sur le positionnement des capteurs, rien sur le câblage, mais nous demandons au robot de réagir autrement ; il doit changer de comprtement vis à vis de son exposition à la lumière.

Le pseudo-code :


lire capteur_gauche
lire capteur_droit

si capteur_gauche détecte plus de lumière que capteur_droit
faire tourner le robot vers la droite

si capteur_droit détecte plus de lumière que capteur_gauche
faire tourner le robot vers la gauche

si capteur_droit détecte même lumière que capteur_gauche
faire aller le robot tout droit

recommencer

Il est possible d'implanter un dispositif d'inversion d'algorithme pour éviter le démontage ou la reprogrammation.