Robo Roach Wrestling

A sumo style wrestling league for hexapod robots

Similar projects worth following
Push the other bug out of the circle to win!

Practice your robotic design and control skills by building and wrestling robot hexapods. Designed to be affordable with a minimal bill of materials, this project is intended to be an easy place to learn about robotics.

Created with the help of Seeed Studio:

x-zip-compressed - 4.59 MB - 04/26/2023 at 06:48


  • mk 4, version 30

    Andrew Benson05/05/2023 at 18:31 0 comments

    We hit the "Fusion" version of 30 just as we printed the latest model - it was interesting to find out that the fusion 360 model posted earlier in the logs stays up to date with the latest changes. we're figuring out how to version control between that, the thingiverse page, and this; such will be a problem to solve. The first match was last night, video to follow

  • It takes two to 'rassle

    Andrew Benson04/28/2023 at 01:58 0 comments

  • Assembly Video

    Andrew Benson04/26/2023 at 06:52 0 comments

  • Sharing ≥ Caring

    Andrew Benson04/01/2023 at 01:40 0 comments
  • Initial code test

    Andrew Benson03/29/2023 at 03:26 0 comments

    It seems like the XIAO esp32c3 does better with the PWM on channel 9, rather than 10 or 7. Still trying to figure out how to run two servos at the same time.

    Running this test code to try out different pins for the XIAO:

      Derived from
      Rui Santos
      Complete project details at
      Project changed to use "pwmWrite" library  
    #include <WiFi.h>
    #include <pwmWrite.h>
    Pwm pwm = Pwm();  // create servo object to control a servo
    // twelve servo objects can be created on most boards
    // GPIO the servo is attached to
    static const int servoPin = 10;
    // Replace with your network credentials
    const char* ssid     = "replace_with_SSID";
    const char* password = "replace_with_PW";
    // Set web server port number to 80
    WiFiServer server(80);
    // Variable to store the HTTP request
    String header;
    // Decode HTTP GET value
    String valueString = String(5);
    int pos1 = 0;
    int pos2 = 0;
    // Current time
    unsigned long currentTime = millis();
    // Previous time
    unsigned long previousTime = 0; 
    // Define timeout time in milliseconds (example: 2000ms = 2s)
    const long timeoutTime = 2000;
    void setup() {
      // Connect to Wi-Fi network with SSID and password
      Serial.print("Connecting to ");
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
      // Print local IP address and start web server
      Serial.println("WiFi connected.");
      Serial.println("IP address: ");
    void loop(){
      WiFiClient client = server.available();   // Listen for incoming clients
      if (client) {                             // If a new client connects,
        currentTime = millis();
        previousTime = currentTime;
        Serial.println("New Client.");          // print a message out in the serial port
        String currentLine = "";                // make a String to hold incoming data from the client
        while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop while the client's connected
          currentTime = millis();
          if (client.available()) {             // if there's bytes to read from the client,
            char c =;             // read a byte, then
            Serial.write(c);                    // print it out the serial monitor
            header += c;
            if (c == '\n') {                    // if the byte is a newline character
              // if the current line is blank, you got two newline characters in a row.
              // that's the end of the client HTTP request, so send a response:
              if (currentLine.length() == 0) {
                // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
                // and a content-type so the client knows what's coming, then a blank line:
                client.println("HTTP/1.1 200 OK");
                client.println("Connection: close");
                // Display the HTML web page
                client.println("<!DOCTYPE html><html>");
                client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
                client.println("<link rel=\"icon\" href=\"data:,\">");
                // CSS to style the on/off buttons 
                // Feel free to change the background-color and font-size attributes to fit your preferences
                client.println("<style>body { text-align: center; font-family: \"Trebuchet MS\", Arial; margin-left:auto; margin-right:auto;}");
                client.println(".slider { width: 300px; }</style>");
                // Web Page
                client.println("</head><body><h1>ESP32 with Servo</h1>");
                client.println("<p>Position: <span id=\"servoPos\"></span></p>");          
                client.println("<input type=\"range\" min=\"0\" max=\"180\" class=\"slider\" id=\"servoSlider\" onchange=\"servo(this.value)\" value=\""+valueString+"\"/>");
                client.println("<script>var slider = document.getElementById(\"servoSlider\");");
                client.println("var servoP = document.getElementById(\"servoPos\"); servoP.innerHTML = slider.value;");
                client.println("slider.oninput = function() { slider.value = this.value; servoP.innerHTML = this.value; }");
                client.println("$.ajaxSetup({timeout:1000}); function servo(pos) { ");
    Read more »

View all 5 project logs

  • 1
    3d Printing
  • 2

View all instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates