Since I've been tagged a couple of times (thanks Jean-Paul Boodhoo and Mike Nichols), I'll start off quickly with a few things you don't know but have been absolutely dying to know about me:
- Back in the day (the pre-and-during punch card days), both of my parents were programmers.
- I grew up on a beef farm in Fayetteville, Ohio which my parents still run. My father's planning on selling some of the cattle to grow grapes...when I grow up, I'm going to grow grapes, too.
- I spent six years in the Air National Guard and received my honorable discharge in 2005 as a Captain. In fact, I (probably) wouldn't be programming if it weren't for the Air Force...they offered me a hefty ROTC scholarship if I would change my major from Mechanical Engineering to Computer Science just two weeks before I was to start school...I'll let you guess what I chose.
- I almost switched to marine biology while I was living in San Fransisco and getting completely burned out writing Active Server Pages. Once .NET was released and I heard of something called "OOP," I've never questioned my career path again.
- I'm a singularitarian and look forward to downloading my mind to a robot. In the coming years, I hope to return to school to pursue a PhD in robotics AI.
Getting Started in Robotics
On that note, there are most likely others looking forward to the future of robotics and perhaps even wanting to take a shot at building/programming one. Robotics has certainly gotten a lot of press lately, and, even better, has come along with a number of hardware choices allowing many - specifically those not funded by university grants - to get into the game. The following is an approach that has worked for me to get into programming robotics:
- Read An Introduction to AI Robotics by Robin Murphy. This book gives a terrific introduction to the fundamental challenges within robotics, general algorithmic approaches, and an overview of various AI architectures including hierarchal, reactive (behavior-based) and hybrid. This book is more theory than practice but serves as a perfect starting point to the field. It's an easy and enjoyable read.
- In conjunction with reading Robot Programming: A Practical Guide to Behavior-Based Robotics, get Lego Mindstorm NXT to get into behavior-based robotics and to get a feel for building your own robots. Lego has done a superb job of delivering an intuitive IDE for programming behavior-based robotics with a simple drag-and-drop interface. To take it a bit further, you can control your Lego robot, via Bluetooth, with Microsoft Robotics Studio. With this, you can take full control of your Lego robots with C# or any other .NET language. (If you're not interested in developing mobile robotics, steps three and four can be skipped.)
- After getting into robot-programming basics, get iRobot Create (and here) so you can experiment with more advanced algorithms and a lot more sensors - 32 to be exact. iRobot Create provides a solid and inexpensive starting point for getting into mobile robotics. For an almost exhaustive introduction to the challenges of mobile robotics, and concrete algorithms for implementing your own solutions, read Probabilistic Robotics. This book is absolutely essential for implementing the latest techniques for mobile robot navigation. This text is a huge leap from the last two books mentioned and almost reads more like a grad-school book on statistics rather than programming; but it also provides enough meat, algorithmically speaking, to enable you to develop highly sophisticated software. It's a daunting read, so be prepared! Just as important, this book gives you the proper vocabulary to mine Google for example implementations and bleeding edge techniques. A couple Googled examples include SLAM for Dummies and, taking it just a wee bit further, using Rao-Blackwellised particle filtering for dynamic Bayesian networks, in conjunction with Scale Invariant Feature Transform implementations, to implement your own vision-based SLAM system. (How's that for buzz-word mania...even if you don't program one, it certainly expands your Scrabble options.)
- If you've pushed iRobot Create to its limits, it's probably time to upgrade its sensor platform. A low cost "next step" is to extend this mobile platform with additional sonar sensors such as the SensComp Instrument Package and related multiplexer, if you're looking to add a few. With the addition of these sensors, there's little within Probabilistic Robotics that you will not be able to do. If your budget allows (i.e. you have a few grand sitting around collecting dust), you can greatly improve your research base by augmenting your mobile robot platform with a SICK LMS 200 laser rangefinder which was used by Stanford to win the 2006 DARPA Grand Challenge. The SICK LMS 200 seems ubiquitous among serious researchers in mobile robotics. (If anyone knows where I can get my hands on one for part-time use, please let me know!)
- Although mobile robotics is exciting and challenging, it's only one aspect of programming robotics. Another substantial area of robotics is manipulating the world around it. To do this at home, you can mount a robotic arm onto the iRobot Create to take your robotic research to a whole new level. (You may also use the arm by itself if you're not interested in the "mobile" aspect of robotics.) Affordable, yet still advanced, options include LynxMotion's Lynx 5 ($275) & Lynx 6 ($388) which also integrate with Microsoft Robotics Studio. To get a bit more lifting power, but at a bit more cost, you should consider CrustCrawler's SG5-UT ($499) & SG6-UT ($549) robotic arms. CrustCrawler's arms also include mounting areas for cameras and other equipment. You can find videos on the web of people using these arms to perform basic actions (WMV) and even play tic-tac-toe (YouTube).
- After playing around a bit with the mobile platform and/or robotic arm, you'll want to begin doing something more interesting. ("More" here is a relative term.) To get to this next level, you'll need a good primer on artificial intelligence. The book Artificial Intelligence: A Modern Approach is the de facto starting point to get an overview of all fields of AI. This book is much simpler than Probabilistic Robotics but still provides enough content to develop working solutions. Topics include game theory (so you can get that arm to play connect four) and Bayesian networks, which are extensively used within probabilistic robotics. This book also provides a spring-board for pursuing specific areas of AI research. (Reading this also helps with the other areas of robotics already mentioned, so it's an appropriate read at any time.)
The above provides a good place to start for getting into the field of programming robotics and provides enough challenges for years worth of development research. After getting through a couple of the mentioned texts, you'll be armed with the knowledge to develop your own robotic solutions and will know what to do to pursue further specialization. Robotics is a very exciting field of programming; and tools such as Lego Mindstorm NXT, Microsoft Robotics Studio, iRobot Create and inexpensive robotic arms are allowing many more of us to get in on the fun.
PS - If you're looking for results of the third refactoring challenge, they're coming within the next day or two!
01-16-2007 1:22 PM