Aller au contenu
ErebusDocs
v26
Français
Ceci est la documentation d’Erebus v26, qui n’est plus la dernière version.Voir la dernière documentation

Explorer et cartographier

Un robot qui erre au hasard ne marquera pas beaucoup de points. Cette page montre comment passer de l’errance à une exploration méthodique. Ce sont des idées sur lesquelles construire, pas une solution complète.

Les cases font 12 cm de large : la position GPS vous donne donc la case. Comme la position de départ change d’un monde à l’autre, mesurez tout à partir d’elle :

TILE = 0.12
startX, _, startZ = gps.getValues() # At the start of the game
def currentTile():
x, _, z = gps.getValues()
return round((x - startX) / TILE), round((z - startZ) / TILE)

Tenez un dictionnaire des cases, avec ce que vous savez de chacune : quels côtés ont des murs, quel est le sol, et si vous l’avez visitée.

tiles = {}
tiles[(0, 0)] = {"walls": {"N": False, "E": True, "S": False, "W": True}, "floor": "start", "visited": True}

Les cases ne disent pas tout dans les zones 2 et 3, où les murs peuvent se trouver sur des quarts de case. Stocker la carte à la résolution du quart de case, ou utiliser un nuage de points du LIDAR, vous y préparera.

Ne vous contentez pas de suivre un mur : cela n’atteint jamais les cases flottantes, dont les marqueurs valent davantage. Une approche courante :

  1. Depuis la case actuelle, listez les voisines sans mur entre les deux.
  2. Allez sur une case non visitée, s’il y en a une.
  3. Sinon, trouvez la case la plus proche ayant une voisine non visitée grâce à un parcours en largeur, et allez-y.
  4. Quand il ne reste plus de telle case, ou que le temps vient à manquer, revenez au départ de la même façon.

Traitez les trous comme des murs. Les marécages coûtent du temps, et davantage à chaque fois que vous entrez dans le même : ne les visitez que si cela en vaut la peine.

  • Absence de progression (Lack of Progress) : le robot est ramené au dernier point de contrôle. Écoutez le message L, et mettez à jour votre position.
  • Temps : demandez le temps restant avec G. Gardez-en assez pour envoyer la carte et revenir au départ.
  • Bruit : les capteurs sont bruités : comparez plusieurs mesures avant de vous fier à un mur ou à un marqueur.

La matrice de la carte compte 4 cellules par case, plus une. Pour une case à la ligne r et à la colonne c de votre carte :

Élément Position dans la matrice (ligne, colonne)
Marques au sol, comme 4 ou 5 Lignes 4r + 1 et 4r + 3, colonnes 4c + 1 et 4c + 3
Mur nord Ligne 4r, colonnes 4c à 4c + 4
Mur ouest Colonne 4c, lignes 4r à 4r + 4

Les cellules de la matrice de la carte pour la case de la ligne r et de la colonne c : le mur nord à la ligne 4r, le mur ouest à la colonne 4c, et les marques au sol au centre des quarts de case

Votre carte peut commencer n’importe où : Erebus aligne la matrice à l’aide de la case de départ, et essaie les quatre rotations. Les Règles de cartographie expliquent chaque valeur de la matrice. Ensuite, soumettez-la.

Testez-la avec les mondes d’exemple, dont les bonnes réponses figurent dans Règles de cartographie. Le résultat apparaît sous la forme Map Correctness dans l’historique de la fenêtre de contrôle.