Robot

Présentation

Un robot aspirateur doit se déplacer dans un bâtiment pour effectuer sa tâche. Lorsque le niveau de charge de sa batterie est faible, il doit retourner à sa base pour y être rechargé en énergie électrique. Pour cela, il est programmé en Python et son modèle numérique est un objet nommé robot.

Il peut réaliser différentes actions en utilisant les méthodes suivantes :

  • robot.avancer(d) : fait avancer le robot d’une distance d (en m)
  • robot.reculer(d) : fait reculer le robot d’une distance d (en m)
  • robot.pivoter(a) : fait pivoter le robot d’un angle a (en degrés, positif ou négatif, le sens positif étant le sens trigonométrique)

 

Exemple : pour avancer de 3 mètres on écrit :

robot.avancer(3)

 

Le bâtiment à visiter a la forme suivante, découpé en « cases » de 1 mètre par 1 mètre :

 

Déplacement en boucle ouverte

Écrire la séquence d’instructions qui doit permettre au robot d’atteindre la base (chaque « case » mesure 1 mètre) à partie de sa position.

 

Ajout de capteurs

Pour rendre le robot un peu plus autonome, on lui ajoute un capteur : un détecteur de présence, placé à l’avant, et délivrant une information binaire.
La méthode robot.voie_libre() renvoie False si un mur se trouve juste devant le robot (à moins de 1 mètre) et True dans le cas contraire.

De plus, pour déterminer si le robot est arrivé à sa base, il faut comparer sa position à celle (connue à l’avance) de sa base. Le bâtiment est découpés en cases et la position du robot est données par son attribut robot.position, de type tuple, donnant sa position dans le bâtiment sous la forme (ligne, colonne) (la case en haut à gauche du bâtiment est à la position (0, 0)).

 

Donner la condition (de type booléen) qui traduit le fait que le robot n’est pas encore arrivé sur sa base (observer le plan du bâtiment pour déterminer les coordonnées de cette base).
 
×

 

Déplacement en boucle fermée

En boucle fermée, le robot utilise ses capteurs pour se déplacer en fonction de son environnement, et ainsi être capable de se déplacer dans n’importe quel bâtiment.

La stratégie adoptée consiste à forcer le robot à longer un mur (celui à sa droite par exemple) :

  • Tant que la base n’a pas été atteinte :
    • Le robot se tourne sur sa droite (pour « voir » s’il y a un mur)
    • Si la case en face de lui est libre :
      • Le robot avance d’une case
    • Sinon
      • Le robot fait demi-tour
Traduire cet algorithme en Python en utilisant les méthodes robot.avancer , robot.pivoter, et robot.voie_libre, ainsi que les structures algorithmiques.

 

 

Vérification

Le programme ci-dessous propose une implémentation en Python d’un « bâtiment » et d’un « robot ».

Dans ce programme, robot est un objet de type Robot, et possède les méthode décrites plus haut.

Préparation

  1. Créer un dossier robot sur votre disque,
  2. Télécharger l’archive ZIP suivante : robot.zip,
  3. La déplacer dans le dossier robot,
  4. La dézipper (clic-droit puis 7-Zip > Extraire ici)
  5. Ouvrir un IDE Python (pyzo, …) et placer son explorateur de fichier (File Browser) sur le dossier robot,
  6. Ouvrir le fichier robot.py qui s’y trouve (double-clic),
  7. Depuis la console de Pyzo (Shells) faire un clic-droit puis Change current directory to editor file path.

 

Afin de vérifier si l’algorithme fonctionne correctement, l’intégrer dans le programme robot.py.

 

Comparer la performance du robot en lui faisant longer le mur de gauche.

 

Phase de nettoyage

En phase de nettoyage, le robot doit parcourir toute la surface au sol, de la manière la plus efficace possible, c’est à dire en parcourant le moins de distance possible.

Hypothèses :

  • La pièce est rectangulaire, sans mur intérieur (remplacer la 3ème ligne par batiment = Batiment(piece)),
  • Le robot ne connait pas à l’avance les dimensions de la pièce, mais dispose du capteur détectant les obstacle devant lui (utiliser la méthode robot.voie_libre()), et peut les déterminer lors de son parcours (utiliser une variable),
  • Le robot part du coin haut-gauche.

Zigzag

On souhaite que le robot réalise un parcours en zigzag :

Réaliser le programme Python permettant de réaliser ce parcours (on pourra utiliser une variable supplémentaire pour mémoriser la direction dans laquelle se déplace le robot).

 

Spirale

On souhaite que le robot réalise un parcours en spirale:

Réaliser le programme Python permettant de réaliser ce parcours (on pourra utiliser deux variables pour mémoriser les dimensions de la pièces).

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *