Transformer Thymio en crocodile qui mord sur VPL !


#1

Bonjour à tous,
Je propose des TAP autour de la robotique à l’école de l’isle verte de Soustons, et je souhaiterai réaliser un projet simple pour la fête des TAP, le 2 juin.
Nous avons choisis avec les enfants, de déguiser Thymio en crocodile (ou autre créature qui mord) et d’écrire un programme pour simuler une “attaque” du Thymio quand on approche sa main des capteurs de devant.
J’ai lu les chapitres 7&8 du pdf “thymio-vpl-tutorial-fr” qui m’ont aidé à la compréhension des nouveaux blocs du mode avancé, mais je sollicite votre aide pour écrire un code fonctionnel.
En fouillant un peu sur le site de Thymio, je suis tombé sur un passage dans la vidéo sur Thymio à la nuit des musées, où il y a exactement le projet que nous souhaitons mettre en place. Voici la vidéo en question:

le passage se situe à 00:58, on y voit un thymio essayer de mordre la main d’une fille…

Quelqu’un peut il m’aider quant à l’écriture du code à mettre en place via VPL avancé svp ?
J’ai réussi à écrire le code pour réaliser l’action voulu pour un capteur, mais j’ai des conflits quand je veux écrire un code qui prennent en compte les 5 capteurs de devant …


#2

Bonjour,
En fait, il faut écrire le même code pour chacun des capteurs avant.
En effet, si vous allumez tous les capteurs pour simuler la morsure, il faut que tous les capteurs détectent en même temps la présence de la main. Si les capteurs sur les côtés ne détectent rien, même si les capteurs avant détectent quelque chose, rien ne se passe.
Allumer tous les capteurs pour une détection veut dire "Si tous les capteur détectent quelque chose EN MEME TEMPS alors le robot réagit"
Donc il faut écrire la même détection pour les 5 capteurs séparément.


#3

Merci pour ta réponse.
C’est bien ce que je me disais. Et c’est ce que j’ai tenté, mais je dois alors utiliser les “états” (me semble t il) et c’est à ce moment là que j’ai des “conflits” ce ne sont pas vraiment des conflits dans le sens où il n’y a pas de message d’erreur indiqué, mais dans les actions effectués par Thymio. Je vous envoie ci joint un test dans lequel j’essaye de configurer 2 détecteurs (avant et extrême gauche uniquement):

Je ne suis pas vraiment pleinement satisfait du résultat, et je sens bien que si je continue je vais m’emmêler les pinceaux…
Mes erreurs se situent probablement dans les états que je crée, j’essaye de faire au plus simple mais…


#4

Votre code est trop complexe pour la situation …
Prenons le détecteur central par exemple :

  • Allumer le détecteur central en rouge mode avancé
  • Si je détecte quelque chose, j’avance pendant 0.5 secondes (les roues ferment la bouche)
  • quand le timer revient à 0 je recule pendant 0.5 secondes (la bouche s’ouvre à nouveau)

Je ne vois pas pourquoi utiliser les états, les capteurs étant indépendants, il agissent seuls à la détection. Il faut juste répéter ces deux lignes pour chaque capteur.

De plus, vous ne pouvez passer d’un état étient à un état actif (orange). Il faut d’abord mettre l’état à 0, donc cliquer une fois sur un état pour l’avoir en fond blanc entouré de noir -> état 0, puis le passer ensuite à l’état orange -> état 1
Passer de l’état éteint (grisé) à l’état 1 (orange) ne fonctionne pas.

Tenez moi au courant de l’évolution de vos tests


#5

Merci pour cette remarque sur les passage d’un état grisé à orange, j’ignorais ce point là.
Je vous joint le code que j’ai écrit après votre réponse, qui me semble bien convenir à ma demande.

J’ai aussi appris qu’on peut utiliser un seul timer orange pour tous les timer bleus !
Le code est il améliorable selon vous ?
En tout cas, merci de vos réponses !
J’essaierai de documenter ce petit projet après la fête des T.A.P.


#6

Alors, le résultat semble fonctionnel mais jusqu’ à une certaine limite.
En effet, il arrive parfois que Thymio n’effectue pas le mouvement arrière jusqu’au bout, forçant “la machoire” a passé devant, puis sous les roues.
Je vais tenter de jouer sur la sensibilité des détecteurs…


#7

Ci-joint, un GIF animé du problème.

On peut observer que la première fois, ça fonctionne, mais la seconde, il n’effectue pas la marche arrière.
Le tymio doit revenir à sa position initiale. Comme je le disais dans ma précédente réponse, il me semble que le problème peut venir de la sensibilité des détecteurs…


#8

C’est normal, vu que le timer dit de s’arrêter après un certain temps, en allant vers l’avant ou vers l’arrière…
Donc il s’arrête en allant vers l’avant comme le dit le timer orange …
Il faut donc un timer par cas, ne s’arrêter qu’après avoir reculé.

Finalement, on peut faire plus complet avec un état si cette solution n’est pas satisfaisante.


#9

Bonjour,
En utilisant les états, on peut arriver à quelque chose de plus complet qui ressemble à ceci :

Pour les capteurs latéraux, il faut orienter thymio sur un angle pour dévier vers l’obstacle qui n’est pas devant.
Je fais tout ceci de mémoire, n’ayant plus de thymio sous la main.


#10

Bonjour,
J’ai testé ce que vous avez posté, et j’ai du ajouter une quelques modifications, car l’action effectuée n’était bonne que la première fois, les autres fois, Thymio ne revenait pas en arrière, l’état correspondant à cette action n’étant pas précisé.
Voici le code modifié, qui ne concerne que le détecteur avant:


celui-ci fonctionne parfaitement.
Voici le code modifié qui ne concerne que le détecteur gauche:

Celui-ci fonctionne très bien, je n’ai fait que changé les directions/détecteurs!
En revanche, si j’essaie de combiner les 2:

Ici, le détecteur gauche fonctionne mais celui du milieu n’effectue pas la marche arrière voulue…

Je crois deviner qu’il s’agit encore d’un petit conflit entre états, je pense être en mesure de le régler si je prends un peu plus de temps pour m’y pencher.
Encore merci pour votre aide précieuse !
Je posterai l’image du code valide final. (Quand je l’aurai trouvé !)


#11

Bonjour,
En effet, je pense que pour la détection de la première ligne du détecteur gauche, il faut préciser un état différent de la première ligne du détecteur frontal.
Finalement, vous aviez raison, c’est bien une question d’états … Mais sans thymio sous la main, je ne peux tester les programmes …
Avez vous testé de remettre l’état primitif à la dernière ligne de chaque détection, pour boucler la boucle ? vous l’avez fait dans les tests individuels, mais pas dans les tests où les deux capteurs étaient à la suite …

Je pense que quand l’action est terminée, après l’arrêt, il faut remettre les états dans le même état qu’à la première ligne de la détection pour chaque capteur.
Tenez moi au courant des avancées
Merci
Alain


#12

Avez vous testé ceci ?
<img src=“https://dm1r.inria.fr/uploads/default/original/1X/579fb71be17902d52e50e1fc2945b7c63e9b8729.jpg"width="325” height=“280”>


#13

Bonjour, je ne vous avais pas oublié !
L’événement c’est très bien déroulé ! Merci beaucoup pour votre aide.
Néanmoins, pour revenir sur l’écriture du code, pour votre proposition, j’ai voulu refaire un GIF pour vous montrer le résultat, mais la vidéo était trop longue je pense.

Pour vous décrire le comportement du Thymio, le détecteur de gauche fonctionne bien quand on l’utilise en premier, mais si on utilise celui du centre avant, il ne fait plus rien …

Je n’ai pas pu tester le dernier code proposé mais j’essaierai de vous donner un retour.

Pour ce qui est du résultat que j’ai choisis il s’agit de celui ci:

En ce qui concerne l’attache: papier 180g décoré par les enfants, et patafix. Ce dernier aspect n’est pas très au point cela dit.


#14

J’avais aussi trouvé ce post qui peut paraître similaire, mais qui inclut une notion aléatoire que je ne souhaitais pas aborder en si peu de temps. De plus, la programmation s’effectue avec un autre moyen que VPL.

https://www.thymio.org/fr:thymiocrocodile