The robot has 3 main systems: Frame, muscles and valves and pump, and control.
The frame of the robot was constructed using laser cut MDF, custom aluminum hardware, and various 80/20 components. Essentially, the frame is little more than a simplistic skeleton, with four pivot joints (knees) actuated using powerful fluidic muscles, and four passive (non-powered) but spring-loaded joints at the hips. The feet are just little hard rubber furniture feet. The picture below gives a good sense of the basic building blocks of this robot. Note that in the image below, no muscles are attached.
The video below shows a cool time-lapse we did of re-configuring the robot for different experiments. As you can see, with fairly minimal effort we can totally change the anatomical rations of the robot.
MUSCLES, VALVES, AND PUMP
The muscles that move the robot are fairly straight-forward - a muscle is just a thick-walled latex tube with a fabric sheath around it. For example, an 8" long muscle is made by taking an 8" length of 3/8" wall-thickness latex tube and capping it at one end using a normal PVC cap fitting available at any hardware store. Next, a 12" length of fabric tube is made by cutting out a 12" x (Pi*latex tube diameter) piece of strong parachute fabric and sewing it down the long-side. The latex tube is then inserted into the fabric tube, such that each end of the latex tube is just sticking out of the ends of the fabric tube. The result is a very bunched-up, wrinkly fabric sheathing around a latex tube. Remember how we capped one side of the latex tube, and not the other? If we now introduce around 100 psi (don't do this without proper safety measures) into the latex tube, it will try to expand like a balloon in all directions. The fabric sheathing won't allow this to happen. It will prevent any RADIAL expansion (the latex tube diameter can't increase) but it will allow LONGITUDINAL expansion (the wrinkles in the fabric can stretch out!) of the muscle.
Below is a great picture depicting one iteration of the robot's legs. Here, we were experimenting with using two shorter muscles in parallel. It looks cool, but we later moved on to using a single, larger muscle per leg.
So now we have this muscle that gets longer when pressurized, so what? Well, there is a reason that it takes 100 PSI to elongate the muscle. To make the muscle get longer, it must stretch the latex. That latex is very, very strong. An average person can't make a 12" length of of 3/8" wall-thickness latex tube stretch even 1". The pressure stretches that tube as much as 6".....but that stretch only lasts as long as the tube stays pressurized. The instant the pressure is allowed to leave the muscle (valve open) the latex springs back explosively, creating hundreds of pounds of force. This force can be used for good, if the muscles are securely attached to a mechanically-sound place on a robot leg.
The robot has four legs, and so we gave it four muscles. Each muscle needs to be filled with pressure, and then have that pressure released. We decided to stay simple and use singlie-acting valves. You can buy fancy valves that can both introduce and remove pressure....but that wasn't in the budget. So four muscles, and two valves per muscle gives us a total of 8 valves. To have control over each leg individually was super cool, but we were too heavy. We eventually realized that if the robot's leg motions were symmetrical (i.e. the front two legs do the same thing, and the rear legs do the same thing) then we can eliminate half of the valves. The final design achieve a simple bounding gait using only four valves. One pair of valves controlled the front legs, and the other pair controlled the rear legs.
This actually worked very well. If I could go back, I'd buy lower-weight valves and put in all eight. This would allow me to control the relative motion of the two front legs which might allow the robot to be able turn or even deal with uneven terrain.
We went back and forth with the pump. The water pump was neat because it was entirely self-contained (and the robot had blue food-colored blood running though its veins!), but water is heavy and messy. An air pump is much less messy and air weighs less, but we could not afford a nice small air pump at that stage of the project. The compromise was to supply the robot with air pressure from an off-board air compressor and tank....we dragged the compressor alongside the robot as it jumped along. The sound of air explosively leaving the muscles definitely turned a few heads.
The robot was controlled using a plain old Arduno Uno. To give the arduino the ability to control 4 large solenoid valves and a pump, we built a simple board with 5 IRF510 mosfets. The mosfets weren't wired in any kind of H-bridge; the valves are electrically uni-directional so it didn't make sense to go through the extra effort to be able to reverse the current flow. Arduino pin high to mosfet gate, mosfet lets current flow from the battery to the valve. Arduino pin low to mosfet gate, mosfet stops allowing current to flow to the valves.
We experimented with putting ground contact switches on the feet. The idea was that the robot measure the time between the ground contacts of different foot pairs, and slowly optimize the valve timing over repeated tests to achieve a longer aerial phase (aerial phase = no feet on the ground).
Ultimately, we found that we could simply hard-code some delays between valve open/closes to achieve a satisfactory hopping motion. We included a Pololu miniIMU 9 in the hopes that we would have time to implement real closed-loop control, but alas that never ended up happened. The video below shows the robot' modest sensing abilities. When the feet can't touch the ground again, it stops moving its legs, and resumes again when ground contact is restored. We also got that one Arduino AHRS working with the robot's IMU, but again we never used this as a sensing input, just a data logger.
As for this "hard-coded" control, the theory of operation is simple: A pressure source (sometimes we used a water pump, other times we used a small compressed air tank) is controlled by the simple network of solenoid valves to rapidly fill the dog's four large muscles, causing them to stretch, become longer, and store a huge amount of elastic potential energy. Then the valves to the pump close. When the time is right, the release valves open and allow the latex tubes within the muscle to finally expel the fluid back to a reservoir, and at the same time contract at high velocities. This high velocity contraction pulls against the legs, causing the robot to leap forward. If the front legs are fired just a few fractions of a second before the rear legs, the robot exhibits a "bounding" motion (SEE FIRST VIDEO BELOW), whereas if the legs are all fired at the same time, the robot exhibits a leaping motion (SEE SECOND VIDEO). Check out the videos below for some of our more successful tests. Cheers!
I have to boast for moment - I made a simulation in Working Model 2D (great software!) to try to predict how our robot would move given different design parameters. Okay, what's the big deal? Well, anyone who regularly creates computer simulations appreciates how difficult it is to make the simulation predict reality even remotely correctly. The video below shows the result of the simulation we did to try to predict the motion of the robot. Compare it with the video just above. Not bad!