Bringing the classic
arcade game to the
Bringing the classic
arcade game to the
The PacBot competition is a competition designed and hosted by the Harvard Undergraduate Robotics Club. The goal of PacBot is two-fold: to avoid the pursuing “ghosts” – Inky, Pinky, Blinky, and Clyde – and to collect as many points as possible with the three given lives. The PacBot must autonomously navigate the arena, plot its trajectory and that of the ghosts, and strategically collect points. Our PacBot seeks to win the competition by collecting more points than the competing teams.
Originally drawing inspiration from Micromouse, PacBot has a similar chassis. our latest model will have improvements to the mechanical body, the electrical circuitry, and the complex code to best suit the needs of speed, compactness, and efficiency. The competition takes place in a scaled-up Pacman-inspired arena hand-crafted in parallel along with the robots. Schools around the northeastern United States will enter their PacBots into the arena, hoping to elude the hungry ghosts.
As of 9/15/2019
Below is the preliminary ruleset that must be followed when designing your robots for the fourth annual 2020 PacBot Competition at Harvard University. Note that these rules are dynamic and subject to change between now and up to one month before the competition date. Any time the rules are updated, an email will be sent to each participating team alerting them of the change and its purpose. Should you have any questions about the reason for a rule provided below, please email Thomas Biasi, (email@example.com) or Charlie Colt-Simonds (firstname.lastname@example.org), the PacBot Project Managers.
This competition will mimic the popular game of Pac-Man. It will consist of four “ghosts,” which will be projected onto the arena, and one PacBot, which is the robot each participating team will enter in the competition. Each team’s PacBot must adhere to the specifications outlined below, and the ghosts will follow the specifications provided below. They will navigate in the arena specified below. The objective, much like in the arcade game, is to collect as many “dots” as possible. These are outlined in more detail in the “Arena” section of this document. There will be 4 “special dots” that, upon collection by your PacBot, will enable the PacBot to “eat” the ghosts for extra points. These are outlined in more detail in the “Arena” section of this document. Your PacBot will be given three lives to collect as many of the dots as possible. Scoring is outlined in more detail in the “Gameplay” section of this document. The PacBot with the highest score wins the competition.
The competition will consist of an arena, with boundaries 4” tall. The boundaries will be set up to mimic arenas found in the Pacman game. Unlike the original Pacman game, PacBots will not be able to treat the map as an infinite continuum. In other words, the PacBots cannot exit the arena on the right side and re-enter on the left side; boundaries will be strict. The arena will be identical to the virtual arena used in the game of Pacman (a SolidWorks file of the arena will be sent to each team), with each passage being 7” wide, NOT including the quarter inch boundary. Each grid unit will be assumed to have one implicit “dot” that will be automatically collected when the PacBot enters that unit (more details found here). Note that the PacBot does not have to go through the unit to collect the dot; it can enter it and turn around. There will be four “special dots” in the arena at the corresponding locations, as seen in the above webpage. More details about these special dots are given in the “Gameplay” section of this document. The dots on the map will not respawn at any time. Teams should be aware that due to design constraints the arena is built in three pieces, and may have small gaps or lips in the seams between the sections.
The goal of your PacBot is to gain as many points as possible. Ten points are awarded for each white dot consumed by the PacBot. The special dots (“Power Pellets”) are worth 50 points each. When the special dots are taken, a signal will be sent to the ghosts to avoid the PacBot for 20 seconds. At the end of this time, the ghosts will resume chasing the PacBot. In the event that your PacBot reaches another special dot within this time period, the scared timer is reset to 20 seconds for all ghosts. More details on the ghosts’ behavior is outlined in the “Ghosts” section of this document. During this 20 second period in which the ghosts are avoiding the PacBot, your PacBot can pursue the ghosts. If your PacBot catches a ghost, your team will be awarded 200 points for the first ghost, 400 for the second ghost, 800 for the third, and 1600 for the fourth. To catch a ghost, your PacBot must occupy the same space as the ghost. Once a ghost has been eaten, it will respawn in the ghost house and stay there for a short period of time and will no longer be frightened. Note that unlike the actual PacMan game, no fruit will spawn that could be collected for extra points.
Any time that a ghost catches your PacBot, your team will be deducted one life. At the end of each life, a “pause” signal will be sent out to your PacBot. Your PacBot must stop all autonomous movement at this time. The ghosts will also enter standby mode and will return to their home position.
The team that has the most points after losing their three lives wins the competition. The dots do not reappear when your PacBot loses a life; upon consumption, the dots vanish for the remainder of the game. The game ends when a team has lost all of their three lives or has collected all of the dots on the board. There are no additional levels beyond the first one. If it should be the case that the 20 second timer from a special dot still has remaining time when all the dots have been consumed, the game will end. Should two or more teams end the game by collecting all of the dots on the board, the winner will first be decided by the number of points, then by the number of lives left, then by the time taken to do so.
All the code that we will run on our arena system (base game code, visualization code and computer vision code) is open source and can be accessed with instructions here.
The ghosts will not take physical form, but will instead be projected onto the arena. Assume that the ghosts will be traveling at 7” per second, which translates to 2 grid units per second, although they may be sped up depending on the performance of the participating PacBots. The ghosts will act independently of each other; they will not assist each other in locating and chasing your PacBot. They will have slight differences in their code to prevent all ghosts from following the same path. These differences will mimic the differences of the code in the actual game of Pacman, found here. To catch a ghost, your PacBot must enter the grid space currently occupied by the ghost. Likewise, for a ghost to catch your PacBot, it must also occupy the same grid space simultaneously. When a ghost catches your PacBot, the signal to pause will be sent out. Your PacBot must enter standby mode at this time (read: stop all movement). The PacBot will be placed at its home position, and then the game will be resumed. When your Pacbot catches a ghost, gameplay will continue uninterrupted and the ghost will return to its home position. At the beginning of the game, Blinky will start just outside its home position, and approximately every 5 seconds, another ghost will exit the enclosure. The ghosts are temporarily eliminated when they are caught, and will respawn at their home position.
Each robot must be fully autonomous and automatically respond to signals outlined in this document.
There is no budget limit for any team that wishes to participate. You are welcome to spend as much money on your PacBot as you wish provided that it adheres to the specifications below (primarily Specification #9).
Each robot must be able to completely fit within a 7”x7” grid unit. Bear in mind that this is the minimum distance between walls, so you will likely want to build your robot smaller than this size.
Each robot must be no greater than 4” tall.
Each PacBot should have a flat area on top with room for a 3”diameter yellow acrylic computer vision target, which will be used for tracking the robot.
The field will have an overhead camera that the organizers will use to detect the position of the PacBot and the ghosts. Each robot will connect to our server via a socket over WiFi to receive the position of the ghosts, and other game state. A library to do this will be provided in Python. Some information will also be provided for writing custom libraries in other languages using Google’s Protocol Buffer library. (https://www.sparkfun.com/products/8665). NOTE: We will not be supporting Xbee communication this year.
The robot will receive messages via a socket that can be read using our library.
When a given function is called, the library will provide an object or struct with the game state to the robot’s code, if an update is available.
If the game state is “paused”, the robot must immediately stop all autonomous movement. As such, the robot must read from the server multiple times a second.
Detailed documentation on how to work with this code and server will be provided along with the libraries.
The information sent to the robot will include the following information:
The game state: paused or running
The position of the Pacbot according to the computer vision software
The position of each ghost
Whether each ghost is frightened
The Pacbot’s current score
The Pacbot’s remaining lives
Each robot must stay within the boundaries of the arena at all times. Robots cannot damage, adjust, move, or climb over any boundary of the arena (See Specification #9).
Bear in mind that this is a friendly gathering of people seeking to further their knowledge of robots and participate in a fun challenge. For this reason, we urge teams to build their robots in good faith with the spirit of competition. Any unfair or unreasonable characteristic of your PacBot will be considered a violation of this principle.