InvisibleMaze

From Hackstrich
Revision as of 14:43, 27 October 2012 by SarahEmm (talk | contribs) (Changing some protocol specs to reflect current reality.)

This is a project for Burning Man 2013.

Project Status

  • 2012-10-26: Wrote a basic lighting driver, receives commands over the UDP protocol and controls the Art-Net lighting via ruby-artnet. Improved the sound driver so that it now dynamically loads all sounds found in sounds/.
  • 2012-10-22: Wrote the basic functionality for ruby-artnet.
  • 2012-10-20: Wrote a bunch more software. Sound driver, laser beam driver/emulator, game logic/maze driver, and the GUI console are all in working states now.
  • 2012-10-19: Started working on the Console half of the software, including maze generation (which will eventually move to the Backend half).
  • 2012-10-16: Changed concept from Tic-Tac-Toe to an invisible maze.
  • 2012-09-17: Completed schematic and board layout for the Hub LED board. Will submit it with the main Hub board.
  • 2012-09-16: Started designing the Hub LED board that plugs into the Hub board and provides R, G, and B high-power LEDs and FETs to control them.
  • 2012-09-12: Finished checklist on strip board, CAMed and submitted via OSH Park for manufacturing.
  • 2012-09-11: Started working through checklist, needed a bunch of changes to make IR emitter/detector line up.
  • 2012-09-09: Started board layout.
  • 2012-09-08: Put together BOM and designed schematic for the strip board containing 5 LEDs, the drivers for them (WS2801), the IR emitter/receiver, and the ADC/logic for the IR.
  • Wednesdayish on the playa: Started throwing around ideas for 2013's project.

Random Thoughts

  • Strips of LEDs/IR sensors run in clear tubes like the Man perimiter's LEDs
  • Hubs located at cross points which have high powered LEDs to light squares and laser beams to detect people's location
  • All run off the StrichLux system the same as Beacon4
  • Higher-resolution grid than was planned for TTT, maybe 4x4 or 5x5 1m or 2m squares?
  • Stepping into a square causes the system to generate a maze with the square you stepped in as the starting square.
  • Maze is briefly flashed on the lighting strips, then goes dark again.
  • "Bumping into a wall" on the maze causes a buzzer-type-sound and that wall to go red.
    • Would it also flash the entire maze again? Probably need to wait and see what works best once the system is built.
  • Each bump is added up on some kind of scoreboard
    • Could have a high-score-board too, with some way for people to enter initials?
  • Would probably need/want voice prompts to tell people what to do?

Software Architecture

Components

  • console - allows viewing of the status of the whole system for troubleshooting, monitoring, etc.
  • maze-driver - builds the actual maze and runs all game logic
  • lighting-driver - runs the lighting itself
  • beam-driver - accepts input from the laser beam detection system
  • sound-driver - handles playing sounds

Protocol

  • UDP-based, broadcasts data to a "packet reflector" which then sends it out to all drivers and the console.
  • Each update is in its own UDP packet on port 4444, then reflected out to a port for each driver
  • Parameters for an update are separated by spaces, quoted if the parameter has a space within it
  • Example: beam b h 1 2
  • Updates:
    • beam - Laser beam breaking/making
      • Sender: input-driver
      • Parameter 1 - (b)reak or (m)ake
      • Parameter 2 - (h)orizontal or (v)ertical beam
      • Parameter 3 - x position of beam
      • Parameter 4 - y position of beam
    • event - Textual event information
      • Sender: all drivers
      • Parameter 1 - From driver
      • Parameter 2 - Text event message
    • maze - Maze layout refresh
      • Sender: maze-driver
      • Parameter 1 - Number of rows/cols (currently must be square)
      • Parameters 2 - size*size - horizontal wall data (rows, then cols)
      • Parameters size*size+1 - size*size*2 - vertical wall data (rows, then cols)
      • Data values:
        • 0 - open
        • 1 - unhit
        • 2 - hit
        • 3 - start
        • 4 - end
    • playerloc - Update where the player is on the board
      • Sender: maze-driver
      • Parameter 1 - X location
      • Parameter 2 - Y location
    • sound - Make a sound
      • Sender: maze-driver
      • Parameter 1 - Sound to make:
        • buzz - Buzzer, used when hitting a wall
    • state - Notify of the game state changing
      • Parameter 1 - Old state
      • Parameter 2 - New state
      • State values:
        • init - Engine starting
        • attract - No game in progress, attract mode running
        • mazegen - Maze is being generated
        • ingame - Game in progress