An alternative field management system for the FIRST Robotics Competition.
Go JavaScript HTML CSS
Latest commit a919cb0 Nov 5, 2016 Patrick Fairbank Revert "Move TBA match publishing from time of commit to time of show…
…ing score. Closes #16."

Fixes #36 but reopens #16.

This reverts commit 3cd216c.
Permalink
Failed to load latest commit information.
db Remove goal light address settings. Aug 29, 2016
font Checked in fonts used by reports. Aug 24, 2014
schedules Added pre-randomized schedules. Jun 25, 2014
static Track autonomous commit status separately per scoring display (fixes #27 Oct 16, 2016
templates Add UI for explicit publishing match schedule to TBA Oct 6, 2016
.gitignore Added development helper scripts and updated gitignore. Sep 6, 2014
.travis.yml Add basic travis CI YAML Sep 16, 2016
LICENSE Added license. Sep 7, 2014
README.md Update contributor list. Sep 8, 2016
TODO.md Update docs. Aug 28, 2016
aironet.go Cleaned up the code and added comments. Sep 7, 2014
aironet_test.go Added unit tests for AP configuration. Aug 26, 2014
alliance_station_display.go Expose team in AllianceStation JSON for field monitor (fixes #32). Oct 16, 2016
alliance_station_display_test.go Prevent concurrent writes on the same websocket. Aug 28, 2016
alliance_team.go Added model for alliances. Jun 1, 2014
alliance_team_test.go Added model for alliances. Jun 1, 2014
announcer_display.go Expose team in AllianceStation JSON for field monitor (fixes #32). Oct 16, 2016
announcer_display_test.go Prevent concurrent writes on the same websocket. Aug 28, 2016
ap_config.txt Partially enable DHCP and fix some 2015 protocol bugs. Aug 29, 2016
api.go Added configurable HTTP Basic Auth. Aug 23, 2015
api_test.go Put back W-L-T in rankings. Aug 15, 2016
arena.go Track autonomous commit status separately per scoring display (fixes #27 Oct 16, 2016
arena_test.go Expose team in AllianceStation JSON for field monitor (fixes #32). Oct 16, 2016
audience_display.go Add goal and defense LED control. Aug 14, 2016
audience_display_test.go Prevent concurrent writes on the same websocket. Aug 28, 2016
bandwidth_monitor.go Implement 2015 driver station protocol. Aug 25, 2016
catalyst.go Partially enable DHCP and fix some 2015 protocol bugs. Aug 29, 2016
catalyst_test.go Implement DS UDP packet listening. Aug 29, 2016
cheesy-arena.command Updated for running directly from Finder. Sep 9, 2014
coverage Added development helper scripts and updated gitignore. Sep 6, 2014
database.go Fixed goose API break. Sep 7, 2014
database_test.go Use testify/assert library to make tests less verbose. May 26, 2014
driver_station_connection.go Expose team in AllianceStation JSON for field monitor (fixes #32). Oct 16, 2016
driver_station_connection_test.go Expose team in AllianceStation JSON for field monitor (fixes #32). Oct 16, 2016
elimination_schedule.go Add publishing of match video split times to STEMtv. Aug 28, 2016
elimination_schedule_test.go Updated scoring display. May 31, 2015
event_settings.go Remove goal light address settings. Aug 29, 2016
event_settings_test.go Update event settings for 2016. Jul 30, 2016
fta_display.go Add view of upcoming defenses to Field Monitor. Aug 14, 2016
fta_display_test.go Add page to select playoff defenses. Aug 14, 2016
lights.go Change Yellow Color Sep 27, 2016
lower_third.go Added websocket control of lower thirds to improve ease of use. Aug 23, 2015
lower_third_test.go Added websocket control of lower thirds to improve ease of use. Aug 23, 2015
main.go Implement DS UDP packet listening. Aug 29, 2016
match.go Add publishing of match video split times to STEMtv. Aug 28, 2016
match_play.go Revert "Move TBA match publishing from time of commit to time of show… Nov 5, 2016
match_play_test.go Revert "Move TBA match publishing from time of commit to time of show… Nov 5, 2016
match_result.go Update final score screen for 2016. Aug 13, 2016
match_result_test.go Update final score screen for 2016. Aug 13, 2016
match_review.go Update TBA publishing for 2016. Aug 15, 2016
match_review_test.go Update match review interface for 2016. Aug 8, 2016
match_test.go Add publishing of match video split times to STEMtv. Aug 28, 2016
notifier.go Cleaned up the code and added comments. Sep 7, 2014
notifier_test.go Added notification mechanism. Jul 9, 2014
package Updated for running directly from Finder. Sep 9, 2014
package.bat Added packaging script for Windows. Sep 9, 2014
pit_display.go Added configurable HTTP Basic Auth. Aug 23, 2015
pit_display_test.go Prevent concurrent writes on the same websocket. Aug 28, 2016
ranking.go Put back W-L-T in rankings. Aug 15, 2016
ranking_test.go Put back W-L-T in rankings. Aug 15, 2016
referee_display.go Expose team in AllianceStation JSON for field monitor (fixes #32). Oct 16, 2016
referee_display_test.go Prevent concurrent writes on the same websocket. Aug 28, 2016
reports.go Put back W-L-T in rankings. Aug 15, 2016
reports_test.go Put back W-L-T in rankings. Aug 15, 2016
run Added development helper scripts and updated gitignore. Sep 6, 2014
schedule.go Add defense randomization and schedule report. Aug 14, 2016
schedule_test.go Add defense randomization and schedule report. Aug 14, 2016
scoring_display.go Track autonomous commit status separately per scoring display (fixes #27 Oct 16, 2016
scoring_display_test.go Prevent concurrent writes on the same websocket. Aug 28, 2016
setup_alliance_selection.go Added configurable HTTP Basic Auth. Aug 23, 2015
setup_alliance_selection_test.go Shored up test coverage. Sep 6, 2014
setup_defense_selection.go Add page to select playoff defenses. Aug 14, 2016
setup_field.go Added configurable HTTP Basic Auth. Aug 23, 2015
setup_field_test.go Shored up test coverage. Sep 6, 2014
setup_lower_thirds.go Added configurable HTTP Basic Auth. Aug 23, 2015
setup_lower_thirds_test.go Prevent concurrent writes on the same websocket. Aug 28, 2016
setup_schedule.go Add UI for explicit publishing match schedule to TBA Oct 6, 2016
setup_schedule_test.go Merge branch 'master' of ssh://github.com/Team254/cheesy-arena Sep 12, 2015
setup_settings.go Remove goal light address settings. Aug 29, 2016
setup_settings_test.go Update result and ranking models for 2016. Jul 31, 2016
setup_sponsor_slides.go Added configurable HTTP Basic Auth. Aug 23, 2015
setup_sponsor_slides_test.go Added unit tests for sponsor slides. Sep 5, 2014
setup_teams.go Update announcer display for 2016. Aug 10, 2016
setup_teams_test.go Added event name to recent accomplishments. Sep 6, 2015
sponsor_slide.go Added unit tests for sponsor slides. Sep 5, 2014
sponsor_slide_test.go Added unit tests for sponsor slides. Sep 5, 2014
stemtv.go Add publishing of match video split times to STEMtv. Aug 28, 2016
stemtv_test.go Add publishing of match video split times to STEMtv. Aug 28, 2016
switch_config.txt Remove team DHCP pools from initial configs. Sep 5, 2016
tba.go Prevent concurrent writes on the same websocket. Aug 28, 2016
tba_test.go Update TBA publishing for 2016. Aug 15, 2016
team.go Implemented yellow/red card handling. Aug 20, 2014
team_match_log.go Implement 2015 driver station protocol. Aug 25, 2016
team_test.go Added manual editing and display of team accomplishments. Aug 3, 2014
web.go Setup HTTP endpoint to hit to republish schedule, no UI changes yet Oct 6, 2016
web_test.go Revert "Added trivial basic HTTP auth for Chezy Champs. Replace with … Sep 4, 2014

README.md

Cheesy Arena

A field management system that just works.

Key features

Check out a video overview of Cheesy Arena's functionality.

For participants and spectators:

  • Same network isolation and security as the official FIRST FMS
  • No-lag realtime scoring
  • Team stack lights and sevent-segment display are replaced by an LCD screen, which shows team info before the match and realtime scoring and timer during the match
  • Smooth-scrolling rankings display
  • Direct publishing of schedule, results, and rankings to The Blue Alliance

For scorekeepers:

  • Runs on Windows, Mac OS X, and Linux
  • No install prerequisites
  • No "pre-start" – hardware is configured automatically and in the background
  • Flexible and quick match schedule generation
  • Streamlined realtime score entry
  • Reports, results, and logs can be viewed from any computer

License

Teams may use Cheesy Arena freely for practice, scrimmages, and off-season events. See LICENSE for more details.

Installation and use

Via binaries:

  1. Download the latest release for OS X or Windows
  2. Unzip the file
  3. On Mac OS X, run cheesy-arena.command, and on Windows, run cheesy-arena.exe
  4. Navigate to http://localhost:8080 in your browser (Google Chrome recommended)

From source:

  1. Download Go
  2. Set up your Go workspace
  3. If you're using Windows and don't already have a working version of GCC (needed to compile a dependency), install TDM-GCC.
  4. Download the Cheesy Arena source and dependencies with go get github.com/Team254/cheesy-arena
  5. Compile the code with go build
  6. Run the cheesy-arena or cheesy-arena.exe binary
  7. Navigate to http://localhost:8080 in your browser (Google Chrome recommended)

Configuration:

Set the IP address of the computer running Cheesy Arena to 10.0.100.5. Driver stations will broadcast their presence on the network to this hardcoded address so that the FMS does not need to discover them by some other method.

Under the hood

Cheesy Arena is written using Go, a relatively new language developed by Google. Go excels in the areas of concurrency, networking, performance, and portability, which makes it ideal for a field management system.

Cheesy Arena is implemented as a web server, with all human interaction done via browser. The graphical interfaces are implemented in HTML, JavaScript, and CSS. There are many advantages to this approach – development of new graphical elements is rapid, and no software needs to be installed other than on the server. Client web pages send commands and receive updates using WebSockets.

SQLite3 is used as the datastore, and making backups or transferring data from one installation to another is as simple as copying the database file.

Schedule generation is fast because pregenerated schedules are included with the code. Each schedule contains a certain number of matches per team for placeholder teams 1 through N, so generating the actual match schedule becomes a simple exercise in permuting the mapping of real teams to placeholder teams. The pregenerated schedules are checked into this repository and can be vetted in advance of any events for deviations from the randomness (and other) requirements.

Cheesy Arena includes support for, but doesn't require, networking hardware similar to that used in official FRC events. Teams are issued their own SSIDs and WPA keys, and when connected to Cheesy Arena are isolated to a VLAN which prevents any communication other than between the driver station, robot, and event server. The network hardware is configured via Telnet commands for the new set of teams when each mach is loaded.

LED hardware

Due to the prohibitive cost of the LEDs and LED controllers used on official fields, a custom solution was developed for Chezy Champs using consumer-grade LED strips and embedded microcontrollers. The bill of materials, control board schematics, and embedded source code will be provided in an upcoming release.

Advanced networking

See the Advanced Networking wiki page for instructions on what equipment to obtain and how to configure it in order to support advanced network security.

Contributing

Cheesy Arena is far from finished! You can help by:

  • Checking out the TODO list, writing a missing feature, and sending a pull request
  • Filing any bugs or feature requests using the issue tracker
  • Contributing documentation to the wiki
  • Sending baked goods to Pat

Acknowledgements

Several folks have contributed pull requests. Thanks!

In addition, the following individuals have contributed to make Cheesy Arena a reality:

  • Tom Bottiglieri
  • James Cerar
  • Kiet Chau
  • Travis Covington
  • Nick Eyre
  • Patrick Fairbank
  • Eugene Fang
  • Thad House
  • Karthik Kanagasabapathy
  • Ken Mitchell
  • Andrew Nabors
  • Jared Russell
  • Austin Schuh
  • Colin Wilson