We’re getting confident enough with the system to stand without the dollies.
This allowed us to finally test if we can safely go belly down.
Shedding the dollies has the extra benefit of opening up a much needed new parking spot.
]]>We’re excited to be at this stage of the project. If you are one of the generous (and patient) souls who donated in the “will it stomp” tier of our kickstarter we will be reaching out shortly to start the process of getting things to stomp!
]]>They used the Arduino Teensy board that Joel developed as the leg controller, talking to a computer running some python code that Brett wrote to do path planning and kinematics.
Check out the videos!
]]>
Physical robot is mostly done
Stompy is built! There are six legs, a chassis, a roll cage, and an engine. The engine runs and powers the hydraulics. All of the hydraulics are hooked up and working properly.
There is still some work left to be done on the electronics. All six legs have a sealed Leg Controller enclosure with a Beaglebone Black inside. The Beaglebones have custom perf board capes. Each cape carries a Dual MC33926 Motor Controller, which can drive four PWM channels to control two pistons. The current plan is to drive the Knee and Thigh joints with those two channels, and add three more boxes located on the chassis to drive the Thigh joints.
All of the Leg Controller boxes are wired up to the network switch. We can plug a laptop into the switch and talk to all the Beaglebones in the legs.
The Beaglebones don’t have software to do closed loop control yet, but we can SSH in and directly set the PWM outputs to move the Knee and Thigh joints.
Software
Most of our activity right now is focused on software. We recently decided to run our code in ROS and have been spending a lot of time getting the ROS ecosystem up and running.
We have a SDF file that Brett Graham put together a little while back. He even linked in the Solidworks files for the robot, so we’ll be able to simulate a realistic model of Stompy in Gazebo.
Current Tasks
Seth Woodworth and Robin Garner have been working on using Vagrant and Ansible to automate building virtual environments. The goal is to be able to repeatably spin up a virtual machine with the ROS environment set up that we can use for development. Hopefully we will be able to use the same Ansible setup to deploy directly to the Beaglebones on the robot.
Spark is working on getting a launcher script to run nodes on different machines across a network.
Chris Stokes has been investigating the SeeedStudio Motor Bridge Cape as a new option for a motor controller cape. If we switched over to it, it would replace the custom perf board capes as well as the MC33926 motor controllers. This option would allow us to control all three leg joints from the Leg Controller BeagleBone. There are pros and cons to running all three leg joints from the Leg Controller, but overall it’s probably preferable to do it if we can.
Here are some more photos, and a video showing the constructed robot.
]]>
In our last post, you saw us put out a call for new members; we’re happy to report that we accepted 8 new people onto the team, and we’ve all been putting our heads down and cranking on steel fabrication. We’ve been building our way up the robot’s leg in parallel (i.e., we’re building all of one type of part before moving on to the next) from the calves, to the knees, to the thighs, and we’re on the cusp of starting the hip – the final link in the chain. We’re building 8 copies of each piece, with the hope that in the best case, we have two spares, and in the worst case, we can mess up 2 parts of each type without affecting the overall construction schedule. After the hips are done, we’ll start the chassis build in earnest, and then we’ll be ready for final assembly! We’re going to take a moment and step through what our build process has looked like, and how it’s evolved as we’ve gotten better at large-scale steel fabrication.
All of our leg parts are made out of pieces cut on the CNC plasma cutter we assembled at Artisan’s Asylum. The plasma cutter has a couple of big advantages – it has very low running costs, it’s extremely fast, and it’s available on an as-needed basis. Check out this album for some shots of the plasma cutter in action, and a look at what we have to do to move some of our heavier sheets around:
%%wppa%%
%%slide=13%%
The plasma cutter does have some distinct disadvantages, though – the biggest being that plasma cut parts require a lot of cleanup before they can be reliably welded together. The plasma cutting process creates what’s known as dross on the back side of cut parts. This is a thin, brittle, very hard layer of flash-frozen steel that usually has to be removed with grinders. We performed some initial experiments which indicated we couldn’t create reliable, clean welds if the dross and mill scale on our steel plates was still present, so we set up an assembly line of angle grinders to clean up all of our plates. After dozens of hours of grinding, we realized that we desperately needed another way to clean parts or we’d never finish; we then switched to pickling, a process where parts are dipped in vats of acid to remove impurities. We started with hydrochloric acid, and then quickly switched to citric acid due to safety and cost concerns. Check out the cleaning processes we’ve been through in this album:
%%wppa%%
%%slide=14%%
Once parts have been cut and cleaned, it’s time to assemble the pieces into cohesive links and weld them together. All of our links fit together like 3D jigsaw pieces; plates fit together with slots and tabs (check out our “Anatomy of a Thigh Link” post for an example section from our prototype leg), and square nuts and button head cap screws hold the plates together after they’ve been fit-up. This means that our leg sections are self-jigging and self-aligning, and require very little external tooling to fit together precisely. Once assembled with screws and square nuts, the links can be moved around for transportation and weld positioning. After assembling, we tack weld them in a specific order, plug weld sections together to increase the rigidity of the assembly, and finally weld all of the seams together to finish the parts.
%%wppa%%
%%slide=15%%
Once the leg sections are assembled and welded, it’s time to add joint bushings. In our prototype leg assembly, we made joint pivots and hydraulic cylinder pin joints with bronze bushings and carefully-aligned and welded steel cylinders that spanned the width of our leg sections. This style of design was incredibly time-consuming to weld accurately, and more often than not resulted in significant post-machining steps like hand reaming that gave relatively poor results across the width of our legs. We decided to cut down significantly on assembly time and fabrication time by switching from bronze bushings to self-aligning spherical bushings – that way, even if we were a little off during fabrication, jointed assemblies would still fit together relatively seamlessly. Check out this album of our process for making bushing bosses and welding them on to our assemblies accurately:
%%wppa%%
%%slide=16%%
All that said, we now have a full robot’s set of thighs, knees, calves, and compliant links welded together. Pieces still need some finishing work before they’re 100% done, but most of the link segments are there. Now, it’s time to move on to making hip sections and the chassis, so that we can start final assembly!
Also, one final bit of good news – we’ve received our custom cylinders from Dalton Hydraulics! We ordered these two months ago, and asked for a custom build so that we could have exactly the output ports we wanted on all cylinders (-08 SAE, to match our valves) and very tight tolerances on the cross tubes on the front and back of the cylinders so that we have as little backlash in our joints as possible.
That’s it for now – look for thigh links next, and the start of chassis construction!
]]>At the start of the year, we worked pretty hard to build out both the hydraulic powerplant for the final robot and a CNC Plasma Cutter (that would then be used to cut parts out for the robot’s legs and chassis). Both items took us awhile to complete, and took more energy than we were hoping, but we wrapped them up around May. Since then, we’ve been working hard to finalize our leg design, get the links analyzed for overall strength and manufacturability, and create manufacturing and quality control processes from scratch to ensure that we build as robust a robot as we can. If you’re interested, you can check out an example of the kinds of work instructions and processes we’re creating here.
We’re happy to announce that we’ve taken on two new sponsors recently, which have drastically helped our design and process; the first was Tompkins Industries, a global hydraulic fitting and hose supplier. We worked with them to design and supply custom hose assemblies and hydraulic fittings for all of the parts in the hydraulic powerplant, and will soon be working with them again to design the hose runs and fittings for the legs of the robot. The second sponsor was AST Bearings, a global supplier of bearings and bushings of all different shapes and sizes. We were having a lot of trouble coming up with cost-effective ways of designing and fabricating joints with rigid bushing assemblies that had to be concentric across big weldments made up of a lot of individual thin plates; in order to solve that fabrication problem, we worked with AST Bearings to source low-cost spherical plain bushings for all of our joints, meaning that Stompy will be much easier to weld together (for both us and any novice fabricators that follow in our footsteps), will be much easier to assemble in the short term, and will require less maintenance in the long run.
As we mentioned above, we’re now solidly in the build phase of the project. We’ve decided to start by building the lowest-stress parts of the leg first in order to get all of our fabricators on the same page; we’re building the “calf” link, as we call it. This is the link that touches the ground, and is suspended from the rest of the leg via a four-bar linkage and shock absorber. This is what 8 calves (one to screw up, one for a ‘spare’ leg, and 6 to put on the robot) worth of parts look like when the parts come out of the CNC Plasma Cutter:
All 184 of those calf parts have to have dross removed from them, and they have to be ground down and cleaned wherever we plan on welding so that we don’t get contaminated welds. We expect that the legs represent at least 1,100 person-hours worth of fabrication, all told, without including assembly onto the robot itself or building the chassis. Needless to say, there’s a tremendous amount of work ahead of us, and we’ve decided to ask for help to get it all done in a reasonable amount of time.
If you’re in the Boston area, have experience with steel fabrication, and would like to join Project Hexapod, we’d love to hear from you! We’re looking for somewhere between 4 and 8 new team members who can step up and help us build this giant robot over the coming months. If you’re interested in learning more, please check out our application for new team members here: http://www.surveymonkey.com/s/W23NKBD.
That’s about it for now! We’ll be posting lots of pictures of our build process to our Facebook page if you want to follow us there, and we’ll be updating again soon with discoveries we’ve made during the build process.
]]>We’re kicking off our triumphant return to communication with a recap of what’s been going on with the Hexapod design process. Today’s recap topic is the most visible change to date: the new leg design.
When the proto-leg was designed, it was intended for two purposes:
This was largely a success. During assembly and testing of the proto-leg, we identified a list of challenges (you may remember the series of posts on tuning the system to reduce yaw oscillation, as well as the process updates on mounting hydraulics and upgrading cylinders). There was also discussion about tolerancing to minimize backlash, lessons learned about welding, and many other things which tied into the main difficulty with the leg, which was assembly, assembly, assembly. Proto-leg, you were no piece of IKEA furniture to easily snap together, but you’ve served us well. We’ll cherish the memories.
Once both the prototype leg and the hydraulic power unit came together, the team turned to designing a new leg. Given the list of challenges we identified, we ideated and evaluated a series of designs to combat any assembly and runtime difficulties. Then, sticking to our original heuristic of maximizing leg strength vs. weight, we began to spec componentry and make CAD models of the production legs. To speed up this process, we chose a design which allows us to optimize our toolchain by including better FEA (finite element analysis), earlier on.
In the end, we chose to spend money to save time; by choosing to use spherical bearings on all of our joints. Spherical bearings at either side of a joint allow for the pin passing through to self-align, saving the team both tolerancing woes and removing the need for one of the last favorite parts of the proto-leg assembly process: using a 10 inch reamer to account for the misalignment caused by deformation resulting from welding. The process is as uncomfortable as it sounds, in case you were wondering.
A huge shout out is in order to our newest sponsor, AST bearings, for giving us a great deal on some extremely nice spherical plain bearings. The bearings we got were so nice that we’re now using SPBs not only in joints, but also for the hydraulic cylinder attachment points, as well as the shock mounts for the compliant link. Thank you, AST, for supporting supporting open-source robotics!
Once this design was set, we began to optimize the leg for torsional stiffness and ease of assembly. The resulting design is wider than the original leg, but not significantly heavier, due in part to the removal of the internal bracing on the knee and thigh links (which we found wasn’t doing much). This allows us to mount a larger, stronger thigh actuator to better allow the robot to stand. We’re also now able to put in provisions for both a single push-pull, or two antagonistic cylinders on the yaw link, giving us multiple avenues for solving the yaw oscillation issues in hardware (in addition to our software solution). In lieu of bracing, the leg takes its strength from the much larger surface area of the steel on the sides of the leg, which acts as a load-bearing skin.
Back to assembly: the new leg design adjusts tolerances on the slots and tabs of the sheet plate to suit the characteristics of our plasma cutter, so the production leg can be jigged up for welding faster than the proto-leg (we’ll tell you how welding the leg goes when we try it). Finally, the new leg just looks cooler. Sci-fi nerds take note: the increasing resemblance to Protoss Dragoons, however unintentional, is considered a plus.
Thanks for reading! For those among you who saw something referenced, but not explained, feel free to asks questions in the comments, and keep your eyes open for our follow-up posts on FEA/mechanical design process, the new electronics for the legs, and hydraulic topology and installation.
]]>It’s happened again… we have failed to keep posting updates in a timely manner. Many apologies. I’ll try to catch us up a bit:
On the control side, there was a huge amount of progress in April. The system is a huge challenge to control. Keep in mind that in the testing below, we are moving at roughly the maximum speed allowed by our electric lab pumps. When running off the real HPU, the leg can move about twice the speed.
On the mechanical front, final leg design and FEA is in progress. Many of the shortcomings of the prototype leg are being addressed, including:
The Protoleg has bushing alignment issues. We got around this through a tedious and sketchy hand-reaming process on every joint axis on Protoleg. The process accounted for a significant portion of the time necessary to assemble the leg. In the revised leg design, the joint bushings will be mounted inside spherical bearings to soak up misalignment. This will make for much more even wear of the bushings and hopefully a longer-lived robot.
%%wppa%%
%%slide=10%%
Also changing in the legs is the means of attachment to the piston. On Protoleg,the piston attachment pin spans the entire width of the leg. On the revised design, tabs have been added to allow for a much shorter pin. Shorter pins means easier alignment during assembly and less pin flex during operation.
The revised leg design is also about 20% wider than Protoleg. This increases the strength of the leg significantly for the same amount of weight. The new leg design is undergoing FEA and detail design right now, but here are some preliminary renderings of the new yaw and thigh members.
%%wppa%%
%%slide=11%%
All of our electronics for the entire robot are also in fabrication right now. The designs on the Protoleg have performed admirably and the simple potting-and-hardwire system has proven very robust.
%%wppa%%
%%slide=12%%
We’re pushing forward on all fronts. It’s taken much more time than we anticipated to get all the designs finalized, but we are almost ready to begin construction in earnest. More detailed reviews of all designs will be posted as they are finalized, but hopefully this post provides a good overview of things we’ve been working on.
Thanks!
]]>We worked with Tompkins Industries to get hydraulic fittings and hoses in-house to complete the power unit, and spent our week doing hydraulic assembly. In this update, we’ll show you our progress so far, explain a little bit more about the hydraulic system, and teach you how to assemble hydraulic fittings into a working system. Check it all out here:
-Gui
]]>I’m going to detail a subtle problem we hinted at a few months ago. To understand the problem one needs a basic understanding of the system layout and a few key concepts, so I will quickly review.
Each actuator in the leg has a control valve attached to it. The control valve is opened by an electric current. In an ideal world, a constant electric current will result in a constant size orifice through which hydraulic fluid will flow. The simplified topology is displayed below.
The symptom is very interesting and counter-intuitive; when a control valve to an actuator is opened with a constant electric current, the system goes in to a self sustaining oscillation. This can be extremely dangerous since the oscillation in question is a 350 lb leg swinging around!
It took us a while to figure out exactly what was causing the oscillations. A poorly tuned control loop in software can easily cause similar symptoms, so a lot of time went in to tuning our control loops trying to get the oscillations to stop happening before we discovered the oscillations were implicit to the system and occurred even with constant valve command.
Why does this happen? One would naively expect that a constant current to the valve would result in a constant orifice, which should give a smooth motion at a constant speed at the actuator. When you turn the handle of your faucet, you open a constant size orifice from the water mains to your sink, and a constant flow results. You would be surprised if you turned on your sink and the water came out in spurts.
There are two concepts you need to understand to grasp these oscillations. The first is the concept resonance, the second resistance or damping. Click on the words if you want the wikipedia articles, but I’ll try to give a shorter, application specific explanation below.
How many of you have played with one of those little springy doorstops?
In the mechanical paradigm, a resonance is created whenever a mass is attached to a spring. The mass and spring are both forms of energy storage – the mass stores kinetic energy in its motion, the spring stores potential energy in its deflection. The resonance is simply the mass and spring passing the energy back and forth to each other. All mechanical resonances behave this way – from guitar strings to pendulums to swaying bridges (gravity provides the spring in pendulous cases).
Why does that little springy doorstop stop moving? The doorstop has many forces acting on it, but for the sake of simplicity let’s pretend only air resistance is acting on it. When you move through the air, the air pushes against you. If you move forward, air pushes backwards. So the air is always pushing against the motion of the door spring, taking a little bit of energy out of it every cycle as the end swishes through the air. The air acts as a damper on the doorstop. Since the air is taking energy out of the doorstop resonance, we would say it is a positive resistance/damper.
Changing the amount of resistance changes the behavior of the resonator. Let’s say we raised the resistance on the doorstop by putting it underwater… the doorstop would probably swing back and forth far fewer times, as energy leaves the system much faster. What if we put the doorstop in a vat of syrup? The doorstop would probably not resonate at all, it would just slowly swing back to the center position. These are both cases of increasing the resistance.
What would happen if we changed the resistance from positive to negative? That is, instead of the air pushing against velocity, it pushed with velocity. It’s a contrived example, but you can intuit what the behavior would be – instead of the oscillations diminishing over time, they would grow until some other factor started limiting them. In the doorspring case, this might be when the end of the spring starts hitting the walls. The controls guy would say “the door spring has entered a limit cycle“.
This is oversimplifying somewhat, but think of the Protoleg like a giant springy doorstop. It has mass (about 350lb of it) that can store energy in its motion. It has a spring at its base (the natural springiness of the steel, the expansion of the hydraulic hoses…) that can store energy in its deflection. That combination of mass and spring creates a natural resonance. This resonance also has inherent damping (mechanical friction). If the system is just sitting there and you shove the foot in one direction, the foot will bounce off its joint stop, bounce back off the other joint stop and settle. The natural resonance dies out after 1-2 cycles. The controls guy might say “in this regime, the leg is positively damped”.
If the valve just acted like a small hole through which fluid flowed, it would still be a positive resistance in the system, pressure opposing flow. But the valve is more complex than that and has a flow profile that looks like this:
This is a chart from the valve manufacturer showing flow (y axis) vs pressure (x axis) when the valve is commanded with a constant electrical current. Notice that for a large portion or the graph, the slope is negative. This means that in those portions of the graph, more pressure you put across the open valve, the less flow you get through it. This creates a large negative resistance that causes leg oscillations to amplify until they enter a limit cycle. Yikes!
Engineering is all about tradeoffs. If we had infinite money we would probably just replace our valves with a much more expensive type that doesn’t have an implicit negative resistance. But (a) we don’t have infinite money and (b) super expensive solutions are antithetical to the mission of Project Hexapod. The simplest, cheapest and fastest solution for us is to just add a positive resistance in to the hydraulic circuit to cancel out the negative resistance. This can be accomplished by just sticking a small hydraulic orifice in the circuit. We’ve been using orifice disks mounted in the bottom of our valves, but we’ve had problems with them floating out of place since we mount our valves upside-down, so we are switching to orifice fittings that go on the end of our hoses that can’t float out of place.
This has the down side of reducing the maximum output power of the joint, but it’s a relatively small price to pay for a more controllable system. The video below shows some preliminary testing with and without an orifice in place. Note that the orifice is slightly undersized in this video.
Thanks for reading, and thanks again to our sponsors at HydroAir and HydraForce who have sent us several rounds of hardware to help us experiment with solutions to this problem.
]]>