4855 Scouter

As a high school student, I developed a cross-platform robot scouting web-app for my school's FIRST Robotics Competition team.


Dates Oct. 2019–Mar. 2020
Tools Used HTML, CSS, JavaScript
localStorage API for data management
Git version control


For the 2020 FIRST Robotics Competition (FRC) season, I built a public web-app to be used to record data on opponents present at a competition. The app is branded as 4855 Scouter, named for the team number of the team I participated in, but it is available for anyone to view and download. The app is also open source and can be viewed by anyone through GitHub.

Each FRC match pits 3 schools on an alliance against 3 other schools. Roughly 12 qualification matches are played by each school with randomly generated teammates and opponents for each match. Qualification matches are followed by elimination rounds, where the top 8 teams pick 2 robots from the remaining field to compete together with for the remainder of the tournament.

The welcome screen of the scouter.

Process and Results

My robotics team, Team 4855 Ramageddon, had long struggled to find an efficient way to scout robots at competitions, an important task given that roughly 40 robots will compete at any given event. One of the main constraints to develop under was the lack of reliable internet; due to the volume of people present at a competition, most venues cannot deliver consistent wi-fi, meaning the scouting solution would have to function while 100% offline. Most students on the team had access to only a cell phone or a school-provided Chromebook, so the solution would have to operate properly on any device.

My solution was a web app that would be downloaded onto a student's hard drive and open inside their web browser through simple HTML pages. All the data processing and analaysis was done through JavaScript.

Each scout would watch one single robot during each qualification match and take notes on its various behaviors during a match, including how many points it scored. Once a scout had collected some data, they exported their results into a file, which was handed over to a lead scout via flash drive, who then imported the data into their own system.

Left: the form a scout fills out while watching a robot. Scouts can add their own comments at the end. Right: the main app view of a scout who has collected data from a few different robots.

The lead scout can leverage the data they have and use it with multiple different analysis tools. A numerical RPI (Ramageddon Power Index) is assessed to every team in the lead scout's system, functioning much like a power rating calculated by determing a robot's average score contribution. The app also calculates other statistics for each robot, such as its likelihood to play defense during a match, its average defensive strength, and its likelihood to successfully climb at the end of a match.

A summary for team 4003. This team was given a 43.8 RPI rating based on its performance during this event. Each individual scouting report is shown below the summary.

The lead scout also has access to a match simulator, which can predict the results of any 3 versus 3 match-up. The simulation gives a detailed scoring breakdown that emulates the breakdown used on visual displays at events. It also generates different insights, such as the average RPI of the team, the strongest scorers, and either one or two different textual insights on each alliance's keys to winning the game.

This hypothetical match-up predicts the blue alliance winning the match, 95-82, and winning 2 ranking points (RP). When the scoring margin is predicted to be within 3 points, the simulation declares a toss-up.

I also developed a tool to help teams in the top 8 narrow down their selections when they start to pick robots for the elimination rounds. The picklist generator allows a team to keep track of which teams have already been chosen or are no longer available for selection.

This grid shows all 40 teams at the event, along with a checkbox for whether or not they are still available. Any team can also be "blacklisted" if the users decide they aren't interested in a certain team for any reason.

Below the grid of teams is a compiled list of all the remaining teams that can then be sorted by any attribute. There are options for the best overall team, best scoring team, or best defensive team. If the user is looking for a combination of different strengths, they can select "Custom" and use dials to tune which attributes are the most important to them. Teams are then sorted by a "rank value," which is a number determined using various coefficients to weigh each of the team's attributes.

Left: the sorted list and the options to choose from. Teams highlighted in red are blacklisted. Teams here are sorted by defensive abilities, and team 7809 is shown as the best available robot for that constraint. Right: using the custom options, the user wants to find the robot that can climb and play defense the best, while disregarding general scoring abilities.

Team 4855 used this tool during the St. Joseph, Michigan district event, which took place March 5-7, 2020. The team as a whole was greatly pleased with the ease of use and the ability of the lead scout to quickly communicate to the drive team what they were up against in their upcoming matches using the match simulation. Once the event had ended, the match simulator was used to simulate every match played in an attempt to correctly project the winner of each match, which it did with 72% accuracy. Unfortunately, as a result of the COVID-19 pandemic, all remaining events for 2020 were cancelled, and the tool could not be used any further.