RoboCup Setup

Setting up the robot for RoboCup Games
Cameron Murtagh GitHub avatarYsobel Sims GitHub avatarMithun Sivanesan GitHub avatar
Updated 8 Nov 2026

This guide details the steps required to set up the robot for RoboCup games. It assumes you are familiar with the normal codebase and robot set up, as per the Getting Started page. The main way to set up the robot involves using the RoboCup configuration tool in the main codebase. Manual set up is also detailed on this page.

RoboCup Configuration Tool

The RoboCup configuration tool involves an ncurses interface for easy set up of the robot in a game. It contains sections for network settings and general game configuration.

To run the RoboCup configuration tool, run ./b configure -i and turn on ROLE_robocupconfiguration. Press c to configure and g to generate. Run ./b build to build the binary.

It is possible to run ./b run robocupconfiguration locally to see the tool, but it is best used on a robot.

Install the files to robot number X with ./b install -co 10.1.2.X. Alternatively, ./b install -co -u booster <robot's IP address> if X is unknown.

On the robot, run sudo ./robocupconfiguration. sudo is required if changing any network settings.

The following code snippit shows what the ncurses terminal interface used in the RoboCup configuration tool looks like.

┌─────────────────────────────────────── RoboCup Configuration ──────────────────────────────────────┐
│ │
│ Networking Game Configuration │
│ │
│ Hostname : booster1 │
│ Robot Name : euler Player ID: 1 │
│ Wifi Interface : wlP1p1s0 Team ID : 1 │
│ Use DHCP : False Goalie? : False │
│ IP Address : 10.0.1.1 Field Type: 5v5 │
│ SSID : Football-4-1 │
│ Password : 12345678 │
│ │
│ Commands │
│ ENTER Edit F Refresh C Configure S Start RoboCup E Enable Wifi X Shutdown │
│ SPACE Toggle R Reset N Network D Stop RoboCup W Disable Wifi B Restart Booster │
│ │
└────────────────────────────────────────────────────────────────────────────────────────────────────┘
EntryDescription
HostnameThis is non-configurable and displays the hostname of the system.
Robot nameDisplays the robot name according to the system. Press ENTER to change it. The robot name is important for loading in the correct configuration.
Wifi interfaceThis is automatically detected and shouldn't be changed.
Use DHCPToggle with the space bar. When True, the robot gets its IP address from the network and the IP address field shows (automatic). Leave this False at RoboCup, where static IPs are used.
IP AddressThe current IP address of the robot. It can be toggled with the space bar through the common IPs in RoboCupConfiguration.yaml, using the player ID as the last number. These are 10.1.2.X for the lab, 10.0.1.X for NUbots at RoboCup, 10.0.18.X for rUNSWift, and 192.168.98.X and 192.168.99.X for drop-in games on Team A and Team B.
SSIDThis is the name of the wifi we are connected to. This field can be toggled with the space bar to go through each RoboCup field SSID, and automatically add in the associated password for that field. RobocupConfiguration.yaml contains the list of SSIDs and passwords, to be updated at the competition.
PasswordThis should be set before configuring the network and is the password for the wifi.
Player IDThis is the ID of the robot, and should correspond to the number displayed on the front of the robot. It is important that there are no duplicate IDs, as this information is used in robot-to-robot communication to identify robots. The player ID should be the last number in the IP address.
Team IDThe team ID must correspond to the ID specified in the GameController configuration for NUbots. The tool warns you when configuring if the third number in the IP address doesn't match the team ID.
Goalie?Whether the robot plays as goalie. Toggle with the space bar. This is written to Soccer.yaml.
Field TypeThe field size preset to use. Toggle with the space bar through small (9x6m), l1 (12x9m), l3 (14x9m) and 5v5. This is written to FieldDescription.yaml.
CommandKeyFunctionality
EditENTEREdit the field currently highlighted. Press ENTER again when finished.
ToggleSPACEToggle between pre-determined fields, where applicable.
RefreshFRefreshes the ncurses UI.
ResetRResets to the current values on the system. Useful if you haven't saved yet and want to start over.
ConfigureCWrites to the configuration files, including the wifi-robocup.nmconnection NetworkManager profile.
NetworkNWrites to the configuration files, installs the wifi-robocup profile and connects to it with nmcli.
Start RoboCupSStarts the RoboCup service, which runs the robocup binary, including on restart.
Stop RoboCupDStops the RoboCup service, and should be done when a robot is finished with a game. If this is not done then the next time someone uses the robot it will move. This can also cause robots out of the game to interfere with other robots behaviour due to robot-to-robot communication.
Enable WifiEEnables the wifi service, allowing a robot to connect to a RoboCup field.
Disable WifiWDisables the wifi service, to prevent a robot connecting to a RoboCup field.
ShutdownXShuts down the RoboCup configuration tool.
Restart BoosterBRestarts booster-daemon.service after asking for confirmation. The robot briefly goes limp while it restarts, so make sure it is supported.

During RoboCup set up days check that the entries in RobocupConfiguration.yaml match the information provided by the TC/OC of the league.

  • Set up the SSID and password entries for easy toggle of each field.
  • Check the common_ips list matches the IP addresses given by the TC/OC. If our team ID changes, update the team ID in GlobalConfig.yaml too.

In the configuration file, X is used to represent the robot number, so that it can be dynamically set.

When setting up for a game:

  • Connect to the robot using the portable monitor and keyboard and run sudo ./robocupconfiguration.
  • Check that the robot name and player ID match what is on the front of the robot. For drop-in games, the player ID is given by the TC/OC.
  • If the player should be a goalie, toggle the Goalie? field to True.
  • Toggle the field type to match the field being played on.
  • Toggle the IP address to 10.0.1.X for a normal game, or 192.168.98.X or 192.168.99.X for a drop-in on Team A or Team B.
  • Toggle the SSID to the correct field.
  • Configure (C) and set up the network (N).
  • This should work without a reboot. Run nmcli connection show --active in the command line to check the robot is connected to the correct wifi network.
  • Use the gamecontroller program to check if the robot connects to GameController.
  • Start the RoboCup service. At the end of a game, stop it.

Manual Method

The manual method without the tool is detailed here in case a more in depth understanding is needed.

Networking

The robots use NetworkManager for networking. Each network the robot can join has a connection profile, which is an .nmconnection file. The networking on the robot needs to be changed from the NUbots laboratory network to the RoboCup field network, or to a secondary router in the laboratory for practice games. These steps involve adding a connection profile locally on a computer, installing it to the robot and running the systemconfiguration program.

  1. Checkout the RoboCup branch and open module/tools/SystemConfiguration/data/system. If there is no RoboCup branch yet then you will need to create one. If you are running a practice game in the laboratory, you can make the changes locally or in a practice game branch.

    Files in default are installed to every robot. Files in a robot's hostname folder (for example booster1) override the default file with the same name for that robot only.

  2. For each robot, create <hostname>/etc/NetworkManager/system-connections/wifi-robocup.nmconnection with the following contents:

    [connection]
    id=wifi-robocup
    type=wifi
    interface-name=wlP1p1s0
    autoconnect=true
    [wifi]
    ssid=SSID
    mode=infrastructure
    [wifi-security]
    key-mgmt=wpa-psk
    psk=PASSWORD
    [ipv4]
    method=manual
    address1=ADDRESS/16
    dns=8.8.8.8;
    [ipv6]
    method=ignore

    SSID is the name of the wireless network and PASSWORD is the password for the network.

    ADDRESS is the address of the robot. When SSHing to the robot, this is the address you will use. At RoboCup, use the networking information given to you by the Technical Committee. The /16 is the subnet mask 255.255.0.0, which means the first two numbers define the subnet. Usually the third number is the team ID and the fourth is the robot number.

    To get an address from the network's DHCP server instead, replace the [ipv4] section with method=auto.

  3. Open module/tools/SystemConfiguration/data/config/SystemConfiguration.yaml and set connection to wifi-robocup. This is the profile systemconfiguration activates.

  4. In a terminal in the root of the NUbots repo, build and install the configuration files with

    ./b configure && ./b build && ./b install -co -u booster <ADDRESS>

    Where <ADDRESS> is the robot's current address, for example 10.1.2.1 in the laboratory.

  5. ssh onto the robot using ssh booster@<ADDRESS>.

    When running via ssh make sure that you have a monitor and keyboard nearby to handle any mistakes. The connection will drop when the robot switches networks.

  6. Run sudo ./systemconfiguration on the robot. This copies the connection profiles to /etc/NetworkManager/system-connections, sets their permissions to 600 (NetworkManager ignores profiles other users can read), reloads NetworkManager and brings up the connection profile.

  7. Check the robot is on the right network with nmcli connection show --active.

To change back to the NUbots laboratory network:

  1. Reset the configuration files locally to the same as the main branch.

  2. Run ./b build.

  3. For each robot, run ./b install -co -u booster <ADDRESS>.

  4. On each robot, remove the RoboCup profile and run systemconfiguration.

    sudo rm /etc/NetworkManager/system-connections/wifi-robocup.nmconnection
    sudo ./systemconfiguration

Ethernet

The robot has a fixed wired address of 192.168.10.102, set by Booster. It doesn't change with the wifi set up, so ethernet is a reliable way to reach a robot when wifi is misconfigured.

  1. Connect your computer to the robot's ethernet port with an ethernet cable. See Booster's Connect to Robot page for where the port is.

  2. Give your computer's wired interface a static IP on the same subnet.

    SettingValue
    Address192.168.10.10
    Netmask255.255.255.0
    Gateway192.168.10.1

    On Linux with NetworkManager this can be done with the following, where <interface> is your ethernet interface from nmcli device.

    nmcli connection add type ethernet ifname <interface> con-name booster-wired ipv4.method manual ipv4.addresses 192.168.10.10/24 ipv4.gateway 192.168.10.1
    nmcli connection up booster-wired
  3. Check the connection with ping 192.168.10.102, then ssh booster@192.168.10.102.

You can install to the robot over ethernet the same way, with ./b install -co -u booster 192.168.10.102.

Troubleshooting

If you are experiencing problems, it may be beneficial to reset any changes and start again. If you cannot connect to the robot wirelessly, you can connect to the robot via ethernet. If you cannot connect to the robot via ethernet, you can plug in a monitor and keyboard to directly run commands on the robot.

The following commands may be useful in understanding the networking set up if anything goes wrong.

CommandDescription
nmcli connection showList all connection profiles. Active ones show a device.
nmcli device wifi listList the wifi networks the robot can see.
sudo nmcli connection reloadReload profiles after editing files in /etc/NetworkManager/system-connections by hand.
sudo nmcli connection up <id> ifname wlP1p1s0Connect using a profile, where <id> is the profile's id, for example wifi-robocup.
journalctl -u NetworkManager -eShow NetworkManager's logs, for example to see why a connection failed.

When more than one profile can connect, NetworkManager picks the one with the highest autoconnect-priority in its [connection] section. Profiles without one have priority 0.

wlP1p1s0 is the wireless interface on the robots. The connection profiles on the robot are found in /etc/NetworkManager/system-connections.

NUbots acknowledges the traditional custodians of the lands within our footprint areas: Awabakal, Darkinjung, Biripai, Worimi, Wonnarua, and Eora Nations. We acknowledge that our laboratory is situated on unceded Pambalong land. We pay respect to the wisdom of our Elders past and present.
Copyright © 2026 NUbots - CC-BY-4.0
Deploys by Netlify