Geoff, named after Craig Ferguson’s sassy robot “co-host”, was born this past summer out of the desire to keep my coding skills sharp while applying my passion for technology. I’d been interested in robotics for quite some time, especially after I started seeing what Boston Dynamics was creating. Once I got over the fact that nothing I would make could match up, I looked at what my options were. Wheels are cheap so wheels it was. Instead of revolutionizing robotics, I create a simple goal for myself: create a wheeled robot with basic object avoidance. With this, I started down a technological path I had always wanted to travel.
The route I took had me learning more about electronics then coding. I decided to use the Arduino platform to power my robots brain because it was cheap and well supported. It also had just the right amount of power for what I wanted to do. My other options included the Lego NXT, or a variety of robot kits offered online powered by a variety of other micro-controllers.
Instead of buying an Arduino robotics kit straight away, I bought an Arduino starter’s kit that introduced me to basic electronics and interfacing them with the code. After wetting my feet in this, I jumped to soldering together my first Arduino shield. That was an education in and of itself but a successful one.
I was fairly surprised how easy it was to write the code once all the electronics were sorted. The Arduino is programmed in C++ and takes advantage of its ability to create objects. Libraries exist that define classes containing the methods and data used to control the various sensors, motors, and other electronics that can be connected. The initial (albeit messy) code I wrote to achieve my goal of object avoidance involved Geoff going forward while polling the infrared sensor mounted on the front of his chassis for objects that appear in front of him. Once objects entered a certain range of centimeters in front of him, he immediately starts to turn for a set period of time. Once the time is up, he polls the sensor to see if the coast is clear and if so continues going forward or else starts to turn again. Using a timer to control how long he turns for was a fast way of making sure he turned enough to clear his …ahem…wide… frame around objects as the field of view for the infrared sensor is very narrow especially the closer to the sensor objects are.
Git to it
I didn’t get much further then this basic object avoiding behaviour before school started. The first semester back did not leave me any time to take things any further. This semester though, I’d like to at least clean up the code and set up a git repo with at least a master and a dev branch. This semester has seen me get even more acquainted with git and coupled with encouragement to work on personal projects, I’d like to take this project further then adhoc object avoidance. With tools like git, it will be much easier to implement larger changes to the code such as implementing a Braitenberg vehicle.
What practical application does a project have? What problem does solve? Not a whole heck of a lot and not one a lot of people have or care about. But these are not concerns that projects like these are limited by. I started this project because I grew up loving sci-fi and a theme that came up quite often was synthetic life. Now I haven’t created life, but I’ve found a way to have the sci-fi geek in me work together with the computer science geek in me. And hell, robots aren’t going to build themselves; not yet at least!