Ignorer la navigation

Le script

Introduction

L'algorithme a été écrit avec Mblock version 3.42.11.
Il est embarqué dans le robot.
Il a été conçu en plusieurs blocs. Celui-ci peut certainement être optimisé.
L'avantage qu'il présente c'est que chaque problème peut être attribué à des élèves en fonction du niveau de difficulté.

Télécharger le script

Les variables

capteur1
Stocke la valeur de la distance du capteur avant sur le port 1.
capteur2
Stocke la valeur de la  distance du capteur avant gauche sur le port 2
capteur3
Stocke la valeur de la  distance du capteur arrière gauche sur le port 3
Compteur
Stocke la valeur compteur qui varie en fonction de la direction prise par le Mbot
distance
Stocke la valeur calculée de la distance, et ensuite un angle de rotation 
Etat
Stocke la valeur binaire des 3 capteurs à ultrasons.
Temps
Stocke la valeur temps calculée à partir d'un angle.

La gestion des états

Ce premier script permet de gérer les différents états des capteurs.debut

Ce script permet met la variable compteur à 0 .
Ensuite le programme relève la valeur des capteurs et transforme sa valeur en tout ou rien dans une variable.
Attendre 0.1 seconde ralentit légèrement cette boucle pour éviter les bugs lors des mouvements du robot.
Si la distance du capteur avant (port1) est inférieure à 7 alors la valeur de la variable capteur 1 passe à 1 sinon elle passe à 0.
Si la distance du capteur côté gauche avant (port 2) est inférieure à 15 alors la valeur de la variable capteur 2 passe à 1 sinon elle passe à 0.
Si la distance du capteur côté gauche arrière (port 3) est inférieure à 15 alors la valeur de la variable capteur 3 passe à 1 sinon elle passe à 0.
Nous affectons à la variable ETAT  le calcul des valeurs des différentes variables capteurs.

Cette valeur ETAT nous donne les différentes possibilités à traiter, en fonction de la valeur des  trois capteurs.

Capteur 1

(port1)

Capteur 2

(port2)

Capteur 3

(port 3)

ETAT
0 0 0 0
0 0 1 1
0 1 0 10
0 1 1 11
1 0 0 100
1 0 1 101
1 1 0 110
1 1 1 111


L'état 0 :

Si la variable compteur est différente de la valeur 0,
si la variable ETAT est égale à 0, Mbot avance à la vitesse de 100.


L'état 1:

etat1

Si la variable compteur est différente de la valeur 0,
Si la variable ETAT est égale à 1, Mbot avance jusqu'à ce que la distance du capteur sur le port 3 soit supérieur à 15 , c'est-à-dire jusqu'à ce que ce capteur ne détecte plus le mur.
La variable compteur est incrémentée de la valeur 1.
Appel est fait aux blocs personnalisés Tourner avec la variable interne 90 et se dégager.

Le bloc Tourner et se dégager seront traités par la suite.
Mais ici Mbot tourne à 90 à gauche et se dégage légèrement  afin d'être sûr que son capteur avant gauche détecte le mur perpendiculaire à sa trajectoire initiale.


L'état 10 :

Si la variable compteur est différente de la valeur 0,
si la variable ETAT est égale à 10, Mbot avance jusqu'à ce que la distance du capteur sur le port 3 soit inférieure à 15 , c'est-à-dire que ce capteur détecte le mur

ou

s'il n'existe pas de mur, jusqu'à ce que la la durée depuis l'initialisation soit supérieure à 1 seconde.


L'état 11:

état11

Si la variable compteur est différente de la valeur 0,
Si la variable ETAT est égale à 11, un appel au bloc personnalisé Correction de la trajectoire est fait, et Mbot avance à la vitesse de 100.


L'état 100 :

etat100

Si la variable compteur est différente de la valeur 0,
Si la variable ETAT est égale à 100, la variable compteur est incrémentée de la valeur 1.
Appel est fait aux blocs personnalisés Tourner avec la variable interne 90 et se dégager.

Le bloc Tourner et se dégager seront traités par la suite.
Mais ici Mbot tourne à 90 à gauche et se dégage légèrement.


L'état 101 :

etat101

Si la variable compteur est différente de la valeur 0,
Si la variable ETAT est égale à 101, par défaut on arrête le moteur.
En effet, dans un fonctionnement normal, il n'est guère possible que la variable ETAT soit égale à 101.


L'état 110 :

etat110

Si la variable compteur est différente de la valeur 0,
Si la variable ETAT est égale à 110, par défaut on arrête le moteur.
En effet, dans un fonctionnement normal, il n'est guère possible que la variable ETAT soit égale à 110. Le Mbot étant plus petit que les parois du mur.


L'état 111 :

etat 111etat 111

Si la variable compteur est différente de la valeur 0,
Si la variable ETAT est égale à 111, la variable compteur est incrémentée de la valeur -1.
Appel est fait au bloc personnalisé Tourner avec la variable interne - 90.
Le bloc Tourner sera traité par la suite.
Mais ici Mbot tourne à 90 à droite.


La gestion du compteur

Ce script doit absolument être entré en dernier.

gestion compteur

Si la variable compteur est égale à 0 alors
Si la variable capteur 1 est égale à 1, le capteur avant détecte le mur, alors la variable compteur est incrémentée de la valeur -1.
Appel est fait au bloc personnalisé Tourner avec la variable interne - 90.
Le bloc Tourner sera traité par la suite.
Mais ici Mbot tourne à 90° à droite.
Sinon si la variable ETAT est égale à 11, les capteurs avant et arrière gauche captent le mur, un appel est fait au bloc personnalisé Correction de la trajectoire, et on avance.

Les blocs personnalisés

Le bloc correction trajectoire.

Il s'agit ici de garder la trajectoire du Mbot parallèle au mur.

L'appel de ce bloc se fait par la commandecorrection trajectoire

correction trajectoire

Ici, nous limitons la distance du capteur gauche inférieure à 25, afin d'éviter le déclenchement du script avec un mur qui serait en arrière plan.
Si les valeurs arrondies des capteurs gauche avant et droit ne sont pas égales alors nous calculons le rapport entre le côté opposé et le côté adjacent. Nous affectons cette valeur à la variable distance .
Nous calculons ensuite l'angle de rotation.
Si celui-ci est supérieur à 0.5 alors nous faisons appel au bloc Tourner avec la valeur de l'angle stockée dans la variable distance. Ceci a pour but d'éviter un  "tremblement"du Mbot lors de son déplacement.

Le bloc angle :

Etant impossible de faire tourner le Mbot d'un angle définit.
L 'appel de cette fonction se fait par tourner  avec une variable angle.
Ce bloc permet de transformer un temps de rotation en angle avec une relation de proportionnalité. Le signe de l'angle  détermine, si Mbot tourne à gauche ou à droite.

angle

Le bloc se dégager :

Permet de faire avancer légèrement le MBot pendant un temps défini.
L'appel de cette fonction se fait par

se dégager

Un script optionnel

Ce script, qui doit être encore amélioré, permet à Mbot de se dégager si un des capteurs est à moins de 3 cm du mur, ou vient frotter sur le mur.
En effet, si le capteur est trop proche du mur, sa valeur est de 400.

Mais, si le capteur ne capte rien devant lui sa valeur est aussi de 400. Pour résoudre ce problème, le script, placé en fin de programme, permet de vérifier dans un premier temps si le Mbot est proche d'un mur avec l'état du capteur (vérifié en début de script) et si l'état du capteur en temps réel est égal à 400 alors en fonction des cas, différents dégagements sont enclenchés.