Skycraft Surplus was a regular weekend stopping place when I first discovered it back in1977. Then I was stationed in Orlando from 82-85 and it once again become a regular stop. I dont visit as often since I'm in Michigan but I see their web store has grown quite a bit. I'll have to check in regularly to see what goodies they have.
Tonight I'm going to sort through my new treasures and figure out what to do with them!
Still working on the design for monitoring leg down and leg impacts while it is swinging or extending. This turned out to be harder than expected to create a mechanical design with all the required elements in one location. I'll break these two issues down into the design specs, the proposed solution for each and the remaining issues to be solved.
The basic design concept for monitoring leg down conditions is a small switch located at the top of the leg such that when the leg touches down the switch activates. The switch has a limited travel that has to be taken in account of in order prevent the full weight of the leg against the switch. I also need a reliable means of ensuring when the weight is off the leg that the switch deactivates. I am using Bellville washers to provide the 'spring' action that deactivates the switch when the leg is lifted. By stacking these washers I can control the amount the leg moves very precisely. Each washer takes about 75 lbs of force to flatten it and by placing several in series I can control the total distance (each washer is .032 inches tall and flattens to .022 inches with 75 lbs of force - stacking ten serially would give a movement of .01 x10 = .1 inches). The final travel distance will depend on the actual switch travel. This part of the design is fairly straight forward.
The next design spec is sensing when a moving leg encounters an obstacle. There are many possibilities from sensing motor current, putting micro switches on the lower portion of the leg or force sensors. My plan is to use force sensors. Instead of placing the force sensors on the lower section of the leg (cost was a factor because long force sensors are not cheap!) I am going to use leverage to activate the sensors. Imagine holding a broomstick vertically a few inches down from the top of the shaft, this is the pivot point. Any movement of the stick results in a smaller movement of the stick above the pivot. I want to place 3 small force sensors at the top of the leg shaft, each sensor located 120 degrees apart, to sense encounters from any direction (this can also be used to determine the location of the obstacle). Force sensors can be easily damaged so I need to limit the amount of force against them. To do this I am using the small adheisive rubber bumpers used for hanging pictures on the wall. They are small diameter and fairly soft and as they compress against a sensor they will provide a consistent force without damage. The pivot point for the leg will be located just below the sensors. I am using a o-ring around the shaft that slides into the upper leg assembly. This gives a small amount of movement, is self-centering and keeps debris out of the sensor housing.
The problem now is combining both systems into the same location where one system moves up and down and the other moves from side to side. The force sensors are impacted by the up and down movement of the leg. I'm starting to look at a new sub assembly where the force sensors are not attached to the upper leg assembly but are mounted in a moveable piece that moves up and down with the leg. This will require fairly precise machining since the side to side movements are fairly small. Also there is a need to figure out how to attach to the force sensor leads inside the upper leg housing.
I've drawn out several ideas but there are limitations on how big this can be and what I can afford to do! Today I'm drawing the CAD drawings based on the measurements I have taken, hopefully I can start machining parts this coming week. This is turning out to be the single most complex piece in the design and there will be a substantial amount of machining required. I'll post photos as soon as I start getting things together
Between vacation and work I haven't had as much time to devote to the project as I planned. Also figuring out the leg down sensor and collision sensing assembly was not going where I wanted it to. After building and testing several options I ended up with what turns out to be the simplest design of all.
The photo above is the basic internal assembly made of 1 inch aluminum. A oring groove is machined in one end for at 7/8" ID and 1/8 diameter medium hard oring. This oring is to keep debris out of the assembly and it also serves as a soft actuator for the force sensors.
The next photo is a delrin housing for a micro switch. The actuator lever is positioned above the block so it actuates the switch prior to it being pressed all the way down. This is to protect the switch from breakage.
This next photo is of all the parts for the leg down sensor assembly. The far left component is the actuator with the oring installed. The far right block is a 1.5" square by 2.2" long aluminum block that is machined such that the actuator can only move 0.25 inches maximum. The bolt goes in the housing and the hardened washer is used to protect the soft aluminum from the spring. The spring is 1" long and takes 25 lbs of force to compress it. When the assembly is bolted together the bolt is tightened until the o-ring is fully within the housing. At this point the spring is partially compressed and provides the return force when the leg is lifted. When the weight of the robot is on the leg, the spring compresses and the head of the bolt rises. The bolt head actuates the lever on the switch which is bolted to the top of the assembly. This actuation point is adjusted by how far the bolt is tightened into the actuator. What isn't shown here is a slot on the side of the housing and a small hole in the actuator just above the o-ring. A roll pin is used to prevent the leg assembly from rotating and possibly changing the settings.
The collision force sensors are mounted in the main housing across from where the oring sits when weigh is off the leg. When the leg moves and if an object is touched, the o-ring is compressed on that side of the housing causing the force sensors to change their resistance. This is converted to a voltage change and read by a ADC. The microprocessor can then react to stop leg movement in that direction and evaluate the next move.
The assembly block looks a bit crude in this photo because I had to use a scrap block of aluminum for the housing and it was just barely long enough for the job but good enough for testing. The next one will look much better!
I'm ready to start wiring up the motor controllers and start testing all the individual parts so they can be integrated. I want to run a stress test on the leg by having all three motors continuously operating for several hours to determine any mechanical weak spots, current draw (to figure out battery sizing), and make sure nothing fails or falls off! Then it will be time to start really diving into Inverse Kinematics (time to brush up on my math again) and get some useful motion out of the leg.
Thanks for the complement! I'm not sure that I have much in the way of design skills, just a lot of perseverance.... Usually I mentally design a part, then commit it to paper and try to figure out all the dimensions. When thats done I draw it in my CAD application and modify as needed. The CAD drawing is converted to G-code so the CNC mill can make the part. Once the part is machined, about half the time I end up scrapping it because I forgot something when I try to install it! Usually I get it pretty close on round 2. The prototype leg is mainly made up of round 2 parts.... I have a whole bin of scraps right now, they mainly come in handy for experimenting.
Since everything is in CAD, it's fairly easy to modify the parts with fixes. It is fun to see something that just started out as a cool idea get created into a workable part or assembly.
My last project before the robot was designing and building underwater housings for a heads up display that could handle 400+ foot depth. That was a lot of fun and I learned a lot of ways not to do it!
Not too good of a night. I was testing all the motors and limit switches and managed to fry the prop demo board :frown:. Luckily the Radio Shack in town has the quick start boards, I'll try to snag a couple tomorrow so I can continue testing. Until I destroyed the board I got some basic movement routines written and incorporated sensing the various limit switches. I still need to wire up a MCP3208 ADC and see how that goes. The swing motor has a HB25 with the position encoder, I need to get that programming down otherwise I start breaking parts due to the torque involved with the gear reduction. I may disconnect the gear on the final stage so I can manually swing the leg instead.
Time for aTV and popcorn break for the rest of the night.
I was down at Radio Shack first thing this morning and discovered that they have the quickstart board in stock but want $40 vs $25 from Parallax. So I ordered one from Parallax instead. I guess I'll spend some time setting up a mount for the motor controllers instead of programming....
I got the OK from my Chief Financial Officer (wife) and ordered $500 of aluminum stock, about 120 lbs of material. That's enough to build 6 complete legs and the body. I also placed an order last night for the remaining 10 linear actuators and force sensors. I'll be ordering an additional 16 HB-25 motor controllers and 5 position encoders from Parallax shortly (kind of want to see if they go on sale any time soon since I don't need them right away).
I started cutting up stock material last night for the first production leg, after an hour on the bandsaw I called its quits for the night. Still have a bunch to finish cutting up. I wanted to do some CAD work but I recently installed a solid state hard drive for my C:\ drive and re-installed Win7 which broke the CAD program installation. I reinstalled the program but now it's in demo mode and won't let me re-use my license key - sent the vendor an email asking for a reset.
I'm starting night shift tomorrow so I'll be up all night, going to finish cutting up stock and then study Inverse Kinematics some more. I think I'm starting to get a better concept of what it is, would be helpful to actually talk with someone who knows more about it.
Still waiting for the QuickStart board, I see its still back ordered on the website....
I wanted to do some CAD work but I recently installed a solid state hard drive for my C:\ drive and re-installed Win7 which broke the CAD program installation. I reinstalled the program but now it's in demo mode and won't let me re-use my license key - sent the vendor an email asking for a reset.
The QuickStarts should be in stock around Monday or Tuesday.
You know, I have the same problems with CAD/CAM software. Setting up a new computer with any software or external hardware requiring dongles, codes, or other keys is a real hassle. I was thinking today that I wouldn't mind seeing some of those applications move to the cloud. Dragging out installation disks, contacting vendors, etc. is all such a hassle, not to mention the need to set up post-processors for CAM.
Bob, this robot is going to be pretty massive. If it's carrying a power source you're going to need some high-output lightweight batteries. I'm sure you've already got this figured out but it just crossed my mind.
Bob, this robot is going to be pretty massive. If it's carrying a power source you're going to need some high-output lightweight batteries. I'm sure you've already got this figured out but it just crossed my mind.
The QuickStarts should be in stock around Monday or Tuesday.
You know, I have the same problems with CAD/CAM software. Setting up a new computer with any software or external hardware requiring dongles, codes, or other keys is a real hassle. I was thinking today that I wouldn't mind seeing some of those applications move to the cloud. Dragging out installation disks, contacting vendors, etc. is all such a hassle, not to mention the need to set up post-processors for CAM.
Bob, this robot is going to be pretty massive. If it's carrying a power source you're going to need some high-output lightweight batteries. I'm sure you've already got this figured out but it just crossed my mind.
Ken Gracey
Good news on the Quickstart boards! Hopefully I'll see mine in time for my next day off, next Saturday night.
I'm using a large gell cell right now, 12v at 28amp-hr. that should see me through testing and figuring out what size batteries I'll need for a decent run time. I plan on a separate battery just to run the computer and sensor suite, that can be much smaller than the motor battery. I dont know if Iwill end up using the gell cell or maybe a large NiMh pack instead. The gell cell is cheap but very heavy, NiMH is much lighter but expensive. LiPO would be nice but I don't think I can afford that!
The main motor battery housing will actually hang below the main housing so it can be easily removed or different sizes used as needed. That also has a side benefit of lowering the center of gravity quite a bit. That's going to be important when I program/train it to walk up and down steps. The linear actuators are pretty heavy duty, each one is capable of dynamic loads of 110 lbs so weight shouldn't be an issue. The company that makes the linear actuators also makes a drop in replacement actuator that incapable of 550 lb dynamic loads! That one is very pricy at $500 each but available if needed. Maybe I can get military funding for a version using those, it would make an impressive guard!
There is enough room and power enough for a boatload of sensors in the future!
I'm starting night shift tomorrow so I'll be up all night, going to finish cutting up stock and then study Inverse Kinematics some more. I think I'm starting to get a better concept of what it is, would be helpful to actually talk with someone who knows more about it.
Still waiting for the QuickStart board, I see its still back ordered on the website....
Thanks for the offer! I'll study your code and see what I could use. I really think that with the size and weight of this Hexapod that IK is almost mandatory. The last thing you want to see is this big boy falling over!
Just recieved my order of the remaining linear actuators, 5 each of the 2" and 4" actuators. Hidden in that order were the force sensors also. I decided to go with a slightly different approach with the force sensors; rather than 3 separate sensors on each leg, I will have 1 sensor per leg but it is a touch activated potentiometer. This reduces the number of ADC inputs needed and has the secondary benefit of being able to give the precise location of a leg collision. I'll try these out on my next day off! Unfortunately that's not until next Sunday night, I'm getting too old for 12 hour+ work days!
My QuickStart board arrived today, looking forward to trying it out Sunday. Unfortunately my project is essentially stalled until the refueling outage is done in about 4 weeks. There isn't enough time or brain power available after working 12+ hours each day! Anyway I do have the opportunity to do some abstract planning during slow moments at work. I'm working out the main body layout and the battery bay setup. Once I get my CAD program running again I'll have get the design ideas down and see if it all works out.
I'm hopefully down to my last week of night shift. The reactor is done refueling and now its time to button everything back up again. Hopefully my last day on nights is next Saturday! Then comes the fun part, readjusting my body clock back to days again; it gets a lot harder the older I get.
Tonight I decided to go slow and easy but I wanted to do some experimentation. I wired up a MCP3208 ADC, a couple of buttons and then connected it all to the QuickStart board. I ran 3 basic tests:
Get an ADC value on the PST while manually operating the motor
Run the motor using the HB25 using buttons to control the direction
Combine the previous 2 tests into a single routine that output the ADC value while using the pushbuttons to change the motor direction.
All 3 tests were successful so I moved the motor to one extreme and then using a precision protractor I measured the ADC value for every 5 degrees of movement. This data was plotted and is fairly linear.
The next test program is to use the PST to input a ADC value and have the motor move to that value. Then I want to change it up by inputting an angle and have the motor move to that value. I'll either use a table or calculate the angle on the fly using the ADC value. This routine is used as the motor control for the Inverse Kinematics calculations. The tests above were performed on the lift actuator, I'll have to do the same test #3 on the kick actuator. The swing motor setup is different in that it uses the Position Encoder to control the motor position but hopefully that is easy to test also.
It's late and I have a full day ahead of me so its time for bed. I'll start having more regular updates soon!
Man, would your robot have been a smash hit at Expo. No walkers at all, and the biggest mobile robot I saw was Rich's (W9GFO) mecanum wheel robot. Surprisingly, I didn't see any MadeUSAs or Eddies running or displayed. Lots of S2s, BoeBots & Sumobots.
Definitely finish it (reactor duties come first, mind you) and demo it in public!
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!
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!
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!
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.
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.
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!
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!
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.
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..
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!
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!
Comments
Was it Sky Craft?
Tonight I'm going to sort through my new treasures and figure out what to do with them!
Bob
The basic design concept for monitoring leg down conditions is a small switch located at the top of the leg such that when the leg touches down the switch activates. The switch has a limited travel that has to be taken in account of in order prevent the full weight of the leg against the switch. I also need a reliable means of ensuring when the weight is off the leg that the switch deactivates. I am using Bellville washers to provide the 'spring' action that deactivates the switch when the leg is lifted. By stacking these washers I can control the amount the leg moves very precisely. Each washer takes about 75 lbs of force to flatten it and by placing several in series I can control the total distance (each washer is .032 inches tall and flattens to .022 inches with 75 lbs of force - stacking ten serially would give a movement of .01 x10 = .1 inches). The final travel distance will depend on the actual switch travel. This part of the design is fairly straight forward.
The next design spec is sensing when a moving leg encounters an obstacle. There are many possibilities from sensing motor current, putting micro switches on the lower portion of the leg or force sensors. My plan is to use force sensors. Instead of placing the force sensors on the lower section of the leg (cost was a factor because long force sensors are not cheap!) I am going to use leverage to activate the sensors. Imagine holding a broomstick vertically a few inches down from the top of the shaft, this is the pivot point. Any movement of the stick results in a smaller movement of the stick above the pivot. I want to place 3 small force sensors at the top of the leg shaft, each sensor located 120 degrees apart, to sense encounters from any direction (this can also be used to determine the location of the obstacle). Force sensors can be easily damaged so I need to limit the amount of force against them. To do this I am using the small adheisive rubber bumpers used for hanging pictures on the wall. They are small diameter and fairly soft and as they compress against a sensor they will provide a consistent force without damage. The pivot point for the leg will be located just below the sensors. I am using a o-ring around the shaft that slides into the upper leg assembly. This gives a small amount of movement, is self-centering and keeps debris out of the sensor housing.
The problem now is combining both systems into the same location where one system moves up and down and the other moves from side to side. The force sensors are impacted by the up and down movement of the leg. I'm starting to look at a new sub assembly where the force sensors are not attached to the upper leg assembly but are mounted in a moveable piece that moves up and down with the leg. This will require fairly precise machining since the side to side movements are fairly small. Also there is a need to figure out how to attach to the force sensor leads inside the upper leg housing.
I've drawn out several ideas but there are limitations on how big this can be and what I can afford to do! Today I'm drawing the CAD drawings based on the measurements I have taken, hopefully I can start machining parts this coming week. This is turning out to be the single most complex piece in the design and there will be a substantial amount of machining required. I'll post photos as soon as I start getting things together
Bob
The photo above is the basic internal assembly made of 1 inch aluminum. A oring groove is machined in one end for at 7/8" ID and 1/8 diameter medium hard oring. This oring is to keep debris out of the assembly and it also serves as a soft actuator for the force sensors.
The next photo is a delrin housing for a micro switch. The actuator lever is positioned above the block so it actuates the switch prior to it being pressed all the way down. This is to protect the switch from breakage.
This next photo is of all the parts for the leg down sensor assembly. The far left component is the actuator with the oring installed. The far right block is a 1.5" square by 2.2" long aluminum block that is machined such that the actuator can only move 0.25 inches maximum. The bolt goes in the housing and the hardened washer is used to protect the soft aluminum from the spring. The spring is 1" long and takes 25 lbs of force to compress it. When the assembly is bolted together the bolt is tightened until the o-ring is fully within the housing. At this point the spring is partially compressed and provides the return force when the leg is lifted. When the weight of the robot is on the leg, the spring compresses and the head of the bolt rises. The bolt head actuates the lever on the switch which is bolted to the top of the assembly. This actuation point is adjusted by how far the bolt is tightened into the actuator. What isn't shown here is a slot on the side of the housing and a small hole in the actuator just above the o-ring. A roll pin is used to prevent the leg assembly from rotating and possibly changing the settings.
The collision force sensors are mounted in the main housing across from where the oring sits when weigh is off the leg. When the leg moves and if an object is touched, the o-ring is compressed on that side of the housing causing the force sensors to change their resistance. This is converted to a voltage change and read by a ADC. The microprocessor can then react to stop leg movement in that direction and evaluate the next move.
The assembly block looks a bit crude in this photo because I had to use a scrap block of aluminum for the housing and it was just barely long enough for the job but good enough for testing. The next one will look much better!
I'm ready to start wiring up the motor controllers and start testing all the individual parts so they can be integrated. I want to run a stress test on the leg by having all three motors continuously operating for several hours to determine any mechanical weak spots, current draw (to figure out battery sizing), and make sure nothing fails or falls off! Then it will be time to start really diving into Inverse Kinematics (time to brush up on my math again) and get some useful motion out of the leg.
Bob
Since everything is in CAD, it's fairly easy to modify the parts with fixes. It is fun to see something that just started out as a cool idea get created into a workable part or assembly.
My last project before the robot was designing and building underwater housings for a heads up display that could handle 400+ foot depth. That was a lot of fun and I learned a lot of ways not to do it!
Bob
Time for aTV and popcorn break for the rest of the night.
Bob
I started cutting up stock material last night for the first production leg, after an hour on the bandsaw I called its quits for the night. Still have a bunch to finish cutting up. I wanted to do some CAD work but I recently installed a solid state hard drive for my C:\ drive and re-installed Win7 which broke the CAD program installation. I reinstalled the program but now it's in demo mode and won't let me re-use my license key - sent the vendor an email asking for a reset.
I'm starting night shift tomorrow so I'll be up all night, going to finish cutting up stock and then study Inverse Kinematics some more. I think I'm starting to get a better concept of what it is, would be helpful to actually talk with someone who knows more about it.
Still waiting for the QuickStart board, I see its still back ordered on the website....
The QuickStarts should be in stock around Monday or Tuesday.
You know, I have the same problems with CAD/CAM software. Setting up a new computer with any software or external hardware requiring dongles, codes, or other keys is a real hassle. I was thinking today that I wouldn't mind seeing some of those applications move to the cloud. Dragging out installation disks, contacting vendors, etc. is all such a hassle, not to mention the need to set up post-processors for CAM.
Bob, this robot is going to be pretty massive. If it's carrying a power source you're going to need some high-output lightweight batteries. I'm sure you've already got this figured out but it just crossed my mind.
Ken Gracey
+1. That was my concern back at post #20...
Good news on the Quickstart boards! Hopefully I'll see mine in time for my next day off, next Saturday night.
I'm using a large gell cell right now, 12v at 28amp-hr. that should see me through testing and figuring out what size batteries I'll need for a decent run time. I plan on a separate battery just to run the computer and sensor suite, that can be much smaller than the motor battery. I dont know if Iwill end up using the gell cell or maybe a large NiMh pack instead. The gell cell is cheap but very heavy, NiMH is much lighter but expensive. LiPO would be nice but I don't think I can afford that!
The main motor battery housing will actually hang below the main housing so it can be easily removed or different sizes used as needed. That also has a side benefit of lowering the center of gravity quite a bit. That's going to be important when I program/train it to walk up and down steps. The linear actuators are pretty heavy duty, each one is capable of dynamic loads of 110 lbs so weight shouldn't be an issue. The company that makes the linear actuators also makes a drop in replacement actuator that incapable of 550 lb dynamic loads! That one is very pricy at $500 each but available if needed. Maybe I can get military funding for a version using those, it would make an impressive guard!
There is enough room and power enough for a boatload of sensors in the future!
Bob
Hey Bob,
I'm glad to hear that your CFO gave you the green light. If you like, you;re more than welcome to use my walking program that I developed for my hexapods. It's not IK, but more of a relationship system that I orginally created to fit and run inside a BS2sx. It let's you change direction and walk in any direction without rotating the body like in the videos. The code is here:
http://forums.parallax.com/showthread.php?129632-Hexapods-and-Code-for-BS2-BS2sx-and-Propeller-post-your-own&highlight=prospero
Thanks for the offer! I'll study your code and see what I could use. I really think that with the size and weight of this Hexapod that IK is almost mandatory. The last thing you want to see is this big boy falling over!
Bob
Time to leave for work again!
Bob
Tonight I decided to go slow and easy but I wanted to do some experimentation. I wired up a MCP3208 ADC, a couple of buttons and then connected it all to the QuickStart board. I ran 3 basic tests:
- Get an ADC value on the PST while manually operating the motor
- Run the motor using the HB25 using buttons to control the direction
- Combine the previous 2 tests into a single routine that output the ADC value while using the pushbuttons to change the motor direction.
All 3 tests were successful so I moved the motor to one extreme and then using a precision protractor I measured the ADC value for every 5 degrees of movement. This data was plotted and is fairly linear.The next test program is to use the PST to input a ADC value and have the motor move to that value. Then I want to change it up by inputting an angle and have the motor move to that value. I'll either use a table or calculate the angle on the fly using the ADC value. This routine is used as the motor control for the Inverse Kinematics calculations. The tests above were performed on the lift actuator, I'll have to do the same test #3 on the kick actuator. The swing motor setup is different in that it uses the Position Encoder to control the motor position but hopefully that is easy to test also.
It's late and I have a full day ahead of me so its time for bed. I'll start having more regular updates soon!
Bob
Definitely finish it (reactor duties come first, mind you) and demo it in public!
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
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
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
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
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
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
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
Bob
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!
[video=youtube_share;jJ-TcaN6p8M]
http://youtu.be/jJ-TcaN6p8M
Bob
You have made a lot of progress, Thanks for posting. :thumb:
-Tommy
Can't wait to see what this behemoth looks like when completed!