Okay, my robot wasn’t exactly silent, but it was kind of stealthy (if slowness equates to stealthiness). It's also a play on words for Snack, because Android releases are based on tasty treats – in my case, Ice Cream Sandwich. To save you from falling asleep or getting the munchies, I’ll get off the topic of food and get on with the tutorial.
The day I was told we were making robots for our bonus goals, I went home and dreamed of lasers, rail guns, chemicals and an assortment of other deadly weapons to melt my fellow coworkers' robots. As long as it doesn’t hurt a human, Asimov would eagerly approve, right?
My heart was broken when I found out we could only destroy small toothpicks attached to our robots for the competition, and that we had some tough specifications to meet. Our robots had to fit in a 6x6-inch box and weigh no more than 1.5 pounds. How was I supposed to add all of my weapons with that kind of weight restriction?
It's probably for the best; my suggestions of such weapons were not looked highly upon, certainly out of fear of seeing little cute bots melt into a puddle of acrylic and metal bits in the arena. For the record, lasers can be really safe, especially when you’ve got a “kill” switch. All things said, there would have been safety goggles required for everyone watching the battle if I were allowed to go this route.
We were given six months to build a robot in our free time. After the holidays, Free Day, and an influx of college students needing last minute help with their projects, six months quickly dwindled down to a few weeks full of panic, caffeine, and Jamba Juice.
I decided early on that I wanted my robot to be ninja-themed, and that I wanted to control it with an Android device through Bluetooth. The easiest way to accomplish this was with the awesome IOIO. I decided to go with four large servos to drive my robot, and for my ninja theme, I needed two servos with plenty of torque to control the spinning ninja stars. Additionally, I got a fast-opening CO2 valve, originally intended to quickly inflate bike tires, along with some compressed CO2. The CO2 went along with the theme in that ninjas were known for using bombs that released smoke and shrapnel (usually consisting of iron or pottery). Then, the rapid release of compressed CO2 would be cold enough to condense the moisture in the surrounding air to create a quick haze. A lot of force is needed to open this valve, so I had to add another large servo to my parts list. If one thing was for sure, my bot’s combined servo torque was not something to be trifled with, and would also need a pretty serious battery.
My final parts list:
For my chassis, I picked out some sheets of acrylic with a sexy matte black finish, and a mirrored finish for the ninja stars, to cut in the laser cutter. I used Inkscape to get my designs ready to laser cut. Inkscape is an awesome Open Source SVG graphics editor. Here are my Inkscape design files:
The design had a couple of flaws when it came to the weight. After the initial weigh in, I realized I needed to drop a lot of the excess and trim my bot down to a lean, mean ninja machine. This prompted me to cut out some shapes in the acrylic chassis and switch to nylon screws. I also removed other design elements that covered up wires.
The final weight for SNAK ended up being 1 pound, 7.5 ounces with a full CO2 cartridge.
Coding for the IOIO was pretty fun. The quickest way to get set up with the IOIO is to follow the “IOIO Beginner’s Software Installation Guide”. Instead of using Eclipse v3.6.2, I used v3.7.2 without any problems. I originally had the Ice Cream Sandwich SDK components and it worked great! Later on, I switched to the Android 2.3.3 SDK so my controller could run on most phones as well. My GUI code was very simple: One toggle button, two seekbars, and two joysticks from an opensource library, with some minor modifications for multi-touch. Here are a few links which greatly helped me develop this:
If you run into trouble while developing for the IOIO, I recommend checking out the IOIO Discussion Group for help.
I didn’t need to make any changes in order for my code to work over Bluetooth, which was a great relief – I simply plugged in a Bluetooth dongle, included the IOIOLibBT library, paired my tablet, and everything just worked! After I was done coding, I had a moving robot with moving ninja stars. When I tested my CO2, it worked great and had a substantial amount of force behind it – hopefully enough to take off some toothpicks.
My code for the IOIO can be found here
For my five battles, SNAK managed to come out with all of its toothpicks untouched. Unfortunately, I rushed my second revision of the ninja stars and didn’t have enough time to firmly mount them to the servos. This lead to them coming loose in the arena, and without molten polymorph handy, I had to resort to zip-tying them to the side of the servos. On top of that, SNAK didn’t have enough training with Sensei, which in the heat of battle caused some disorientation (*cough* like nearly driving completely off the arena platform repeatedly), and lead to him being flipped a couple of times.
Overall, my robot was less of a killer and more of a lover at the time of battle. It was a fun, simple, little bot that had a lot of torque and was fun to watch and control. The CO2 was fun, but I didn’t get to use it much. I was focused on ramming the other bots into a trap tile, or fleeing to protect my toothpicks.
In the end, I got to learn quite a bit about developing for the IOIO and designing an effective robot. I hope this gives you a little insight into my Android robot. Now if you’ll excuse me, SNAK is about to be outfitted with a high powered laser, rail gun, or turbine of some sort.