{
    "componentChunkName": "component---src-components-page-template-jsx",
    "path": "/system/hardware/overview",
    "result": {"data":{"mdx":{"id":"bccfba5c-fec0-5bc0-a074-72112f2cfa0b","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\": \"System\",\n  \"chapter\": \"Hardware\",\n  \"title\": \"Overview and Specifications\",\n  \"description\": \"Overview and specification of the hardware used by NUbots.\",\n  \"slug\": \"/system/hardware/overview\",\n  \"authors\": [\"Ysobel Sims (@ysims)\", \"Taylor Young (@tayloryoung6396)\", \"Alex Biddulph (@Bidski)\", \"Corah Oliver (@yippyy)\"]\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 Grid = makeShortcode(\"Grid\");\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, \"The NUbots team uses the NUgus hardware platform, a modification of the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"http://www.nimbro.net/OP/\"\n  }, \"igus\\xAE Humanoid Open Platform\"), \". The NUgus robots are 3D printed using fused deposition modelling.\"), mdx(\"img\", {\n    \"src\": \"/opt/build/repo/src/book/02-system/04-hardware/images/nugus.png\",\n    \"alt\": \"Coronal and saggital images of the NUgus robot\",\n    \"title\": \"Coronal and saggital images of the NUgus robot\"\n  }), mdx(\"h2\", {\n    \"id\": \"igus-modifications\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#igus-modifications\",\n    \"aria-label\": \"igus modifications 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  }))), \"igus\\xAE Modifications\"), mdx(\"p\", null, \"The following modifications were made to fit our specific requirements:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Split components of the robot to fit the size of the printer bed and volume.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Modified the torso to have open shoulder covers for shoulder servo cable access.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Redesigned the legs with a simpler model made out of aluminium, with XH540-W270-R servos rather than MX-106 servos, onyx connectors for the hip and ankle blocks and onyx supports inside the legs.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Moved the buttons to the panel above the removable back panel to prevent issues with button cables when removing the back panel.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Added a 3d printed brace between the hip yaw servos to reduce flex. The brace also serves as a mount for power switches and the main power fuse.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Created custom draws for the computer (intel NUC) and subcontrollers (OpenCR, NUSense)\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Designed a bearing housing for the hip yaw that takes a tapered roller bearing from a mountain bike head stock. This interfaces between the servo shaft and the hip pitch/roll block and takes the load of the servo shaft and spreads it over a wider area on the bottom of the torso.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"3d printed Onyx legs have now been replaced with 'L' angle machined aluminium.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"The NUC drawer has been replaced with a vertical NUC assembly. These changes were made to utilise space within the torso which now provides extra working space. Features include:\"), mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Rubber mounts.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Lower mounts that double as a hip yaw motor brace. This addition stiffens the lower torso.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Integrated power assembly.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Subcontroller mount.\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"The back panel has been simplified as the old NUC placement was prone to breaking ports on the NUC board. The opportunity for improvements appeared when the new vertical NUC mount placement required cables to access data ports. New back panel features include:\"), mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Replaceable keystone ports (usb-c, usb-3, and ethernet).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Replaceable data cables to NUC.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"New bigger buttons.\")))), mdx(Alert, {\n    mdxType: \"Alert\"\n  }, mdx(\"p\", null, \"The \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"RED\"), \" button relaxes the servos.\"), mdx(\"p\", null, \"The \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"BLUE\"), \" button starts behaviour.\"), mdx(\"p\", null, \"The \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"BLACK\"), \" button stops behaviour.\")), mdx(\"h2\", {\n    \"id\": \"servos\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#servos\",\n    \"aria-label\": \"servos 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  }))), \"Servos\"), mdx(\"p\", null, \"The arms and head of the NUgus robot use \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"http://emanual.robotis.com/docs/en/dxl/mx/mx-64/\"\n  }, \"Dynamixel MX64AR servos\"), \", with two in each shoulder, one in each elbow, and two in the neck. The legs use both \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://emanual.robotis.com/docs/en/dxl/x/xh540-w270/\"\n  }, \"Dynamixel XH540-W270-R servo\"), \" and \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"http://emanual.robotis.com/docs/en/dxl/mx/mx-106/\"\n  }, \"Dynamixel MX106 servos\"), \", with two X series in each ankle, one in each knee, and two in each hip, with the two hip yaw servos remaining as MX-106.\"), mdx(\"p\", null, \"Custom 3d printed Onyx mounts are now used, but over time it has been determined that parts such as the knee servo mounts and the idle wheel mounts may better to be printed from PETG filament.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Custom mounts that retain MX style idle wheels on x-series servos. MX style idle wheels are preferred due to being bolted rather than the clip-in design of the x-series idle wheels.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Under each idle wheel, flat needle bearings or flat stainless washers/bearings are used.\"))), mdx(\"p\", null, \"The X-series servos use custom bolt in cable retainer clips.\"), mdx(\"p\", null, \"The MX servos have been modified to include a \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.st.com/content/ccc/resource/technical/document/datasheet/03/7a/4e/3b/96/c3/4e/37/CD00000663.pdf/files/CD00000663.pdf/jcr:content/translations/en.CD00000663.pdf\"\n  }, \"1.5KE18CA TranZorb\"), \", formerly \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"http://www.vishay.com/docs/88356/icte.pdf\"\n  }, \"1N6385 TranZorb\"), \", connected in parallel to the servo motor.\\nThis is done to prevent induced EMF from overloading the electronics in the servo.\\nEMF can be induced when the servos are manually moved without power being applied (i.e. grabbing the robot's leg and forcing the knee to bend).\"), mdx(Grid, {\n    columns: \"1fr 2fr\",\n    mdxType: \"Grid\"\n  }, mdx(\"img\", {\n    \"src\": \"/opt/build/repo/src/book/02-system/04-hardware/images/servo-tranzorb-1.png\",\n    \"alt\": \"Top view of the mounted TranZorb. The two arms of the TranZorb are soldered to the motor terminals. Hot glue is added to stabilise the TranZorb against shocks and vibrations.\",\n    \"title\": \"Top view of the mounted TranZorb. The two arms of the TranZorb are soldered to the motor terminals. Hot glue is added to stabilise the TranZorb against shocks and vibrations.\"\n  }), mdx(\"img\", {\n    \"src\": \"/opt/build/repo/src/book/02-system/04-hardware/images/servo-tranzorb-2.png\",\n    \"alt\": \"Side view of the mounted TranZorb. TranZorb arm is soldered on to the motor terminal along with the already existing motor connection, which is a black cable\",\n    \"title\": \"Side view of the mounted TranZorb. TranZorb arm is soldered on to the motor terminal along with the already existing motor connection (black cable)\"\n  })), mdx(\"p\", null, \"The TranZorb is soldered directly on to the terminals of the servo motor. Hot glue is applied to stabilise the TranZorb against shocks and vibrations.\\nX series servos do not need a TranZorb.\"), mdx(\"h2\", {\n    \"id\": \"cameras\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#cameras\",\n    \"aria-label\": \"cameras 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  }))), \"Cameras\"), mdx(\"p\", null, \"The NUgus robot uses two \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.flir.com/products/blackfly-s-usb3?model=BFS-U3-13Y3C-C\"\n  }, \"FLIR Blackfly S\"), \" USB3 cameras with a C-Mount lens positioned in their head, producing images at up to 170FPS. Two custom-built S-Mount to C-Mount lens adaptors are used to attach two \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.lensation.de/product/BF10M19828S118C/\"\n  }, \"Lensation 180\\xB0 fisheye S-Mount lenses\"), \". Two \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.angledcables.com/parts/rr-aums-xxgr.html#RR-AUMS-20GR\"\n  }, \"20\\\" USB3 micro USB to up angle USB A cables\"), \" are used to connect the cameras to the robot's computer.\"), mdx(\"h2\", {\n    \"id\": \"computing\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#computing\",\n    \"aria-label\": \"computing 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  }))), \"Computing\"), mdx(\"p\", null, \"The NUgus robot uses the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.intel.com/content/www/us/en/products/sku/121640/intel-nuc-12-pro-kit-nuc12wshi7/specifications.html\"\n  }, \"Intel NUC12WSHi7\"), \". It has 32GB of RAM, a 1TB SSD, and a NUsense subcontroller.\"), 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 NUgus robot has an Ethernet port as well as WiFi capability. It has two custom-ordered 15cm MHF.4 to RP-SMA wireless antenna cables from the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://rfshop.com.au/\"\n  }, \"RFShop\"), \", with two \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://au.element14.com/microchip/rn-sma-s-rp/antenna-2-4ghz-1inch-w-rpsma/dp/2143323\"\n  }, \"RP-SMA antennas\"), \" which are around 1\\\" long.\"), mdx(\"h2\", {\n    \"id\": \"power\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#power\",\n    \"aria-label\": \"power 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  }))), \"Power\"), mdx(\"p\", null, \"The NUgus robot has a \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.powerbox.com.au/ac-dc-power-supplies/ac-dc-power-supply-cosel-pbb20c\"\n  }, \"Cosel AC/DC Power Supply\"), \". It uses a \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.campbelltownhobbies.com.au/nxe-14.8v-4200mah-40c-soft-case-with-deans-plug-42?srsltid=AfmBOopsSRXZSrXw4AsKhPQgUhmWyOqvFeGJkwsGQ3VU2ZQyUqlf4PYQ\"\n  }, \"4200mAh 4S LiPo Battery\"), \" when not plugged into power. It uses a custom power assembly and a custom 16A cylindrical fuse holder. The NUC power board which distributes power to the cooling fan and the NUC is also custom.\"), mdx(Alert, {\n    mdxType: \"Alert\"\n  }, mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"DIMENSIONS\"), \": 36x44x138mm\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"CAPACITY\"), \": 4200 mAh x 14.8 V = 62.16 Wh\")), mdx(\"p\", null, \"The NUgus robot uses custom cables to provide power to the fan, the NUC, and sense and speed control to the fan.\"), mdx(\"h2\", {\n    \"id\": \"foot-studs\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#foot-studs\",\n    \"aria-label\": \"foot studs 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  }))), \"Foot Studs\"), mdx(\"p\", null, \"The studs attached to the feet have been purchased from \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://au.rs-online.com/web/p/stud-mounts/1264940/?sra=pstk\"\n  }, \"RS Online\"), \". The Prototyping Workshop in EC can shave the sides of these cylindrical rubber studs into a more conical shape. An M5 nut is needed for attaching the studs to the feet.\\nAn alternative foot stud can be purchased from \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.aliexpress.com/item/1005006840189285.html?spm=a2g0o.order_list.order_list_main.17.639c1802I3ZTXL\"\n  }, \"AliExpress\"), \". These are a screw in cleat used on golf shoes and provide excellent grip on synthetic grass. The thread for this style of stud is not long enough to be secured by a nut, so are threaded directly into the printed material and glued if necessary. They can also be sourced from most golf shops.\"));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#igus-modifications","title":"igus® Modifications"},{"url":"#servos","title":"Servos"},{"url":"#cameras","title":"Cameras"},{"url":"#computing","title":"Computing"},{"url":"#networking","title":"Networking"},{"url":"#power","title":"Power"},{"url":"#foot-studs","title":"Foot Studs"}]},"frontmatter":{"section":"System","chapter":"Hardware","title":"Overview and Specifications","description":"Overview and specification of the hardware used by NUbots.","keywords":null,"slug":"/system/hardware/overview","hidden":null},"childNUbookContributions":{"authors":[{"name":"Ysobel Sims","username":"ysims"},{"name":"Taylor Young","username":"tayloryoung6396"},{"name":"Alex Biddulph","username":"Bidski"},{"name":"Corah Oliver","username":"yippyy"}],"lastCommit":{"date":"2025-11-28T01:25:34.000Z","hash":"6e5d3cf494a369673e92b55f5c298c76b1737a4c"}}}},"pageContext":{"mdxPath":"src/book/02-system/04-hardware/01-overview.mdx","id":"bccfba5c-fec0-5bc0-a074-72112f2cfa0b","next":{"chapter":"Modules","title":"Actuation","description":"Documentation for each actuation module in the main NUbots codebase","slug":"/system/modules/actuation/","hidden":null},"previous":{"chapter":"Tools","title":"NatNet SDK","description":"A tool that captures positional information from the Motive motion capture software.","slug":"/system/tools/natnet_sdk","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"]}