{
    "componentChunkName": "component---src-components-page-template-jsx",
    "path": "/guides/general/robocup-setup",
    "result": {"data":{"mdx":{"id":"b8e95cd2-08c4-5b78-ba64-994d5668977a","body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"section\": \"Guides\",\n  \"chapter\": \"General\",\n  \"title\": \"RoboCup Setup\",\n  \"description\": \"Setting up the robot for RoboCup Games\",\n  \"slug\": \"/guides/general/robocup-setup\",\n  \"authors\": [\"Cameron Murtagh (@CMurtagh-LGTM)\", \"Ysobel Sims (@ysims)\"]\n};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Alert = makeShortcode(\"Alert\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"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 \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/guides/main/getting-started\"\n  }, \"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.\"), mdx(\"h2\", {\n    \"id\": \"robocup-configuration-tool\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#robocup-configuration-tool\",\n    \"aria-label\": \"robocup configuration tool permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"RoboCup Configuration Tool\"), mdx(\"p\", null, \"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.\"), mdx(\"p\", null, \"To run the RoboCup configuration tool, run \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"./b configure -i\"), \" and turn on \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ROLE_robocupconfiguration\"), \". Press \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"c\"), \" to configure and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"g\"), \" to generate. Run \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"./b build\"), \" to build the binary.\"), mdx(\"p\", null, \"It is possible to run \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"./b run robocupconfiguration\"), \" locally to see the tool, but it is best used on a robot.\"), mdx(\"p\", null, \"Install the files to robot number \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"X\"), \" with \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"./b install -co nX\"), \". Alternatively, \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"./b install -co -u nubots <robot's IP address>\"), \" if \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"X\"), \" is unknown.\"), mdx(\"p\", null, \"On the robot, run \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sudo ./robocupconfiguration\"), \". \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sudo\"), \" is required if changing any network settings.\"), mdx(\"p\", null, \"The following code snippit shows what the ncurses terminal interface used in the RoboCup configuration tool looks like.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"\\u250C\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500 RoboCup Configuration \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2510\\n\\u2502                                                                                                    \\u2502\\n\\u2502 Networking                            Game Configuration                                           \\u2502\\n\\u2502                                                                                                    \\u2502\\n\\u2502 Hostname        : nugus4                                                                           \\u2502\\n\\u2502 Robot Name      : frankie             Player ID: 4                                                 \\u2502\\n\\u2502 Wifi Interface  : wlp4s0              Team ID  : 1                                                 \\u2502\\n\\u2502 IP Address      : 10.1.1.4            Position : DYNAMIC                                           \\u2502\\n\\u2502 SSID            : epsilon-x                                                                        \\u2502\\n\\u2502 Password        :                                                                                  \\u2502\\n\\u2502                                                                                                    \\u2502\\n\\u2502                                                                                                    \\u2502\\n\\u2502 Commands                                                                                           \\u2502\\n\\u2502 ENTER Edit       F Refresh        C Configure      S Start RoboCup  E Enable Wifi    X Shutdown    \\u2502\\n\\u2502 SPACE Toggle     R Reset          N Network        D Stop RoboCup   W Disable Wifi                 \\u2502\\n\\u2502                                                                                                    \\u2502\\n\\u2514\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2518\\n\")), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Entry\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Description\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Hostname\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"This is non-configurable and displays the hostname of the system.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Robot name\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Displays the robot name according to the system. The space bar can be used to toggle through known robot names. The robot name is important for loading in the correct configuration.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Wifi interface\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"This is automatically detected and shouldn't be changed.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"IP Address\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"The current IP address of the robot/computer. It can be toggled with space bar through different common IPs, using the player ID as the last number. For RoboCup, this should be set to \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"192.168.1.X\"), \" for normal games, \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"192.168.31.X\"), \" for drop-in games where we are on Team A, and \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"192.168.32.X\"), \" for drop-in games where we are on Team B.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"SSID\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"This 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. \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"RobocupConfiguration.yaml\"), \" contains the list of SSIDs and passwords, to be updated at the competition.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Password\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"This should be set before configuring the network and is the password for the wifi.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Player ID\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"This 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.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Team ID\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"The team ID must correspond to the ID specified in the GameController configuration for NUbots. In drop-in games this is 31 for Team A and 32 for Team B. The third number in the IP address must correspond to the team ID.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Position\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"The soccer position of the robot when it plays. This can be toggled through striker, defender, goalie and dynamic. Typically, field players are dynamic and goalies are manually set.\")))), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Command\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Key\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Functionality\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Edit\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"kbd\", null, \"ENTER\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Edit the field currently highlighted. Press \", mdx(\"kbd\", null, \"ENTER\"), \" again when finished.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Toggle\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"kbd\", null, \"SPACE\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Toggle between pre-determined fields, where applicable.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Refresh\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"kbd\", null, \"F\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Refreshes the ncurses UI.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Reset\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"kbd\", null, \"R\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Resets to the current values on the system. Useful if you haven't saved yet and want to start over.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Configure\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"kbd\", null, \"C\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Writes to the configuration files.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Network\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"kbd\", null, \"N\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Writes to the configuration files and restarts the network services.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Start RoboCup\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"kbd\", null, \"S\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Starts the RoboCup service, which runs the \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"robocup\"), \" binary, including on restart.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Stop RoboCup\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"kbd\", null, \"D\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Stops 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.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Enable Wifi\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"kbd\", null, \"E\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Enables the wifi service, allowing a robot to connect to a RoboCup field.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Disable Wifi\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"kbd\", null, \"W\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Disables the wifi service, to prevent a robot connecting to a RoboCup field.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Shutdown\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"kbd\", null, \"X\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Shuts down the RoboCup configuration tool.\")))), mdx(\"p\", null, \"During RoboCup set up days check that the entries in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"RobocupConfiguration.yaml\"), \" match the information provided by the TC/OC of the league.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Set up the SSID and password entries for easy toggle of each field.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"If our \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/RoboCup-Humanoid-TC/GameController/blob/master/resources/config/hl_kid/teams.cfg\"\n  }, \"team ID changes\"), \", both the team ID in \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"GlobalConfig.yaml\"), \" and the IP addresses in \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"RobocupConfiguration.yaml\"), \" must be updated.\")), mdx(\"p\", null, \"The IP addresses should follow the schema \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"192.168.<team_id>.<robot_id>\"), \". In the configuration file, \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"X\"), \" is used to represent the robot number, so that it can be dynamically set.\"), mdx(\"p\", null, \"When setting up for a game:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Connect to the robot using the portable monitor and keyboard and run \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"sudo ./robocupconfiguration\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"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.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"If the player should be a goalie, toggle the position field to goalie.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Toggle the IP address to either \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"192.168.1.X\"), \" for a normal game, \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"192.168.31.X\"), \" for a drop-in on Team A, and \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"192.168.32.X\"), \" for a drop-in on Team B.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Toggle the SSID to the correct field, usually denoted by A, B, C or D.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Configure (\", mdx(\"kbd\", null, \"C\"), \") and set up the network (\", mdx(\"kbd\", null, \"N\"), \").\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"This should work without a reboot. Check using \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"wpa_cli status\"), \" in the command line to check connectivity to the correct wifi network.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"gamecontroller\"), \" program to check if the robot connects to GameController.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Start the RoboCup service. At the end of a game, stop it.\")), mdx(\"h2\", {\n    \"id\": \"manual-method\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#manual-method\",\n    \"aria-label\": \"manual method permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Manual Method\"), mdx(\"p\", null, \"The manual method without the tool is detailed here in case a more in depth understanding is needed.\"), mdx(\"h2\", {\n    \"id\": \"networking\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#networking\",\n    \"aria-label\": \"networking permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Networking\"), mdx(\"p\", null, \"The networking on the robot needs to be changed from the default NUbots laboratory network to the RoboCup field network, or to a secondary router in the laboratory for practise games. These steps involve changing configuration files locally on a computer and then installing them to to the robot and running the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"systemconfiguration\"), \" program.\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Checkout the RoboCup branch and open \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"modules/tools/SystemConfiguration/data/system\"), \". If there is no RoboCup branch yet then you will need to create one. If you are running a practise game in the laboratory, you can make the changes locally or in a practise game branch.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Rename \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"default/etc/systemd/30-wlp58s0.network\"), \" to \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"default/etc/systemd/40-wlp58s0-robocup.network\"), \". Note that this is locally within the codebase, not on the robot.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Open \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"default/etc/wpa_supplicant/wpa_supplicant-wlp58s0.conf\"), \" and add the following block to the end of the file:\"), mdx(\"pre\", {\n    parentName: \"li\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-sh\"\n  }, \"network={\\n    ssid=\\\"SSID\\\"\\n    psk=\\\"PASSWORD\\\"\\n    priority=3\\n}\\n\")), mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"SSID\"), \" is the name of the wireless network and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"PASSWORD\"), \" is the password for the network. \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"priority\"), \" should be the highest number priority in the file.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"For each robot \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"X\"), \" do:\"), mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Rename \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"nugusX/etc/systemd/network/40-wlp58s0-robocup.network\"), \" to \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"nugusX/etc/systemd/network/30-wlp58s0.network\"), \".\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Edit this to match the network information for the secondary router. At RoboCup, you will need to edit this to match the networking information given to you by the Technical Committee.\"), mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Address\"), \" is the address of the robot. When SSHing to the robot, this is the address you will use. It is defined by the subnet, the team number, and the robot number. Usually the subnet mask is \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"255.255.0.0\"), \", which indicates that the first two numbers define the subnet. The full address will be \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"192.168.TEAM_NUMBER.ROBOT_NUMBER\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"10.1.TEAM_NUMBER.ROBOT_NUMBER\"), \".\"), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Normally, \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Gateway\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"DNS\"), \" are not needed for RoboCup so you can remove them from the file.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Copy the settings under \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"[Network]\"), \" from the file in the previous step and replace them in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"nugusX/etc/systemd/network/10-bond0.network\"), \". This is important if the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"bond0\"), \" network is \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"UP\"), \" on the robot.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"In a terminal in the root of the NUbots repo, build and install the configuration files with\"))), mdx(\"pre\", {\n    parentName: \"li\"\n  }, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"./b configure && ./b build && ./b install -co <ADDRESS>\\n\")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Where \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"<ADDRESS>\"), \" is the robot address from the previous step.\"), mdx(\"ol\", {\n    parentName: \"li\",\n    \"start\": 5\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ssh\"), \" onto the robot using \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ssh nubots@<ADDRESS>\"), \".\"), mdx(Alert, {\n    type: \"info\",\n    mdxType: \"Alert\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"When running via \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ssh\"), \" make sure that you have a monitor and keyboard nearby to handle any mistakes.\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Run \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sudo ./systemconfiguration\"), \" on the robot.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Restart the network services on the robot:\"), mdx(\"pre\", {\n    parentName: \"li\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"sudo systemctl daemon-reload\\nsudo systemctl restart systemd-networkd wpa_supplicant@wlp58s0\\n\")))))), mdx(\"p\", null, \"To change back to the NUbots laboratory network:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Reset the configuration files locally to the same as the main branch.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Run \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"./b build\"), \".\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"For each robot, run \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"./b install -co <ADDRESS>\"), \".\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"On each robot, run \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sudo ./systemconfiguration\"), \" and restart the network services.\"), mdx(\"pre\", {\n    parentName: \"li\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"sudo systemctl daemon-reload\\nsudo systemctl restart systemd-networkd wpa_supplicant@wlp58s0\\n\")))), mdx(\"h3\", {\n    \"id\": \"troubleshooting\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#troubleshooting\",\n    \"aria-label\": \"troubleshooting permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Troubleshooting\"), mdx(\"p\", null, \"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.\"), mdx(\"p\", null, \"The following general information may be useful in understanding the networking set up if anything goes wrong.\"), mdx(\"p\", null, \"The robot will default to using the first alphanumeric network configuration file. If you have multiple network configuration files, you can change the priority of the network configuration files by changing the number in the filename. For example, \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"30-wlp58s0.network\"), \" will be used before \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"40-wlp58s0.network\"), \".\"), mdx(\"p\", null, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"eno1\"), \" refers to ethernet. \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"wlp58s0\"), \" refers to wireless. \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"bond0\"), \" refers to the bonded network interface. This abstracts the ethernet and wireless configurations so it is easier to switch between them.\"), mdx(\"p\", null, \"The network configuration files on the robot are found in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"/etc/systemd/network\"), \". The wireless network settings are found in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"/etc/wpa_supplicant/wpa_supplicant-wlp58s0.conf\"), \".\"));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#robocup-configuration-tool","title":"RoboCup Configuration Tool"},{"url":"#manual-method","title":"Manual Method"},{"url":"#networking","title":"Networking","items":[{"url":"#troubleshooting","title":"Troubleshooting"}]}]},"frontmatter":{"section":"Guides","chapter":"General","title":"RoboCup Setup","description":"Setting up the robot for RoboCup Games","keywords":null,"slug":"/guides/general/robocup-setup","hidden":null},"childNUbookContributions":{"authors":[{"name":"Cameron Murtagh","username":"CMurtagh-LGTM"},{"name":"Ysobel Sims","username":"ysims"}],"lastCommit":{"date":"2024-12-04T05:45:52.000Z","hash":"395d5826478451d202b915457bf73ab880df84b9"}}}},"pageContext":{"mdxPath":"src/book/03-guides/04-general/03-robocup-setup.mdx","id":"b8e95cd2-08c4-5b78-ba64-994d5668977a","next":{"chapter":"General","title":"Troubleshooting","description":"Solutions to common problems you might encounter at NUbots.","slug":"/guides/general/troubleshooting","hidden":null},"previous":{"chapter":"General","title":"Contribution Workflow","description":"How to contribute to a NUbots project using Jira, Git and GitHub PRs.","slug":"/guides/general/contribute","hidden":null},"menu":[{"title":"Team","slug":"/team/introduction","chapters":[{"title":"Introduction","slug":"/team/introduction","pages":[{"title":"Introduction to NUbots","slug":"/team/introduction","hidden":null},{"title":"Areas of Research","slug":"/team/areas-of-research","hidden":null},{"title":"Current Team","slug":"/team/current-members","hidden":null}],"hidden":false},{"title":"Joining the Team","slug":"/team/how-we-work","pages":[{"title":"How We Work","slug":"/team/how-we-work","hidden":null},{"title":"How to Join NUbots","slug":"/team/how-to-join","hidden":null},{"title":"Lab Induction","slug":"/team/induction","hidden":null}],"hidden":false},{"title":"Community","slug":"/team/sponsors","pages":[{"title":"Sponsors","slug":"/team/sponsors","hidden":null},{"title":"Connect","slug":"/team/connect","hidden":null}],"hidden":false},{"title":"History","slug":"/team/history","pages":[{"title":"Team History","slug":"/team/history","hidden":null},{"title":"Past Members","slug":"/team/past-members","hidden":null},{"title":"Publications","slug":"/team/publications","hidden":null}],"hidden":false},{"title":"RoboCup","slug":"/team/robocup","pages":[{"title":"RoboCup","slug":"/team/robocup","hidden":null},{"title":"Resources","slug":"/team/robocup/resources","hidden":null},{"title":"Debriefs","slug":"/team/robocup/debriefs","hidden":null}],"hidden":false}],"hidden":false},{"title":"System","slug":"/system/foundations/overview","chapters":[{"title":"Foundations","slug":"/system/foundations/overview","pages":[{"title":"Overview","slug":"/system/foundations/overview","hidden":null},{"title":"Build System","slug":"/system/foundations/build-system","hidden":null},{"title":"Continuous Integration","slug":"/system/foundations/ci-system","hidden":null},{"title":"NUClear","slug":"/system/foundations/nuclear","hidden":null},{"title":"Mathematics","slug":"/system/foundations/mathematics","hidden":null},{"title":"Configuration and Script System","slug":"/system/foundations/config-script","hidden":null},{"title":"Director","slug":"/system/foundations/director","hidden":null}],"hidden":false},{"title":"Subsystems","slug":"/system/subsystems/input","pages":[{"title":"Input","slug":"/system/subsystems/input","hidden":null},{"title":"Odometry","slug":"/system/subsystems/odometry","hidden":null},{"title":"Localisation","slug":"/system/subsystems/localisation","hidden":null},{"title":"Motion","slug":"/system/subsystems/motion","hidden":null},{"title":"Vision","slug":"/system/subsystems/vision","hidden":null},{"title":"Behaviour","slug":"/system/subsystems/behaviour","hidden":null},{"title":"Logging","slug":"/system/subsystems/logging","hidden":null}],"hidden":false},{"title":"Tools","slug":"/system/tools/nusight","pages":[{"title":"NUsight","slug":"/system/tools/nusight","hidden":null},{"title":"NUbook","slug":"/system/tools/nubook","hidden":null},{"title":"NUpbr","slug":"/system/tools/nupbr","hidden":null},{"title":"NUgan","slug":"/system/tools/nugan","hidden":null},{"title":"System Configuration","slug":"/system/tools/system_configuration","hidden":null},{"title":"NatNet SDK","slug":"/system/tools/natnet_sdk","hidden":null}],"hidden":false},{"title":"Hardware","slug":"/system/hardware/overview","pages":[{"title":"Overview and Specifications","slug":"/system/hardware/overview","hidden":null}],"hidden":false},{"title":"Modules","slug":"/system/modules/actuation/","pages":[{"title":"Actuation","slug":"/system/modules/actuation/","hidden":null},{"title":"Extension","slug":"/system/modules/extension/","hidden":null},{"title":"Input","slug":"/system/modules/input/","hidden":null},{"title":"Localisation","slug":"/system/modules/localisation/","hidden":null},{"title":"Nbs","slug":"/system/modules/nbs/","hidden":null},{"title":"Network","slug":"/system/modules/network/","hidden":null},{"title":"Output","slug":"/system/modules/output/","hidden":null},{"title":"Planning","slug":"/system/modules/planning/","hidden":null},{"title":"Platform","slug":"/system/modules/platform/","hidden":null},{"title":"Purpose","slug":"/system/modules/purpose/","hidden":null},{"title":"Skill","slug":"/system/modules/skill/","hidden":null},{"title":"Strategy","slug":"/system/modules/strategy/","hidden":null},{"title":"Support","slug":"/system/modules/support/","hidden":null},{"title":"Tools","slug":"/system/modules/tools/","hidden":null},{"title":"Vision","slug":"/system/modules/vision/","hidden":null}],"hidden":false}],"hidden":false},{"title":"Guides","slug":"/guides/main/getting-started","chapters":[{"title":"Main Codebase","slug":"/guides/main/getting-started","pages":[{"title":"Getting Started","slug":"/guides/main/getting-started","hidden":null},{"title":"NUClear","slug":"/guides/main/nuclear-tutorial","hidden":null},{"title":"Running and Tuning Scripts","slug":"/guides/main/tuning-and-running-scripts","hidden":null},{"title":"Maintaining Subsystems","slug":"/guides/main/maintaining-subsystems","hidden":null},{"title":"Data Recording and Playback","slug":"/guides/main/data-recording-playback","hidden":null},{"title":"Camera Calibration","slug":"/guides/main/camera-calibration","hidden":null},{"title":"Onboarding Workshop","slug":"/guides/main/onboarding","hidden":null}],"hidden":false},{"title":"Tools","slug":"/guides/tools/nusight-contribution","pages":[{"title":"Contributing to NUsight","slug":"/guides/tools/nusight-contribution","hidden":null},{"title":"Setting Up Webots","slug":"/guides/tools/webots-setup","hidden":null},{"title":"Visual Mesh Getting Started","slug":"/guides/tools/visualmesh","hidden":null},{"title":"Using NUpbr","slug":"/guides/tools/nupbr-guide","hidden":null},{"title":"GameController Setup","slug":"/guides/tools/gamecontroller","hidden":null}],"hidden":false},{"title":"Hardware","slug":"/guides/hardware/working-with-robots","pages":[{"title":"Working with Robots","slug":"/guides/hardware/working-with-robots","hidden":null},{"title":"Flashing a Robot","slug":"/guides/hardware/flashing","hidden":null},{"title":"Servo Setup and Calibration","slug":"/guides/hardware/servo-calibration","hidden":null},{"title":"Batteries","slug":"/guides/hardware/batteries","hidden":null},{"title":"DARwIn Op2 Robot Restoration and Calibration Guide","slug":"/guides/hardware/darwin-op2-guide","hidden":null}],"hidden":false},{"title":"General","slug":"/guides/general/learning-resources","pages":[{"title":"Learning Resources","slug":"/guides/general/learning-resources","hidden":null},{"title":"Contribution Workflow","slug":"/guides/general/contribute","hidden":null},{"title":"RoboCup Setup","slug":"/guides/general/robocup-setup","hidden":null},{"title":"Troubleshooting","slug":"/guides/general/troubleshooting","hidden":null},{"title":"Code Conventions","slug":"/guides/general/code-conventions","hidden":null},{"title":"Glossary","slug":"/guides/general/glossary","hidden":null}],"hidden":false}],"hidden":false},{"title":"Kitchen Sink","slug":"/kitchen-sink/headers","chapters":[{"title":"Markdown","slug":"/kitchen-sink/headers","pages":[{"title":"Headers","slug":"/kitchen-sink/headers","hidden":true},{"title":"Formatting and Paragraphs","slug":"/kitchen-sink/formatting-and-paragraphs","hidden":true},{"title":"Blockquotes","slug":"/kitchen-sink/blockquotes","hidden":true},{"title":"Alerts","slug":"/kitchen-sink/alerts","hidden":true},{"title":"Images","slug":"/kitchen-sink/images","hidden":true},{"title":"Lists","slug":"/kitchen-sink/lists","hidden":true},{"title":"Code","slug":"/kitchen-sink/code","hidden":true},{"title":"Math","slug":"/kitchen-sink/math","hidden":true},{"title":"Table of Contents","slug":"/kitchen-sink/table-of-contents","hidden":true},{"title":"Tables","slug":"/kitchen-sink/tables","hidden":true},{"title":"Collapsible Content","slug":"/kitchen-sink/collapsible","hidden":true},{"title":"GraphViz Diagrams","slug":"/kitchen-sink/graphviz-diagrams","hidden":true},{"title":"Referencing","slug":"/kitchen-sink/referencing","hidden":true}],"hidden":true}],"hidden":true}],"references":null,"hidden":null}},
    "staticQueryHashes": ["3715292327","445096115","466146812"]}