Introduction: Bucket Bot 2
This is the latest version of the Bucket Bot - a mobile PC based robot that can be easily transported in a 5 gallon bucket. The previous one used simple wood based construction. This newer version is based on aluminum and T-Slot, so it is easily expandable.
The bucket bot concept is a vertically oriented robot where all the components are easily accessible. This is superior to the layered approach since you don't need to unscrew layers to work on the lower level components. This design has the all-important features for mobile robots: a handle and motor power switch!
I also incorporated some new components that make the building easier. There is a little fabrication involved, but it can all be done using hand tools. You can also use a laser cutter for a plastic version of this robot, or use a metal cutting service like the Big Blue Saw if you would like with the included designs.
This robot uses a tablet Windows PC. But, the design will work with ITX, Mini-ITX boards as well as smart phones and boards like the Arduino, Beagle Bone and Raspberry Pi. Even the Arduino Uno for motor control could be used exclusively.
This design was intended to be compatible with the Vex / Erector hardware. The holes are 3/16" on a 1/2" center pattern.
I cannot say enough good things about the T-slot used in this design. I used the 80/20 20 series, which is 20mm on a side. That's right around 3/4", and the cool thing is that you can use standard #8-32 screws with it (same as the Vex). When you use #8-32 square nuts, they do not spin in the channel, and standard angle brackets work well alongside the higher end hardware you can get. The T-slot extrusions are easily available on Amazon and EBay - the ~4' piece used for this project only costs about $10. The t-slot allows a very nice way to make 3D objects from 2D cut parts, so the combination is great for building things with minimal fabrication - you can especially see that in the motor mounts.
This robot is controlled with the RoboRealm machine vision system. It determines where the robot should go, and sends motor control commands over the serial port. The serial port is connected to an Arduino Uno and Adafruit Motor Control Shield. The Arduino runs a simple serial listener program to receive commands and run the motors and camera tilt servo. The sample application here is a Fiducial Course - the robot will move between a series of fiducial markers in order.
Step 1: Parts List
For the list below, I found some of the hardware online at McMaster-Carr (MMC). The screws can also be found at local hardware / home improvement stores, but larger quantities, hex heads, stainless etc. may be easier to find at online parts suppliers.
- Base Plate, Motor Brackets and Servo Shelf. You can use 1/8" aluminum, or 3/16" plastic. They both work well. For the plastic, note that some of the fasteners will need to be 1/16" longer. Step 2 shows some samples of the plastics. See the cutting diagram in the next steps for details, but all the parts fit on an 8" x 10.5" sheet.
One source for the aluminum plate is Online Metals - I used 5050 aluminum since it was lower cost and should stay shinier longer. I also found a comparable sheet here.
One other idea is to use pre-perforated sheets. The Erector/Vex pattern holes are 3/16" on a 1/2" center *straight* pattern (not staggered). I tried a lot of them, and one of the best is perforated polypropylene sheet. One example is MMC 9293T61. The 1/8" thick is OK - is a bit flexible, but works, and all the holes are ready to go. I used a sheet of this to quickly mark some holes on the servo/camera shelf.
- 4 feet (1220mm) of 80/20 Series 20 20mmx20mm T-Slot - you can find this on Amazon (below) or EBay
80/20 20 SERIES 20-2020 20mm X 20mm T-SLOTTED EXTRUSION X 1220mm
This whole project only uses just under 4 feet of it, and the cost is low - about $10. From this, you will need to cut the following:
- (2) 1.5" pieces for the motor brackets
- (2) 8.5" pieces for the risers
- (1) 7 1/4" piece for the handle
- (2) 5 11/16" pieces for the cross bars
- Button Head Socket Cap Screws - I am showing the numbers and lengths below, but I strongly recommend getting an assortment so you have just the right screw for the job. With the T-Slot, they have to be just the right length or the screws will "bottom out" on the core of the extrusion before you can get them tight. IMHO, Stainless Steel is best. Many people like the Black Oxide too. I would not recommend Zinc (rough) or unfinished (prone to rust).
- (~14) #8-32 x 3/8" (MMC 92949A192)
- (~14) #8-32 x 5/16" (MMC 92949A191)
- (2) #8-32 x 1/2"
- (~30) #8-32 Square nuts (MMC 94785A009)
- (4) #8-32 Keps Nuts (MMC 96278a009) - thee are not absolutely necessary, and you could use a square nut with a lock washer instead.
- (~6) #8-32 washers (MC 92141a009)
- (2) #8-32 split lock washers (MC 92146a545)
- (2) #8-32 x 1-5/8" Eye Bolts
- (7) Corner Brackets - see the frame step for other possibilities
- (2) Corner Brackets for Aluminum Extrusion to connect the tower to the base. You could also just use a thinner one above if you want. These are more rigid, though, and you could use more of these in place of the thinner ones. The corner brackets from 80/20 fit their extrusions much better than these generic ones, but cost more.
- (2) Nema 17 Stepper Motors - these seem powerful enough and run under the 1 amp limit on the motor shield.
- Pololu Universal Aluminum Mounting Hub for 5mm Shaft, #4-40 Holes (2-Pack)
- Pololu Wheel 80×10mm Pair - lots of fun color choices!
- (8) Motor screws - M3x6 (.5 pitch), pan head (MMC 92000A116) - these could be slightly longer
- (4) #4-40 x 3/8" screws for the wheels, pan head (MC 91772A108)
- (1) Caster - Cool Caster brand - lots of colors to choose from!
- (2) 5/16" washers for the caster stem (MMC 92141a030)
- (1) 5/16-18 split lock washer for the caster stem (MMC 92146a030)
- (1) 5/16"-18 nut for the caster stem (MMC 91845a030)
- (1) 5/16"-18 cap nut for the caster stem (MMC 91855A370)
- Lithium Ion Battery Pack. This one is very nice for robotics since it has a 12v 6a output as well as a 5v USB output. Some tablet PCs allow you to charge while also using a USB port, and some do not.
- Blue 12v illuminated switch from Radio Shack, or one from Uxcell on Amazon. You can use whatever color you want. I found the smaller ones to have more sturdy terminals.
- Arduino Uno
- Adafruit Motor Shield - this is a great shield - runs two stepper motors and has a couple servo connectors ready to go.
- (3) 4-40 threaded standoffs 1/2" long for the Arduino UNO (MMC 91780A164)
- (3) 4-40 screws x 1/4", pan head (MMC 91772a106)
- (2) 4-40 washers for standoffs on base side only (MMC 92141a005)
- (3) Quick Disconnect Terminals for switch connectors 22-18 AWG .250x.032 (MMC 69525K58)
- Wire: 20 gauge stranded in red and black
- Heat Shrink Tubing
- (3) heat shrink red 1/8" (3mm) - 3/4" long
- (3) heat shrink black 1/8" (3mm) - 3/4" long
- (3) heat shrink red 1/4" (6mm) - 3/4" long
- (3) heat shrink black 1/4" (6mm) - 3/4" long
Computer and Camera:
- 8" Windows Tablet PC
- Tablet Tripod Mount
- 1/4-20 hardware to mount the mount to the base: a 1/2" screw, a lock washer, and a washer
- 2 port USB wire. This is a minimal 2 port USB hub with a USB micro connector. You can use any hub you want. I have a Bluetooth keyboard and mouse, so I only need ports for the Arduino and Web Cam.
- USB Camera. Most will work. This one had a standard 1/4" x 20 mount at the bottom, making it easy to work with.
- Pan Tilt Kit (or Lynxmotion BPT-KT) - note that I have included a servo shelf plan for a pan servo, but I ended up just using the tilt to improve camera stability.
- Servo - standard size - I used a higher power servo (Hitec HS-5645MG) for improved stability.
- (2) #2 x 1/4" sheet metal screws to attach the servo horn to the pan & tilt bracket
- (2) 6-32 screws for the servo 1/2"" long
- (2) 6-32 nuts
- (2) 6-32 washers
- Web Cam - this one worked well for me and had a convenient standard 1/4"-20 mount at the bottom.
- (2) 1/4-20 jam nuts
- (2) 1/4-20 washer
- (2) 1/4-20 lock washer
- 1/4-20 x 1/2" screw
- 1/4-20 x 1.5"? Hex bolt
The following items are not required for the function of the robot, but are nice add-ons:
- T-Slot end caps (MMC 5537T14)
- T-Slot Covers (MMC 5537T15) McMaster-Carr only carries black, but other colors are available from 80/20 and their resellers
Step 2: Building the Base
The structure consists of a few custom built flat parts (the base, motor brackets, and servo shelf) and some T-Slot extrusions cut to length.
For the base, motor brackets, and servo shelf, you can either make them by hand, or get them cut via water or laser jet. A few examples are shown in the pictures.
Building them by hand, though, is actually fairly easy - all of the aluminum versions pictured were done by hand with minimal tools. For the hand made ones, use 1/8" aluminum - it's the right combination of strength without being too thick for parts to be mounted etc. Use the templates labelled "handmade", and print them out and attach them to the aluminum sheet. I used re-positionable spray, but tape on the edges should also work. I also used a letter sized adhesive sticker, which worked well, but was a bit harder to remove. Use a punch to mark the center of all the holes first, then drill out the smaller holes with the bit sizes indicated. For the larger holes, use a step drill bit - this is a really useful safety tip since it makes a much nicer hole than trying to use large bits, and will not grab the metal like larger bits can. The outlines can be cut with a hack saw or saber saw if you have one. File the edges, and use a larger bit and deburring tool to remove any burrs from the holes.
You can also order these parts cut from aluminum from places like BigBlueSaw.com. For water jet or laser cutting, use the "CNC" templates - they don't have all the extra markings.
For the laser cut approach, you will want to use 3/16" think Acrylic or ABS to get the right strength. 1/8" is possible, but will flex a bit much. Note that Acrylic is more prone to cracking than Polycarbonate (Lexan), but since Polycarbonate creates dangerous gasses when burned (i.e cut by a laser), you usually need to water jet cut it anyway, so you might as well use aluminum if you are paying for water jet cutting. ABS at 3/16" is OK - flexes a bit more than Acrylic.
Note that For Acrylic and Laser cutting, the thicker material will require all those screws going through those pieces to be 1/16" longer than for the 1/8" aluminum.
Also with 3/16" thick materials, the power switch will just barely fit - washers etc. will need to be removed. So, the aluminum is better from that point of view.
Other than that, the laser cutting is fairly straight forward. See the pictures for an example.
Motor Brackets and Motors
Start by attaching the Nema 17 stepper motor plates to the stepper motors. Use the M3x6 pan head screws for those. The wires can be towards the top of the brackets to help keep them out of the way (see the pictures).
Next, use three of the #8/32 x 3/8" screws and square nuts to attach the short T-slot extrusions. I put the screws and nuts on loosely, then threaded the extrusion over the nuts, then tightened them down.
To mount the stepper motors to the base, put four of the #8/32 x 3/8" screws and square nuts on the base as shown, and then thread the motor extrusions on and tighten. The third set of holes is in case you want to put some screws there to make the base under the battery more even. This was more important when I was using a lead acid gel cell - much heavier and larger than the Lithium Ion!
Once the motors are on the base, you can attach the hubs using the supplied set screws, and the wheels with the #4-40 x 3/8" screws.
The caster is attached with the 5/16" hardware. A nut, lock washer, and washer below the plate, and a washer and cap nut above the plate. The cap nut is mostly to make it look nice. You can adjust the nuts a bit to get the base plate level with the wheels.
Step 3: Building the Frame
Assemble the frame per the pictures. Since it's T-slot, you can try it a few times until it looks right. To attach the angle brackets to the T-slot, use #8-32 x 5/16" screws and square nuts. These are slightly shorter than the ones for the motors since the brackets are thinner.
The eye bolts are to hold a rubber band to help stabilize the camera. This is optional, but seems to help. Cut a part of the eye out with a Dremel tool to make attaching a rubber band easier. Use washers and lock washers to hold them tight. The outside nut can be a square or hex nut.
The bottom horizontal cross piece will need one square nut facing back to hold the tablet PC mount.
The top horizontal cross piece will need two square nuts facing forward to hold the servo shelf.
I used the stronger braces to attach the frame to the base. I needed to sand off the slot tabs on one side to lay flat against the base. Washers were used since those braces had a large opening for the screw.
The optional trim pieces are shown - just to make it look nicer.
There is a picture at the end with some of the angle bracket options.
Step 4: Battery, Tablet Mount and Servo Shelf
The battery is a beefy Lithium Ion battery with a convenient 12v 6a output. I used 12" zip ties to hold it down to the base, and the wiring will appear in a later step. This battery has a USB 5v output. That was great with an older WinBook tablet I had since it had a separate charging and USB port, but the newer tablet I am using does not allow charging and USB port use at the same time. A trade-off for the power and size of the new one. For running just the motors, the battery will last a long time.
Tablet PC Mount
The tripod mount for the tablet PC has a standard 1/4"-20 thread. So, you can use an angle bracket to connect it to the lower cross brace on the robot handle/frame. One hole on the angle bracket needs to be drilled out to 1/4" for the bolt. The bracket is attached to the mount with a 1/4"-20 bolt, washer, and lock washer. Once that is attached, you can use a #8-32 x 5/16" screw to attach it to the cross piece with a square nut in the T-slot from the previous step. The tablet PC should fit nicely in the bracket in landscape orientation.
The servo shelf is a piece of 1/8" aluminum. The plans are in the attached diagrams, and it's drilled out with holes for future expansion - you may not need them all. I ended up not using a pan servo to help keep the camera more stable, so the platform has no cut outs, but the plans and a picture are included so you can see how that would work.
The servo shelf is attached with two corner brackets. Use #8-32 x 5/16" screws to connect it to the top frame/handle cross piece using the two square nuts in the T-slot there. Use #8-32 x 3/8" screws and Keps nuts to connect the brackets to the plate. Lock washers and square nuts could also be used for this.
Step 5: Motor Control
For the stepper motor control, I used an Adafruit Motor Shield. It runs two stepper motors, and it has connectors for two servos. This is perfect for a basic version of this robot. An Arduino Uno is used as the base for this, and the robot runs a simple serial listener program to receive motion commands and execute them.
Instead of drilling custom holes, I used a couple of the standard 3/16" holes, and the Arduino fits pretty well. Not perfect, and not straight, but it was easy to attach. The key is using #4-40 screws to allow for the hole mis-match.
Use #4-40 x 1/2 long hex standoffs and connect them on three of the Arduino mounting holes with #4-40 x 1/4 screws. That fourth Arduino hole one is a bit crowded for standoffs.
To attach the boards to the robot use only two #4-40 x 1/2" screws and washers on the outside holes - see the pictures. The two screws hold the boards well, and that third standoff provides a third "leg" to keep the board level.
If you want to lay out those arcane Arduino mounting holes instead, go for it! :-)
Step 6: Servo and Camera
Pan Tilt Unit
Assemble the pan/tilt unit as instructed with those kits. One of the kits I found had no obvious instructions, so I have included a lot of photos from various angles. The #2 x 1/4" sheet metal screws are to mount the servo horn to the bracket.
The camera is mounted with a 1/4-20 x 3/4" hex bolt. A 1/4-20 lock washer, washer and jam nut hold the bolt to the pan/tilt unit. A second 1/4-20 jam nut locks against the camera to hold it in place.
The pan/tilt unit is attached to the servo shelf with two #6-32 x 1/2" bolts, washers, and nuts.
Step 7: Wiring
Wiring the Power
To control the power to the motors, I used a lighted 12v automotive switch. It gives a great visible confirmation that the power is on. Crimp and solder on the connectors and use the thinner heat shrink tubing to cover the solder joint, then the bigger heat shrink to cover the connector itself.
It may be easier to put the connectors on the switch before using the larger heat shrink tubing since that will keep the connectors from being too tight on the switch tabs.
The pictures show the wiring setup, and it's pretty simple. The plug connector is for the battery pack, and the jack connector is so you can easily plug in the battery charger.
Step 8: Options
Making a stand is really helpful when you want to test the motors without the robot taking off. I made one with some scrap pine - see the picture to see how it was set up.
All projects are better with LEDs! :-) In this case they are used for more than just show. Since we can connect them to the Arduino via a small Electronic Speed Control, the Robot can use them to indicate status, which is a great tool for debugging the robot behavior. I had a couple ESCs that were forward only for aircraft, and perfect for controlling the LED strips also from an online hobby store.
Since we have an Arduino, you can also use RGB digital LEDs like Neopixels (WS2812b LEDs).
Step 9: RoboRealm
This robot uses only the camera as the sensor. You can easily add others to suit your application.
The RoboRealm machine vision system determines where the robot should go, and sends motor control commands over the serial port. The serial port is connected to an Arduino Uno and Adafruit Motor Control Shield. The Arduino runs a simple serial listener program to receive commands and run the motors and camera tilt servo.
To test out this robot, I designed a course with Fiducials as waypoint markers. Fiducials are simple black and white images that are easy for computer vision systems to detect. You can see some samples in the below pictures. Any kinds of Fiducials can be used, and even some regular pictures can be used - whatever works with the training, is easy enough for the robot to detect and isolate from a distance, and are not confusing with other images in the environment.
Using RoboRealm, I programmed the robot to visit each Fiducial in order - it's not much code since all the image processing is done with point-and-click modules. The .robo file is attached, and you can see how I used a simple state machine to mark each state as we moved between the markers. Since we can tell which way the Fiducials are facing, we also use the angle as a hint to tell the robot which way to start searching for the next Fiducial in the course. In the video on the first step, you can see the 3rd fiducial tilted 90 degrees to the left, telling the robot to look to the left rather than the right.
To use the attached code, download the .ino file and load it on your Arduino Uno.
The RoboRealm .robo file is the one I used for this demo. It has some extra filters and code from previous motors etc. that are all disabled or commented out, but you can see some of the possible variations. For the Fiducials, open the Fiducial module, and train it on the folder of attached Fiducials. You can use different ones, but will need to change the filenames at the top of the VBScript module.
Step 10: Nano-ITX Variant
I also built one with a Nano-ITX board that I had. I used a 12v power supply board, and mounted the hard drive under the mother board with extra angle brackets. Then, standoffs were used to hold the motherboard away fro the hard drive.
Step 11: DC Motor Option
I used DC motors for some earlier builds. They work fine, and you will need a motor controller like the RoboClaw. The use would be similar, with an Arduino running the RoboClaw for simplicity - they have Arduino sample code.
For this approach, I used DC gear-head motors, and BaneBots wheels (see pictures).
The extra screws and Keps nuts were for even support under an earlier version with a 12v 7ah lead acid gel cell battery.
Some of the Parts shown:
(2) Gear Head Motors - 12vdc 30:1 200rpm (6mm shaft) Lynxmotion GHM-16
(2) Quadrature Motor Encoders w/Cables Lynxmotion QME-01
(6) Motor screws - M3x6 (.5 pitch), pan head (MMC 91841a007)
(2) Wheels: 2-7/8" x 0.8", 1/2" Hex Mount at BaneBots
(2) Hub, Hex, Series 40, Set Screw, 6mm Bore, 2 Wide at BaneBots
(4) Motor connectors 22-18 AWG .110x.020 (McMaster 69525K56)