11-24-2006
Been a while, but I have not forgotten this project. I recently got the motion deteciton code for the camera all working, then promptly fried the camera while trying to hook it into the robot's power system. Oh well. No big changes in a while. Changes will begin when I finally get my CNC Mill working correctly, and can make an analog converter board and a proper power supply.
2-20-2006
Untill my sensors arrive, I've been working on software.
While wandering the web, I came across Andy Lippitt's page. His project is very similar to mine, with the exception that he is farther along with his than I am. His software and hardware are similar to mine to such a degree that I could almost just use his software without modification. As such, I am shamelessly using one of his ideas. :-)
One of the differences between his and mine is that he is currently switching to digital OpenServos. That's a great idea. I think I'll take it too :-). The OpenServo project sounds very cool. OpenServos would solve many of my problems, such as ground contact detection and determining actual servo position. It also fits in wonderfully with my other plans to set up my sensors with I2C.

Andy has created a very nice control that uses DirectX to render the Hexapod's current state. I have modified it enough to work with my software. It's a very nice control, and since I know nothing about DirectX, it has saved me tons of trouble. Thanks Andy!
Once my code has reached a more stable state, I will put it up so that others can benefit from it as I did from Andy's.
2-16-2006
Let's discuss sensors.
I need to give this robot some way to detect it's environment. Hopefully before it falls down the stairs and gets busted into little pieces. To that end, I figure I need to add proximity sensors. I've ordered several Sharp GP2D12s.
 |
These sensors are capable of giving range to any object up to 30 cm away. I'm plannin to put them between the robot's decks, facing outward from each side (between the legs).
They are analog sensors, so I will have to do something to convert the analog values they give to digital. Maybe I will create some kind of analog to digital conversion device. I shall call it..... The ANALOGDIGITOMATICALIZER!!! Or, I could just buy some A/D converters. :-) I will need to design and build a custom A/D board. And before I can do that, I will need to actually settle on an interface spec. I'm thinking that I will go wi.th I2C. But before I can really do that, I will have to get together the necessary hardware to do I2C development. |
 |
I also ordered a camera for the bot. The camera is a standard 802.11 webcam. For the moment, my plan is to use it simply so I can see where the robot is going when it's out of line of sight.
For the future, I'm thinking image recogniton. |
I have discovered what was causing my robot to slowly turn left. It turns out that some of the screws were loose in the leg that it was pulling towards. After tightening up all the screws in all the legs, things work much better. It walks smoothly in all directions now.
Robot walking smoothly (1.74 Mb)
2-12-2006
I now have it translating in all directions. It can translate nicely and evenly. The only catch is that it seems to slowly rotate to the left (counter-clockwise) whenever moving. It's kind of odd, and I'm not sure what causes it yet.
Now, I really need to create a better GUI for it. so far, it's just been buttons and sliders to test functionality.
I suppose I ought to talk a bit about the software. It's all written in C#. It's all highly object oriented. Here's a quick breakdown:
- Servo Class - Represents the servo motor. Keeps track of pulse widths, the max and min of the axis, etc...
- Joint Class - Uses one servo object. Similar operations to the servo class, but all in degrees.
- Leg Class - Uses three joint objects; one for the hip horizontal, one for the hip vertical, and one for the knee. Sets up the joints with the apropriate limits so the servos don't run up against their mechanical limitations. It also does some higher-level stuff to allow the leg to be commanded to an (x,y,z) point. Each leg has it's own axes, with the origin at the horizontal hip's center of rotation. When a leg is given a point, it automatically does the inverse-kinematic (IK) calculations to determine what angles to give the joints. All seems to work pretty well.
- Body Class - Uses six leg objects. This object provides all of the high-level operations. It's public methods include such operations as body rotation and translation. The body class handles gait generation for walking. It also takes care of communicating with the actual robot. I'm thinking I will refactor the communications stuff out into it's own object. We shall see.
2-10-2006

In this picture, the robot is up on a stack of boxes while I try to get it walking. As you can see, I got my WiPort working. It's an incredibly cool device. I can now control the bot via 802.11b. It is actually manufactured by Lantronix, but WiBots produces a very handy breakout board that gives access to all the ports (2 serial, I2C, ethernet, GPIO). So far, the default firmware it comes with has served my purposes, but I suspect I will eventually end up tinkering with it.
The WiPort represents my decision on the "onboard/offboard" computing dilemma I mentioned. I'm gonna put all high-level stuff on a regular computer. I will probably end up putting some simple stuff on the WiPort, such as motor comms.
Got it walking with a variety of gaits. Forward only so far. I'm working on getting it to translate smoothly in any direction.
Here are some videos of my hexapod moving:
1-29-2006

Huzzah. Today my servo controller arrived. You might notice
my innovative and entirely original battery system. Honestly! I planned it that
way! Nooooo, I didn't just go to Home Depot and buy the cheapest thing I could
find then hack it to bits with a Dremel tool........ Now, all that's left to keep it tethered is the serial cable. I'm thinking that I will see about using a WiPort to control it.
I've been giving some thought to the control archetecture. I have yet to decide if it's going to have a brain onboard, or if I will just do all the processing on a regular computer. The total autonomy of an onboard brain is cool, but it would increase power drain, and be more expensive. Using a computer would also allow me to do significantly more complex tasks, like video processing and speech recognition.
Decisions, Decisions.
1-26-2006

Indicated in this picture is an issue I noticed while assembling my hexapod.
While assembling the legs, I discovered that if I were to put a screw in the
hole on the right, it would critically constrain the leg's movement. As a
result, for now, I have left the screw out.
My assembled hexapod.
Another note: while assembling, the instructions indicate that three of the legs
should be built as mirror images of the others. It seems to me that this is a
bad idea. When you do this, the servos on three of the legs rotate in the
opposite direction of the servos in the other legs. For example, if the knee
joints are all commanded to, 45 degrees, then they will not all move in the same
radial direction (out), rather half will moe one way (out) and the other half
will move in the opposite direction (in). This can be fixed either in hardware
by making all the legs the same, or in software, by reversing the directions
sent to those three legs.
My cat, derisively inspecting the new invader
Note: If you are using a browser that does not like CSS2 (such as Internet Explorer < 7),
then this page will not render correctly for you.