1. ## Programming leg movements

My entry from a few days ago disappeared, must not have gone out correctly. Anyway, I'm off of night shift and am getting used to sleeping during the night again.

I got a new software routine developed where I send the femur (lift) motor the desired angle and the femur moves to that position. I mapped out all the angle ADC values from 35 (minimum angle) to 155 degrees (maximun angle) in 5 degree increments. I plotted the results and they aren't exactly linear. I was unable to develop a mathmatical formula that followed the observed values close enough so I ended up using a single dimension array of the 25 sets of data. Using array index posion 0 as equivalent to 35 degrees, I mapped the remaining indexes to their corresponding angles. I assume the ADC values between the observed values are basically linear so I use a math routine to extrapolate the additional values. Experimentation showed quite a bit of over shoot so when the motor gets close to the desired value I slow the motor down which gets a lot closer to the desired position. I still have some tweaking to do to get the value even closer.

The same routine can be used on the tibia (kick) motor, I only have to get the specific ADC values for that motor. The coax (swing) motor will be a totally different item since it uses a position encoder instead of a pot for feedback. It also has a limit switch that identifies the travel limits. I hope to get both of these motor run routines completed this weekend so I can start running the leg through a series of repetitive motions and look for any design issues that might need addressing. I already found screws that tend to want to loosen.

I'll post the motor run routines once I'm done, I'm sure someone can review them and suggest improvements!

Bob

2. ## Programming leg movements - tibia

I was able to use the same routine I developed for the Femur movement on the Tibia movement. The only difference is the Tibia uses it's own set of ADC values to calculate angles. I am able to use the PST to input angle values to both actuators and the leg responds correctly.

I started working with the Coxa control but ran into some issues where the position encoder doesn't appear to be sending the HB25 any signals. I've successfully used this combination before so I'm not sure what I'm doing wrong yet. Today I'll substitute another position encoder and see if that makes a difference.

Once the motor movement base routines are done I plan on starting the leg Inverse Kinematic calculations and trying those on for size. I've decided to use a wireless PS2 controller to communicate with the robot initially so I have to pick one of those up soon also.

I'm slowly advancing on the project, it's a bit different than other robots I've built where the construction took a lot less time and programming is where the most time was spent. I still have 6 more legs to build and a body, there are enough changes in the CAD drawings that the test leg won't match the final design! Oh well, that's what a hobby is for, a place to put excess cash before you waste it on something else!

Bob

3. ## Programming leg movements - Coxa

I got the Parallax Position Encoder to work, sort of..... First item I noticed is that the encoder has a 5 volt requirement and I was powering it via the QuickStart board at 3.3v. That should be ok but the 1k resistor in the signal line was too much, bypassing the resistor allowed the encoder to start the motor. Using the MoMoCtrl.spin object I got absolutely no response so I switch to the Wheel_Controller.spin object instead. The motor would start and then continue to run in fits and starts. I found that if I touched any part of the robot it would start back up on its own. I added an additional ground connection to the encoder and that stopped that symptom and the run forever symptom. Now it runs but the time it runs isn't consistent and there doesn't seem to be any speed control. I gave it up for the night and started searching for some simple spin examples using both of these objects, so far no luck.

I'll try again tomorrow night, maybe I'll see something I missed. If I can't solve this I'll have to re-design the gearbox to include a potentiometer feedback mechanism instead (it would save the price of the encoder but I don't like to give up). Suggestions are welcome!

Bob

4. ## Programming leg movements - Coxa

I figured out the issue with the Position Encoder is that it needed a supply of +5v through the signal line. Once I did that I got the MoMoCtrl object to work. That was the good news; the bad news is that the smallest unit of measure I could send was "5" which isn't fine enough for accurate positioning. Even if I could get it to move "1" unit, that would still be too much.

That leaves a couple of options; first is to increase the amount of gear reduction which would allow finer positioning; the other is to eliminate the encoder totally and set up the Coxa motor like the other two actuators. This idea adds a multi-turn pot. connected into the gear train with the motor using a HB25 motor controller run directly by the Prop board. The program to run the motor would essentially be the same one that controls the Femur and Tibia actuators. I'm leaning towards the latter solution as it is the simpler idea to implement and test. I only need to drill one new hole in the gear train and use one of my existing gears to connect the pot to the gear train. I used a 10K 20 turn precision pot to check for clearances, it appears that there is sufficient space to add the pot above the gear train plate. Calibrating this setup could be interesting.

I'll revisit the CAD drawings and make the changes to modify the existing setup. Then I can test and see if the level of control needed is possible. It's too late tonight to get started so that will be tomorrows project after work. This is one of those road blocks you occasionally run across when designing something new. Unfortunately it took a while to recognize that the current design has this kind of an issue. I still plan on an 'endurance' test of the leg once I get the basic program routines sorted out, that should reveal any other weaknesses.

Bob

5. ## Re: Programming leg movements - Coxa

Still running into encoder issues, took out a new encoder and got the same results as with the original. I'm using MoMoCtrl.spin to control the encoder with a very simple Program to control the unit. Basically it starts the encoder and then sends the GO_Distance(1,10) command. I thought the encoder would only energize the motor until it had 10 counts on the plastic vanes but it continues rotating for several revolutions until it stops (larger distance values have proportionately longer run times). Also, I can't get it to work with any distance value of less than 5 (even there it rotates several times before stopping).

As it works now it is totally useless for what need but I can't believe that this is normal operation for it. I tried several variations in the code but couldn't get any different response - other than when the motor gets to the stoping point it then starts oscillating back and forth, had to add a pause and reset command to stop that behavior.

I hate to give up on this but I've run out of ideas and don't know what to do next. Does anyone use the encoder, and what has been your experience? Is there some simple sample code in spin that I can try out?

Thanks for any help! If I can't figure this out by the end of the weekend I'm going to switch to using a pot to get position info instead.

Bob

6. ## Re: Programming leg movements - Coxa

I contacted Parallax Tech support but haven't gotten a reply about the position encoder. So, over the weekend I put in a precision 20 turn 10K pot that connects to the first stage of the gear train via another gear. I modified the existing Femur and Tibia movement code and got the pot wired up to provide feedback through the ADC. This worked pretty good except I wasn't getting consistent angle movements. I could enter 90 degrees and the Coxa would have an actual angle over a 15 degree range around 90 degrees. This was due to too much backlash in the gear train, the motor would spin the gears and the pot before any actual leg movement was observed.

The answer to this is to put the pot gear on the leg gear so the pot doesn't start rotating until the leg actually starts moving. Now to figure out a interference-clear location to put the pot and drill a new hole.

The mechanicals are getting closer to being done, still figuring out the leg impact sensing setup, just about ready to commit myself to machining a new test block. The primary body plates have been drawn on the CAD system, I have to build a fixture to machine them since they are going to be 14 inches across and too big for the Y axis on my mill. Plus, now that summer is here I have to make time for my main hobby of shipwreck diving in Lake Michigan and Huron! I dive a rebreather on old shipwrecks that are 150 to 250 ft deep. That takes priority over robotics on the weekends!

Bob

7. ## Re: Programming leg movements - Coxa

I know what you mean. Spring and fall are my backpacking and camping seasons and not much else gets done in between. This summer I want to start fixing up the shed to make a finished shop out of it so that's going to consume a good deal of time as well. Sounds like a lot of fun , you just need to make an aquatic robot to go with the hobby!

8. ## Re: Programming leg movements - Coxa

Had to cancel today's dive, thunderstorms in the area.

Working on the Coxa gear train instead. I was getting some binding in the gears and when I disassembled the gears I found one of the nylon gears had several teeth that were severely damaged. I found a cheaper gear manufacturer and ordered several new gears. The problem is that they don't match the existing gears so a new gear train has to be made up. At least now I'll re-design it with room for the potentiometer.

Bob

9. ## Re: Programming leg movements - Coxa

New carbon steel gears arrived. I re-calculated the hub locations and now I have to update the CAD files so I can do a test cut on the mill. Usually I have to tweak the positions a few thousands of an inch to get everything to mesh right so there will be at least one other test gear train built..

Bob

10. ## New leg down and impact sensor housing assembly

I spent the last couple of days machining the sensor that registers when the leg is down and when the leg impacts something. I've gone through several designs, machined and tested 3 of those. I finally have a design that seems to work mechanically. I took photos of the build but I couldn't find the JPGs after I moved them from the camera to the computer... The only thing I can find is a short video I ran of the test after I put it together.

Basically the sensor consists of a square housing that contains a 25lb spring and a round bar containing 3 large o-rings at one end and connecting to the lower leg section at the other end. One o-ring is used to center the leg in the housing and the other 2 orings are used to push against a flexible linear potentiometer that is mounted inside the housing.A bolt holds the whole assembly together and allows about .2 inches of spring travel. The head on the bolt is used to actuate a micro switch. Any impacts by the lower leg cause the double oring to push against the potentiometer resulting in an output value between something >0 and <10K. The actual value will indicate the direction the impact comes from. When the lower leg is solidly planted on the ground, the inner assembly moves upward and the micro switch actuates indicating ground contact. A twin oring setup is used to ensure the potentiometer actuates both in the unloaded (leg up) and loaded (leg down) positions.

Here is a link to a short video showing how the mechanical parts work. Glad to finally get this out of the way... Now I can start working on the gear train again and figure out how to mill the 2 base plates for the hexapod body!

http://youtu.be/jJ-TcaN6p8M

Bob

11. ## Re: New leg down and impact sensor housing assembly

Go Bob Go!

You have made a lot of progress, Thanks for posting.

-Tommy

12. ## Re: New leg down and impact sensor housing assembly

I'm really enjoying watching you design this stuff up. I don't quite get the internals of how that force sensor works but that's pretty niffty to be able to determine how the leg has landed.

Can't wait to see what this behemoth looks like when completed!

13. ## Re: New leg down and impact sensor housing assembly

I finally found the photos I took of the machining of the impact housing. This should make it clearer how it works mechanically.

The first photo shows what the force resistor looks like and the second photo shows the resistor glued inside the housing. The 3rd photo is the leg attachment, the o ring on the far right is used to keep the lower leg centered while the other 2 o-rings that are together are used to provide the force used to actuate the force resistor. There are 2 o-rings so that the sensor can be actuated when the leg has weight on it and when the leg is up. The 4th photo shows how the pieces fit together mechanically. The washer is a hardened washer to prevent the spring from damaging the aluminum housing. The spring cavity is sized to only permit about .2" of travel before the leg attachment pushes up against the housing. The bolt is a hardened bolt so it won't bend easily. The bolt head resides in a shallow cavity (not shown) and is able to move up and down under spring tension so it can actuate the leg down micro-switch lever. The 5th photo shows everything put together. The black connector is the force resistor connection and the screw in the center slot prevents the leg attachment from rotating internally. The last photo is the assembly bolted into the lower leg.

Hopefully this will give a better idea on how everything fits and works

Bob

14. ## Re: New leg down and impact sensor housing assembly

Very cool. I wasn't getting the resistor tape and how that was registering the pressure but now that I see the arrangement it's obvious. Really neat design!

15. ## Re: New leg down and impact sensor housing assembly

Clever, Bob! I used a softpot in a robot bumper application at http://forums.parallax.com/showthrea...=1#post1009763

16. ## Re: New leg down and impact sensor housing assembly

Ohhh... I like that idea too! My little stepper bot doesn't have the guts to really mash something too much. I've been trying to figure out two issues, floor contact (more importantly, the impending loss there of -- think stairs to base and certain death) and bump sensors. There is a LOT of stuff around the IR's miss completely.

17. ## Re: New leg down and impact sensor housing assembly

Originally Posted by photomankc
There is a LOT of stuff around the IR's miss completely.
Agreed. IR doesn't catch everything. Check this maze video (someone else, not me) and the cruel little "stick" of a wall in the middle of the square. It doesn't hit it, but i's not clear if the robot really senses it or not.

18. ## Re: New leg down and impact sensor housing assembly

Got CAD files updated and the CAM instructions are ready for the CNC mill. I'm planning on today machining the gear train assembly for testing. Camera is ready and photos to follow the progress.

I liked the bumper idea, how did that work out for you? My sensor is well protected and the o-rings should prevent damage. The only thing I worry about is that the leg isn't going to be "stiff" enough, I may have to add an additional centering o-ring where the leg enters the housing. Testing and time will tell!

It's off to the shop!

Bob

19. ## Re: New leg down and impact sensor housing assembly

Bob: How much do you figure your bot will finally weigh? Your parts look plenty beefy, weight creeps up fast. When I built my little robot arm, I became acutely aware just how significant the weight of the servos and arm structure becomes. The usable payload at the end of the arm is a tiny fraction of the total load on the shoulder & elbow servos. Counterspringing can help. Have you considered that for your bot?

20. ## Re: New leg down and impact sensor housing assembly

Originally Posted by erco
Bob: How much do you figure your bot will finally weigh? Your parts look plenty beefy, weight creeps up fast. When I built my little robot arm, I became acutely aware just how significant the weight of the servos and arm structure becomes. The usable payload at the end of the arm is a tiny fraction of the total load on the shoulder & elbow servos. Counterspringing can help. Have you considered that for your bot?
This is going to be a pretty hefty beast! Right now each leg weighs in at around 20 lbs x 6 = 120 lbs. the body will add 10-15 lbs and batteries another 35 lbs. That totals up to around 170 lbs! The actuators are pretty hefty, each can move 100 lbs so I'm not too concerned about weight at this time. Also, the design is set up so that power isn't needed to maintain a position which reduces the needed power requirements. I didn't design in speed for this, it won't go breaking any records in that department but it should look cool!

Spent most of the day in the shop, machined 4 brackets so far. Ended up breaking 2 6-32 taps (Grrrrrrrr!) and had to go out and pick up some more taps. Luckily both taps broke in the same part so I only have one to make. It'll go faster this time around since the CAM program has been tested and verified.

Back to the shop, more tapping to finish and creating a shaft for the gear train on the lathe! Photos to follow.

Bob