Date: September 2019 - April 2022
Created By: Alex Gronlund, Joseph Allen, Samuel Ryckman, Dustin Richards, Landon Lamoreaux, Christian Weaver, Erick Eickhoff
Purpose: Compete in the NRC Combat Robot Competition
Cost: $750ish
Features: Driving while spinning really fast, lightweight design, custom PID motor controllers.
This robot was constructed to compete in the Combat Robot event at the 2020 NRC competition. The goal of this competition is to construct a 14" x 14" x 14" 3lb beetleweight robot. Two robots fight head-to-head in an enclosed 8’x8’ arena until one of the bots becomes immobilized. The robot we designed for this was a full-body spinning robot. It is circular and the entire robot is designed to spin at approximately 500rpm. The primary weapon is a tooth sticking out of the side to hit the other robots.
Mechanical
Mechanically, the idea behind this design was to put as much mass as possible behind the weapon so that we could maximize damage. With a weight limit of 3lbs, if mass is split between the weapon and drivetrain there would be a tradeoff between weapon effectiveness and controllability of the robot depending on how the mass was split between the two. By making the entire robot the weapon, all the mass is simultaneously part of both the weapon and the drivetrain.
For the chassis, the main components and the selected materials are as follows:
This design was tested for durability and effectiveness with a prototype constructed from similar materials and dimensions. In the testing, the design held up quite well despite using weaker materials, and the weapon proved very effective.
In Fall of 2020, we began machining the motor mounts and some of the other components. But any further progress came to a standstill as the university was moved to virtual learning and the competition was canceled due to the Covid-19 pandemic. Production of the mechanical components continued in Spring of 2021. Alex machined the titanium tooth over break, and Dr. Koontz of CAMP assisted with producing the wheel hubs, foam inserts, and finishing the motor mounts.
For the foam retainers, originally the plan was to produce a thin polycarbonate grid. But we realized this didn’t provide much protection or support to the foam and we had some weight to spare. So we moved to a composite panel instead. To produce this, we received help from CAPE lab who assisted with doing the layup. After this, we waterjetted out the retainers with help from Todd Curtis of AMP lab.
Electrical and Programming
The planned electrical system for this robot is shown in the diagram below. Brushless motors with integrated drivers were chosen for the primary drive motors. An ESP32 was chosen as the main microncontroller since it is fairly powerful and commonly available at low prices. The IMU used was the ICM-20649. This is a wide range IMU that can accomodate angular rotation rates up to 667 rpm. For controlling the robot, the Xbee remote controllers our team developed would be used.
A unique feature of the control system is the power switch. We initially considered using two metal strips that would be screwed together to power on the bot. But in the spirit of never going with the easy option, we decided to implement two capacitive touch buttons that would toggle the power on and off. This solution would ideally be easier to use and potentially more reliable since it wouldn't be as prone to mechanical failure.
Because the robot would be constantly rotating, the direction the bot would drive could not be shown by any fixed point on the chassis. Instead, the direction of driving would be indicated by LED strips which would change colors through the course of rotation to create an "arrow" of sorts pointing in the direction the bot would drive. As the LED strips would rotate through the angles, they would light up for most of the rotation as red and then switch to blue at the "0" angle.
The main portions of the control system (the microcontroller, IMU, voltage regulators, xBee, and power switching) were designed into a single custom PCB. This was done to conserve space and reduce the number of free components inside of the battlebot. This also reduced and simplified the wiring greatly. This was desirable, since wire connections tend to be a main point of failure in environments with large amounts of vibration or impact.
Since the robot would be spinning at a high rate of speed, very accurate motor control was needed to achieve reliable movement. To make this happen, the team decided to develop a custom motor speed controller. The device would be controlled through SPI communications from the main control board and would manage the speed of the motor using a PID algorithm. The controller would read the speed of the motor through quadrature outputs from a magnetic motor encoder. All of the components of the speed controller would be built onto a single board which would be mounted on the rear of the motor. The controller used on the board was an Atmega328p.
Getting the motor controller to work as intended was quite challenging. The kinematics required to get the robot to translate while rotating results in a speed profile for the motors which is a sinusoid that oscillates at the rate of chassis rotation. To achieve this, the PID controller had to be tuned very aggressively resulting in not-so-pretty results with a free-spinning wheel as shown in the videos in the gallery above. However, when running on the ground, the controllers ran the motors well enough to produce acceptable translation while spinning at the desired rpm.
To test the full control system, in the 2019-2020 semesters we assembled a simple test chassis with some spare parts resembling the components that would eventually be used. This test chassis was successfully able to translate while rotating at a low rpm. The next year, the team assembled a more refined test chassis. This one was capable of spinning at even higher speeds (around 200rpm) but was limited by the imbalance of the mounted components. Even though these test chassis were not able to obtain the full speed, they did prove the concept was feasible.
Another test was isolated testing with the IMU. This involved setting up the microcontroller, the IMU, and the LED strip on a piece of foam and spinning it at various speeds to see if the IMU could track the current angle. The LED strip would be illuminated in the same manner as what would be done on the final chassis. This setup gave an easy way to troubleshoot and refine the IMU code in a more controlled environment.
Once the mechanical components were finished and the custom PCBs were assembled, a fair amount of work on the code was still required to get the bot working as intended. Even though we had tested individual components extensively, there were still issues that arose when the code was run with the full system. These were worked through, but in a somewhat rushed manner (some of the final changes were actually made between rounds of the competition). But in the end, the control system and programming mostly worked as intended.
Results
In Fall of 2021, we brought the bot to competition. The design held up well and performed as expected for the most part. A full recap can be found on the 2021 NRC Competition page.
Plans for the Future
Even though we were happy with the bot’s performance at the competition, there is always room for improvement. Should we decide to compete again next year, we would like to shore up some of the weak points such as the connection from the composite retainer into the motor mounts and the materials directly behind the tooth. Also, even though the foam insert does a good job of absorbing impact energy, it isn't especially resilient and does deteriorate more rapidly than what would be ideal. We would like to look into a nylon insert with topology optimization to conserve weight and give us strength in the locations we really need it. Also, we would like to look into some larger motors. We typically had plenty of battery left after the matches, and more power is always more fun.
Acknowledgements
We had a lot of help with producing this bot and would like to thank a few individuals/groups in particular.