The hexapod stands as my largest and, in my opinion, most impressive project to date. Over a period of six months, I conducted extensive research, brainstormed ideas, designed, tested, and refined various aspects of the robot. It’s important to mention that the robot was not originally designed by me. The base code and 3D models were sourced from Mark W Tech. The initial version of the robot was printed and assembled by a student from my high school, who graduated a year prior. My project served as an extension of hers. However, I made significant modifications to both the original design and the first iteration of the robot.
(Please note that the Mark W Tech website is currently unavailable)
The image to the side shows the robot as it appeared when I first received it. At this stage, it was quite a disorganized mess, with many loose wires, unconnected boards and sensors, and poorly connected wires. However, the visible issues were just the surface of the problem. As shown in the photo, there were wooden spacers on all of the legs, as well as mismatched and missing screws. While the robot was functional, it was slow, unreliable, and prone to issues, including cracks and tears on all the 3D printed legs.
My first major task on this robot was to reorganize the wiring. I started by ordering a shield for the Arduino board to sit on top, allowing me to connect all the motors directly to the board rather than through smaller ones attached to the side. I also glued the voltage indicator to the front of the robot, tucked some components inside or alongside the body, and re-routed the battery for a smoother connection. Additionally, I modified the code to allow for more flexibility in how the motors were connected to the board. I bundled all the wires together with cable ties, securing them to the body to minimize movement while ensuring enough slack was left for proper motor movement.
All the legs on the robot shared a common issue: they would frequently break. The more I improved other areas of the robot, such as speed and stabilization, the more often the legs would break. Specifically, the brackets holding the motors in place would snap along the layer lines, requiring a complete replacement of the part. This was a major problem, probably the most significant challenge I faced with the robot. To address it, I spent many weeks redesigning the parts, adjusting print settings, reprinting, and testing. However, progress was slow, as I could only produce three new components a week due to time constraints. Another approach I took was modifying parts of the code, but while this sometimes helped, it often had no effect.
Eventually, I realized that about 50% of the breaks were caused by the robot slipping, which put too much weight on certain legs. To mitigate this, I adjusted the code and added LEGO tires to the legs for better grip. This slightly reduced the frequency of breakages, but the reality was that some legs were still breaking due to the robot's weight and movement. By the end of the school year, the robot remained fast, functional, and clean, but unreliable. On my last day, as I was disposing of old parts, I made an important realization. The filament I had been using was different from the one used for the first iteration of the robot. After a quick test, I discovered that the filament I had used all year was faulty—its strength was less than 40% of the original filament. Despite both filaments being PLA, the new one was either expired or of poor quality, and it was the root cause of all my issues. Although this was a disappointing revelation, I had no time left to make any changes.
A significant amount of progress was made in the code segment of this project. When I first encountered the code, I was completely confused and had no idea how it worked. It consisted of over 1000 lines of code in a language I wasn’t familiar with. After many hours of reviewing and examining different sections, I eventually started to understand how specific parts worked and the fundamentals of how the robot operated.
There were several key changes I wanted to make in the code. First, I aimed to drastically increase the speed of the robot. While this wasn’t particularly difficult, it led to new issues with part breakages. At one point, one of my motors broke and needed replacing. Unfortunately, the only suitable replacement I had was a motor that received inputs differently. Through extensive testing, I discovered that all instructions sent to this motor were mirrored along the centre compared to the other motors. Once I figured this out, it became a matter of inputting a function to mirror all commands for this motor around the centrepoint, which took some time. Aside from changing the output ports for most of the motors, the only other modifications I made were adjusting the operating heights of various parts of the robot (e.g., standard body height, leg adjustments).
While I was somewhat disappointed over the final result of the robot, with all the breakages still occurring, I was still proud of how much I had learned, and how much I had improved over my time working on the hexapod. The skills that I gained on this project is unparalleled compared to my other previous projects. If I had more time, I would have made many more changes, but unfortunately, that is no longer possible. I had a lot of fun working on this robot, and I am excited to apply the skills learned during this project in university, and in the workplace.
Here is the design notebook for this project (Incomplete, final version not available):
Below are some videos of the robot in operation. While some abilities are demonstrated here, there are many more that are not. The robot is 100% controlled with a ps2 controller
Demonstration of different walking methods
Demonstration of custom offsets
Example of a common leg breakage