After much soldering and programming I finally have the code base and electronics mostly setup for the Octopod. As previously stated I’m using two Adafruit 16-channel servo controllers for handling the 24 leg servos. I’m currently using an Arduino Pro Micro to handle the controlling of the breakouts. I have a rudimentary Arduino library up on my Github.
I’m basically handling the control as a hierarchical set of libraries. On the top level I have the Octopod class which will handle very abstract motion such as stepping, turning, rotating, and tilting. The Octopod class has eight Leg objects. The Leg class is responsible for, you guessed it, a leg! It handles things such as forward and inverse kinematics, which is a topic for another post, and some trajectory generation (e.g. arcs, lines, etc.). Each leg consists of three Joints. The Joint class handles the servos’ default positions and offsets and contains a Servo which is just the barebones implementation to control a hobbyist servo using the PCA9685. I’ve done some basic testing on the Servo and Joint classes and am fairly confident that they work but I’ve been avoiding the Leg class since I don’t yet want to go through the nightmare of debugging my trigonometry.
Instead, I decided to create a walking program just to get a chance to see the robot in action. However, this didn’t go nearly as well as I’d hoped and the Octopod collapsed in a jittery mess. In my haste I decided to not include the decoupling capacitors on the Adafruit boards which turned out to be a mistake since I have 24 servos which can each draw several hundred milliamps. Once added, the operation was a little better, though not by much. Below is a video of the robot attempting to walk.
From the looks of things, either the capacitors were not enough or my code is incredibly messed up. In the next couple of days I’m hoping to take a closer look at the problem.