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 distanced
(en m)robot.reculer(d)
: fait reculer le robot d’une distanced
(en m)robot.pivoter(a)
: fait pivoter le robot d’un anglea
(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
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)
).
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
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
- Créer un dossier
robot
sur votre disque, - Télécharger l’archive ZIP suivante : robot.zip,
- La déplacer dans le dossier
robot
, - La dézipper (clic-droit puis 7-Zip > Extraire ici)
- Ouvrir un IDE Python (pyzo, …) et placer son explorateur de fichier (File Browser) sur le dossier
robot
, - Ouvrir le fichier
robot.py
qui s’y trouve (double-clic), - Depuis la console de Pyzo (Shells) faire un clic-droit puis Change current directory to editor file path.
robot.py
.
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 :
Spirale
On souhaite que le robot réalise un parcours en spirale: