Skip to content

Project 1: Configure a QRScout Form for REEFSCAPE

learnfrc.com
learnfrc.comAuthor
Veer Bajaj
Veer BajajMaintainer

Produce a working config.json for QRScout (FRC Team 2713, Red Hawk Robotics) that a stand scout can fill in during a REEFSCAPE match, and that encodes everything into one scannable QR code. QRScout runs offline in a browser at https://frc2713.github.io/QRScout/.

The fields you need (from the official REEFSCAPE manual)

Section titled “The fields you need (from the official REEFSCAPE manual)”

REEFSCAPE robots score Coral (PVC pipe) on four levels and Algae (balls) into the Processor or Net, then climb a Cage. Coral is worth more in AUTO than TELEOP: AUTO L1=3, L2=4, L3=6, L4=7; TELEOP L1=2, L2=3, L3=4, L4=5. Algae in the Net=4 , in the Processor=6. Leave (auto)=3, Park=2, shallow Cage=6, deep Cage=12. Because the auto/teleop coral values differ, your form must split coral counters by phase so each can be weighted correctly later.

{
"$schema": "../schema.json",
"title": "2713 Reefscape Scout",
"page_title": "REEFSCAPE Match Scouting",
"delimiter": "\t",
"sections": [
{
"name": "Pre-Match",
"fields": [
{ "title": "Scout Name", "type": "text", "code": "scoutName",
"required": true, "formResetBehavior": "preserve" },
{ "title": "Match #", "type": "number", "code": "matchNumber",
"required": true, "formResetBehavior": "increment" },
{ "title": "Team #", "type": "TBA-team-and-robot", "code": "teamNumber",
"required": true, "formResetBehavior": "reset" }
]
},
{
"name": "Auto",
"fields": [
{ "title": "Left Start Line", "type": "boolean", "code": "autoLeave",
"defaultValue": false, "formResetBehavior": "reset" },
{ "title": "Auto Coral L4", "type": "counter", "code": "autoCoralL4",
"defaultValue": 0, "formResetBehavior": "reset" },
{ "title": "Auto Coral L1", "type": "counter", "code": "autoCoralL1",
"defaultValue": 0, "formResetBehavior": "reset" }
]
},
{
"name": "Teleop",
"fields": [
{ "title": "Teleop Coral L4", "type": "counter", "code": "telCoralL4",
"defaultValue": 0, "formResetBehavior": "reset" },
{ "title": "Algae Processor", "type": "counter", "code": "algaeProc",
"defaultValue": 0, "formResetBehavior": "reset" },
{ "title": "Endgame", "type": "select", "code": "endgame",
"choices": { "none": "None", "park": "Park",
"shallow": "Shallow Cage", "deep": "Deep Cage" },
"defaultValue": "none", "formResetBehavior": "reset" }
]
}
]
}

Key design choices that prevent real errors:

  • formResetBehavior: "preserve" on Scout Name keeps the scout’s name between matches; "increment" on Match # auto-advances; "reset" clears scoring counters every match. These three values are the only ones QRScout accepts.
  • Use the TBA-team-and-robot field type so scouts pick the team from the pre-loaded match schedule (shown as “Team 2713 (Red 1)”) instead of typing a 4-digit number, the single biggest source of mislabeled data.
  • The delimiter is a tab (\t), so when you scan the QR, the values drop into adjacent spreadsheet cells in one paste.
  1. Load your config via Upload Config or Load from URL (host it on GitHub Pages: https://<user>.github.io/<repo>/config.json).
  2. Fill out a fake match, generate the QR, and scan it with a laptop webcam into the QRScout scanner page.
  3. Confirm the tab-separated row lands correctly in Google Sheets. Verify column order matches your field order exactly.

If anything is off, you fix it at home, not at 8 a.m. on match day.

  • QRScout configs are plain JSON: sections contain fields, each with a type, camelCase code, and one of three formResetBehavior values (reset, preserve, increment).
  • Use TBA-team-and-robot so scouts select teams from the schedule instead of typing numbers, eliminating the top mislabeling error.
  • Always scan a test QR into your live spreadsheet before an event to validate column order and delimiter behavior.

This lesson was adapted from learnfrc.com.