Skip to content

Pool management

Running the Pool is for game officials and event staff. You do not need this page to write or run a normal robot program.

MARLIN PMS (Pool Management Software) is the desktop app for running matches. It runs on the Pool Laptop: it starts the pool server, opens the pool dashboard, tracks driver-station connections, and broadcasts match commands to MARLIN extensions on Team Laptops.

The dashboard labels the two match phases Auton and Driver. These are the same names students see in the extension, and they match the Autonomous Period and Driver Controlled Period of the game manual.

For officials only

Pool controls can affect multiple robots and the safety state of a match. Do not operate these controls unless you are responsible for running the Pool.

MARLIN PMS dashboard overview

How it fits into MARLIN

flowchart LR
    official["Game official"]
    pms["MARLIN PMS"]
    pool["Pool server"]
    extA["MARLIN extension"]
    extB["MARLIN extension"]
    robotA["Robot A"]
    robotB["Robot B"]

    official --> pms
    pms --> pool
    pool <--> extA
    pool <--> extB
    extA --> robotA
    extB --> robotB

The pool server is the authority for match-level state:

  • registering driver stations
  • identifying team, alliance, and station assignments
  • starting the Autonomous Period and the Driver Controlled Period
  • pausing and resuming an active phase
  • sending E-Stop when needed
  • keeping event operation separate from student robot code.

Students still run their code from the MARLIN extension. The pool dashboard does not edit or open students' programs. Starting a phase launches the program already open on each laptop.

Install MARLIN PMS

Your event organizer will provide the MARLIN PMS installer directly.

Platform Download Notes
macOS .dmg Open the disk image, then drag or open MARLIN PMS
Windows .exe installer Run the installer on the Pool Laptop

The release files are unsigned unless your event organizer says otherwise. Your operating system may show a security prompt the first time you open the app.

Start the pool server

The Pool Laptop is the computer running MARLIN PMS. There is one per Pool.

  1. Connect the Pool Laptop and the Team Laptops to the same Wi-Fi or Ethernet network.
  2. Open MARLIN PMS on the Pool Laptop.
  3. Keep the app open while matches are running.
  4. In the dashboard, find the MARLIN extension server address.
  5. Give that address to the teams using the MARLIN extension.

MARLIN PMS starts the backend server on port 3000 and serves the dashboard from the same port. Browser clients can also open the pool dashboard directly from another laptop on the same network.

Default address format:

Use URL
Pool dashboard http://HOST_IP_HERE:3000
MARLIN extension server http://HOST_IP_HERE:3000

MARLIN PMS connection addresses

Use the Pool Laptop's IP shown in the dashboard, not localhost, when a Team Laptop is connecting from another computer.

Dashboard areas

The pool dashboard contains:

Area Use it for
Server status Confirming the dashboard is connected to the local pool server
Student connection info Copying the Pool Laptop address for Team Laptops
Current phase and timer Seeing the active match phase and remaining time
Phase controls Starting Auton, Driver, Pause/Resume, and Reset Match
E-Stop controls Triggering or clearing pool E-Stop
Robot stations Tracking Red and Blue station connection status
Last Command Checking the most recent command sent to extensions

Keep the dashboard visible to the official operating the match, especially the timer, station list, and E-Stop controls.

Driver-station setup

Each Team Laptop that should receive match commands needs matching settings in the MARLIN extension.

Extension field Purpose
MARLIN server Pool server URL, such as http://192.168.1.25:3000
Team number Team or robot identifier
Station Driver station position (Red 1, Red 2, Blue 1, Blue 2)

There is no separate alliance field in the extension. The station name encodes the alliance. The extension reads Red or Blue from the station name before it registers with the pool server.

After entering these values, click Save in the extension. The team should appear in the matching station on the pool dashboard.

If the pool server is unavailable or the URL is wrong, the extension may show a connection timeout in the MARLIN Console. Clear the server URL when practicing without a pool server.

Station readiness

The pool server starts in WAITING. It becomes READY only after every default station is either connected or marked No Show.

MARLIN PMS Red Alliance station list

Default stations:

Alliance Stations
Red Red 1, Red 2
Blue Blue 1, Blue 2

Use No Show when a scheduled station will not participate in the match. Use Remove when a laptop registered to the wrong station and should reconnect with corrected settings.

An Elimination Match is 1-v-1, so only Red 1 and Blue 1 are used. Mark Red 2 and Blue 2 as No Show to reach READY.

Pre-match checklist

Before starting a match:

  1. Confirm the dashboard does not show the Server offline indicator.
  2. Confirm every expected station is connected or marked No Show.
  3. Confirm each station is assigned to the correct alliance and position.
  4. Ask teams to verify their MARLIN project is open and their Controller is connected.
  5. Confirm the Pool is clear and safe.
  6. Keep the E-Stop control visible to the official operating the match.

Do not start the Autonomous Period until the dashboard is in READY and the Pool is safe.

Match flow

flowchart TD
    waiting["WAITING"]
    ready["READY"]
    auton["AUTON"]
    hold["0:00 hold<br/>5 seconds"]
    pause["PAUSE"]
    driver["DRIVER"]
    estop["ESTOP"]

    waiting -->|"all stations ready or No Show"| ready
    ready -->|"Start Auton"| auton
    auton -->|"20 second timer ends"| hold
    hold --> pause
    pause -->|"official presses Driver or Resume"| driver
    driver -->|"2:40 timer ends"| hold
    ready -->|"E-Stop"| estop
    auton -->|"E-Stop"| estop
    pause -->|"E-Stop"| estop
    driver -->|"E-Stop"| estop
    estop -->|"Clear E-Stop"| ready

Default timing:

Segment Duration Sent to extensions as
Autonomous Period 20 seconds auton
Hold after Autonomous untimed pause
Driver Controlled Period 2 minutes 40 seconds driver

That is three minutes of playtime. The untimed hold between the two periods does not count towards it.

The 5-second scoring hold

At the end of each Match Period, the dashboard timer holds the period name and 0:00 for five seconds before it queues the next period. This is the scoring grace period in <SC1>, and it is the visual cue referees and teams use: what comes to rest inside those five seconds is what gets scored.

It is a hold on the timer, not on the match. Robot output is already idled the instant the period ends, so a robot cannot move during the hold. The <SC1> penalty for exploiting the grace period is not something a team can engineer around in software.

The intermission

The Autonomous Period ends into an untimed hold, which the game manual calls the Intermission Period. The Driver Controlled Period does not start by itself. The pool server waits in PAUSE, with Driver queued up, while the Scorekeeper and Head Referees record the Autonomous Bonus, and starts when an official presses Driver or Resume.

During the hold and during Pause, robot output should be paused. Reset Match cancels active timers, clears Pause and E-Stop state, and returns the pool server to READY or WAITING without deleting team registrations.

Pause and E-Stop can interrupt the normal flow:

  • Pause freezes the current phase and timer. Pressing Pause again resumes the interrupted phase.
  • E-Stop can be triggered at any point in a match. Clearing E-Stop returns the pool server to READY.

E-Stop behaviour

Pool E-Stop is a match-level safety control. When an official triggers E-Stop, the pool server broadcasts the stop command to connected MARLIN extensions. Each extension then sends the local E-Stop command to its Controller.

E-Stop reaches every connected station at once. There is no per-team stop, so E-Stop is not the tool for applying a Disablement to a single Team: the Head Referee does that by telling the Drive Team Members to put their controllers down.

Clear E-Stop only when:

  • the Pool is safe
  • the official has identified why E-Stop was triggered
  • affected teams know the stop is being cleared
  • the robot area is ready for the next match or a reset.

If there is any doubt, keep E-Stop active.

Between matches

After a match:

  1. Confirm robot output is stopped.
  2. Use Reset Match when the Pool is ready for the next run.
  3. Clear or update station assignments if teams are changing.
  4. Ask incoming teams to connect their MARLIN extensions.
  5. Wait for every expected station to connect or be marked No Show.

Troubleshooting

Symptom What to check
A team does not appear connected Confirm the extension server URL uses port 3000 and the correct Pool Laptop IP
A laptop opened the dashboard but cannot receive commands The dashboard URL is not enough; the extension must also connect to the backend URL
A station cannot register Check whether another laptop is already registered to that alliance and station
The match will not start Mark missing stations No Show or wait for them to connect
Clients cannot reach the Pool Laptop Check Wi-Fi/Ethernet, the Pool Laptop's IP address, and firewall permissions for port 3000
Pool server errors repeat in a student extension Clear the pool server URL when practicing without a pool server

Technical event mapping

Officials usually do not need this table during a match, but it helps explain what the pool server sends to each MARLIN extension.

Pool state Sent to the extension as
WAITING pause
READY pause
AUTON auton
DRIVER driver
PAUSE pause

E-Stop is not a pool state in this mapping. The pool server sends E-Stop and Clear E-Stop as their own command types, so an E-Stop reaches the extension regardless of which state the pool server is in.