September 20, 2009
NOTE: This is a reverse chronological blog. Start at the bottom if you are new to it. The most recent entry is at top, just below this notice.
You can also view the Robot Page for this bot.
Update 2011-07-13 (in the wee hours of the morning)
Wow, it's been nine months since I've updated GRAB-E's blog. The desire to bring him along with me this evening when I'm a guest on Make:Live was too much to ignore. I moved his IR detector circuit to a small circuit board and hot glued it to his chassis. that seemed to clear up some of the twitchy noise problems I was having with it. It may still remain an issue, but it seems OK for now.
I updated his programming to integrate a simple grab routine. If he sees something in his reach, he grabs it. He does not yet know how to actively search for stuff. That will come later. One step at a time.
In fact, I need to spend more time on this step. He does not alway grab successfully. I added some foam pads cut from sanding sponges to provide some grip to his grippers. Those seem to work well.
It's late, and I need sleep. I hope everything goes well tonight!
Hurrah! GRAB-E's IR detector works great! He uses it to know when there is something in this grabber that he can grab. I got a lot of help from OddBot's post on making your own IR detector. There's a new video at the bottom of this post; it's the forth one down.
You can see the clear IR detector and the blue IR LED mounted in a black plastic package just above his grabber. They are pointing down at about 45 degrees. I had the little black LED mount lying around. Since OddBot advised that the LED pair should be parallel, it was a convenient thing to use. I had to file down the little rim on the IR LED and detector to make them fit.
To the left of GRAB-E, you can see the mess of the breadboard. I haven't integrated the circuit yet. Here's an annotated close up.
Here's the relevant portion of code for using the detector on a Picaxe-40x2. Note that I used timer3, which is only available on x2 Picaxe parts.
symbol irdetectorpin = 5 'Analog IR detector on ADC channel number (not pin number)
symbol irledpin = B.7 'IR LED on/off control
symbol grabpin = B.3 'control pin for the grabber servo
symbol irlevel = w3 'store the IR level
symbol ambient = w4 'store the ambient light level
symbol currenttimer = timer3 'keep track of time
tmr3setup %10110001 'timer3 (x2 parts only) on, 1:8 prescaler @ 8MHz = increment every 262ms
low irledpin 'ensure the IR LED is off
pause 5 'wait to be sure the IR detector has settled
readadc10 irdetectorpin, ambient 'take an initial ambient light reading
servopos grabpin, grabopen
w5 = currenttimer + irinterval
if timer3 < w5 then
currenttimer = timer3
readadc10 irdetectorpin, irlevel
irlevel = irlevel - ambient
if irlevel > 100 then
servopos grabpin, grabclosed
servopos grabpin, grabopen
GRAB-E has a whole new look! I removed the original pan/tilt that was mounted up high, and simply added a single sweeping servo to his wrist. His wrist now also serves as his neck for up/down motion along with the grabber.
I'm hoping that his sonar will now be close enough to his grabber that he can use it for object detection. It will be easy enough to angle the sonar down a bit if I need to.
Oh! and the coolest is that I made my very first thing out of polymorph. It is actually InstaMorph, which was advertized by someone on this site, and I was able to buy it right from Amazon. You can see the black and white labeled jar of InstaMorph in the background. Thanks to this old post by OddBot on making flat sheets and then servo mounts, my first fabrication was a reasonable success.
I have also added a home made IR detector, also thanks to a post by OddBot. (You really are awesome, man!) This one is mounted just above his grabber, and angled down. It is a very short range detector intended to lett GRAB-E know when there is something he can grab.
I haven't wired up the IR detector yet, but I did some testing with some code on my Arduino, and the detector seemed to work OK. It only needs to react when it detects something an inch or two away.
Well it has been a long time coming, but I finally gave GRAB-E his grabber! See the video at the bottom to see the gripper in action.
The grabber is constructed from a single servo, but is mounted to the previously designed DAGU "wrist" that will let him raise and lower whatever he grabs. The grabber claws are little orange bits of plastic that come from Canon print cartridges. I've started collecting them instead of throwing them away, since I thought they could be cool claws or legs or something. Now they finally have a purpose.
Two plastic gears are glued to the plastic claws. One is mounted where the servo horn should be. The other is mounted using a custom metal bracket. It mostly hold on the the servo with tension, but I needed to hot glue it in place to keep the gears from slipping.
I will need to add some feedback so GRAB-E knows when he has something in is grip. I may add some low slung sensor to help him find small items to pick up.
GRAB-E got a face lift... well, a head lift really. After his disasterous test run yesterday, I had to remount his head. I added a small block of wood to lift it well clear of the wrist servo and bracket. Here's a pic.
I know, I know, it doesn't look much different. But it should help keep me from knocking the head and gripper together with poor coding.
I also added back in the full axle for the rear idler pulleys, just like in the front. Hopefully the tracks will stay on much more reliably now.
Next step... get the SRF05 working!
Oh, one more thing. I thought I should turn GRAB-E's name into an acronym. After all, it's important to stand for something, isn't it?
How about, "Go, Retrieve, And Bring 'Ere"?
Update later that morning...
I tossed the ranging and driving code from my SHR robot into GRAB-E. What do you know, but I had the same problems with it as I did on SHR. It seemed to always decide to go the wrong way. I finally figured out I had the head moving left to check the right distance and vice versa. Easy fix.
More code tweaking when I get some sleep. The computer I was programming on needs a reboot anyhow.
Much later... sounds good.
GRAB-E is happily navigating around and backing up when he gets too close to obstacles. I decided it was time let GRAB-E make some noise. I added one of these little piezo speakers, and now he can beep and such.
Next step is to start working on the gripper. That may need to wait until I can buy some materials. I'll be switching my attention back to Blind Lemon for a bit, since his parts came in. I may post a video of GRAB-E moving about and sounding off, just to document his current capabilities.
I did some major updates to the platform, adding a pan/tilt head with an SRF05 ultrasound sensor mounted on it.
I did some quick test programming to see how the head (pan/tilt with sensor) and wrist (servo and brackets that will lift the grabber) work together. As it is currently built, I have to be careful or I can cause the two mounts to interfere with each other.
It won't be much of a bother to re-mount the pan/tilt. During a test run it started falling off the table and I knocked the mount off anyway. It is only held on with hot glue. I may re-mount it higher to avoid interfering with the wrist for the grabber. I have video of it almost falling... perhaps I'll post to my Ignoble Idiocy blog.
Anyway, next steps are to re-mount the head and then test out the ultrasound.
I think I have figured out the problem with the tracks falling off. The front idler pulleys tend to bend inwards a bit, since they were designed for a full axle and I made short axles instead. I replaced my home made axles with a full axle from the original Tamiya set. So far the tracks seem to stay on very well.
This will do for now, but I would like to go back to a short axle design if I can make it work. In the meantime, using the full axle will allow me to continue working on development of sensors and the gripper.
I got the boards mounted with the new aluminium tube standoffs.
Here's a picture of the Mr. Basic PCB mounted. I made 1 inch standoffs to replace the originals, which I used to mount the Picaxe Board above it. I couldn't find 3mm bolts long enough, so I used 4-40 threaded rod that I cut to size.
Here's the Picaxe board mounted.
I drilled two extra mounting holes at the rear of the Mr Basic PCB below to accomodate the standoffs for the Picaxe board. Unfortunately, I couldn't do the same at the front, because it would have cut some circuit traces on the Mr Basic board. So I had to improvise. In the picture below, the two standoffs are not going through the Mr. Basic board. There's a threaded rod capped with a nut and it is just sitting in a blob of hot glue. The rear supports are pretty firm, so these two just keep things from flexing around too much.
I was a bit annoyed that the Picaxe-28/40 Protoboard seems to use contacts holes that are smaller than standard header pins I have. The board has contact pads on both sides of the board. Since the Picaxe board is mounted on top of the motor controller board, I soldered the blue wires with header pins on the opposite side hanging down from the Picaxe board.
A quick drive test revealed that I my mucked up desoldering job on the Mr Basic motor controller PCB was causing problems. I added two jumper wires so that the pins of the transistors I had mangled were in proper contact with the appropriate resistors.
I also see that the left track still tends to fall off. I noticed an irregularity on the track itself where two sections connect. I tried trimming it a bit and it seemed to help, but not solve the problem completely. I may still need to redesign the tension pulley.
I'm waiting for parts for Blind Lemon, so I'm returning to GRAB-E. I've decided to dedicate some pretty serious hardware to GRAB-E, and see just how ambitious I can be with this platform. I already have a lot of the parts, so I can get started.
- Picaxe-28/40 Protoboard
- DAGU Ultrasound Sensor
- DAGU Mr Basic PCB with motor controller
- Custom gripper (to be developed)
Since the Picaxe-40 has plenty of memory and I/O, I'm thinking I can add lots of sensors, servos, sound, etc to GRAB-E and really have some fun with him.
To start, I'm going to add a power regulator to the Mr Basic PCB motor controller, so I can run the motors at 6V and have 5V for the processor. I've been quite happy with the regulator circuit I based on OddBot's design, and I have all the parts for it.
I need to fabricate some standoffs to mount the two circuit boards, so I can re-test the basic platform. I was never quite satisfied with the tensioners for the tracks, and I may need to alter their design.
Later that day...
I have completed the voltage regulator build on the Mr Basic PCB motor controller board. The batteries now run through a power switch to the Mr Basic PCB and the voltage regulator. The motor controller is working directly off battery voltage, which is 4xAA alkalines. The output of the voltage regulator and ground are then passed up to the Picaxe board.
I used three aluminium tube standoffs that came with the Mr Basic kit to install the board on the GRAB-E platform. I'm fabricating some more so that I can mount the Picaxe board on top of the Mr Basic board.
The family watched "Short Circuit" last night. I realized that my configuration is more like Number 5 then WALL-E.
Number 5 had triagular tracks with a rear caster.
Oh well. I'm not changing his name now. Although, "Johny Grab" sounds kinda cool.
I think I fixed my track falling off problem. I added a tensioner pulley to each track.
The pulleys are held by a finishing nail and a small aluminium plate. I can adjust the tension slightly by pushing the pulley forward or back, since it is just held on with pressure from the aluminium plate.
I will cut off and finish the end of the nail soon. Right now it makes GRAB-E look like something out of Deathrace 2000.
I shifted the weight of the batteries to the rear, and that did reduce the vibration to an acceptable level. However, now the tracks seem to fall off even more frequently than before! Perhaps they need more weight centered on the tracks to help keep them on? Crap!
I guess I'll play with weight distribution a bit more. My next move if that doesn't work is to make new axles. The current ones I made by cutting finishing nails to the right length. They were just a little too small in diameter, so I wrapped the ends in one layer of masking tape and that seemed to hold the wheels on well. Maybe if I cut down the original Tamiya shafts the wheels will pull inward less because the diameter of the shaft fits better.
I tried both moving some weight more forward and also putting the batteries back in their original position. The tracks still fall off, so it does not appear to be related to weight distribution.
Another thought I had is that perhaps the triangular layout of the tracks needs to change. Right now the upper drive sprocket is forward of center. In other words, the top of the triagle is not centered above the base, it is forward of center. I don't see why that would matter, but I wanted to make a note of it so I don't forget.
Thoughts later in the day...
What about a spring loaded tensioner pully on each track? Maybe allowing a variable amount of tension during manuvering would help. I should also isolate what types of manuvers cause the problem. Will the tracks fall off if the robot just drives straight ahead? Is it always during a reverse? How about when one track goes forward and the other reverses, or when one track is still and the other goes forward or reverse? I'll have to test these scenarios and make some practice runs.
OK, so I finished the two... erm, whatchamacallits. Track stablizers? Idle wheel supports? I dunno what to call them. They are supposed to keep the idler wheels perpendicular to the chassis so the tracks don't fall off.
[Edit: Added picture above. You can see the clear plexi whatchmacallits, and the original positioning of the batteries. I later shifted both battery packs so they are now side by side at the rear.]
I finished them and they looked perfect. All the drill holes are spot on. Howver, the tracks still fell off in test runs. So I tried reducing track tension. That seemed to help, but the tracks still fall off too frequentlly. I think I will try to reduce the tension even more.
Also, the ride seems to have developed some vibration in the rear. I'm not sure if that is because of the reduced track tension, the whatchamacallits or if the gripper servo and mount are making the bot to front-heavy. I'll have to watch that.
Later that evening...
I reduced the track tension further and it definitely helped. I ran through 11 or 12 drive test sequences before the bot threw a track. Still not perfect, but much improved.
[Edit: Added picture above. You can see the two nuts of the tensioner at the base of the grey Tamiya gearbox. I removed both nuts to reduce the tension, so effectively I don't have a tensioner anymore.]
I grabbed video of the test run, so I'll post it when I get a chance.
I've decided that the vibration in the rear is due to weight distribution. I can shift the 2nd AA battery pack to the back, which might fix the problem.
I'm moving to reverse chonilogical order for my blog posts. At least, I am if I remember to do so. Seems right.
OK, onto the bot. I'm focusing on the chassis build right now. I've got the basic chassis built, based on a Tamiya Remote Control Construction Set, which includes some nice bits:
- Dual geared Tamiya motors
- A geared Tamia motor (originally used to drive a crane)
- 1 Tamiya plate
- lots of little brackets and struts and bolts and bits
I started by mostly disassembling everything, and reconfigured the tracks at one end in a triagle configuration. Note the slack in the track. I fixed this later (sort of).
In the pic above you can also see the geared motor for the crane, which I toyed around with. I eventually ditched this approach in favor of a servo, which you will see in a bit.
The other unusual approach I took here was the rear wheel, which is an Arexx roller wheel purchased from DAGU. You can see how the chassis works in the first video (at bottom of post), which is before I added GRAB-E's brains.Note how thet tracks manage to get over the obstacle, but the rear wheel just pulls through it.
If you look carefully in the picture below, you can see I added a clear plexiglass plate at the bottom of the tracks. The idea was to help keep the idler wheels perpendicular to the frame. The track tension tends to pull them inward. Due to poor drilling, the idlers are still not quite straight. I reduced the tendency for the track to fall off, but did not eliminate it. I will work on improving this part.
What you can't see in the picture above is that the Tamiya dual gear motor is mounted to the frame with two nuts between the gear motor and frame at each mounting hole. The reason is I wanted a method for track tensioning if needed. I have them at the minimum tension now and it is about right, so I may never need to use this feature, but it is nice to have.
Something I'm quite happy with is the modification I did to the LMR designed and DAGU manufactured sensor mount. I bought an 18g servo and it came with some simple bushings. I thought the sensor mount would swivel much nicer with bushings, but the pivot hole on the mounts was too small. Nothing a drill press and 1/8 inch bit couldn't cure. You can see the brass bushing in the pic below. The mount rotates very smoothly.
Hey, DAGU, how about including bushings in your sensor mount kits? Or maybe with your mini servos? I hated to drill these nice brackets, but the result was worth it.
I also needed a servo mount for the bracket. DAGU is already designing a mount for their mini servos for this bracket set, but I wanted a larger servo for lifting, and anyway I didn't have their mini servo mounting bracket. That'll be in my next order from them. ; j
I used some scrap metal from a ceiling light fixture I installed. I'm not sure what the metal is. Whatever ceiling can light fixtures are made of. However, it was fairly stiff but easy to bend. It is a simple U-bend shaped for the 18g servo, with one side doubled over and then bent for the mounting hole.
You can see the mounting hole in the picture below.
Here's the servo all mounted. It works great! Although I haven't tried to lift a load with it yet.
In the picture below, you can see the series of fasteners.
On the left side (from left to right):
4mm bolt -> brass bushing -> DAGU mount 1 -> DAGU mount 2 -> 4mm nut
On the right side (from left to right):
Servo horn -> DAGU mount 2 -> DAGU mount 1 -> brass bushing -> small screw
The results are a nice smooth motion, which you can see in the 2nd video (at bottom of post). I command the servo to point the "head" back, then straight up, then straight forward. Then the servo goes through its range of motion in step of 10.
Original Post (2009-9-20):
I'm working on a tracked bot right now, and may need to introduce track tensioning.
I'm using Tamiya tracks and a Tamiya plate and brackets and stuff for a contstruction vehicle. With the tracks in a trianglular configuration (drive sprocket on top, two idler wheels below), I used individual axles for each of the idlers, instead of the stock axles that go all the way across.
The tracks kept falling off because the idlers don't stay 90 degrees to the frame without the full axles. So I tried addeding a plexiglass plate on stand-offs in parallel to the two idlers on each side. It seemed to help, but didn't fix the problem completely. I may need to try again with more precise drilling.
You can also view the Robot Page for this bot.