In the past few weeks, we've delved deeply into investigation of hardware options. So many possibilities exist for a free-form project such as this, it can quickly become overwhelming trying to establish a full-stack solution. Luckily, we had some touch points to help guide our decision. Here's how we proceeded through.
First off, we know our limiting factors. The most concrete element of this project is the RC car itself, which we simply cannot replace with our budget and time. So that's a constant, and the first dependent variable is the need for a linear actuator to raise and lower the wheels. Next, there's the requirement that everything from power, to computation, to actuation, has to fit within or atop the original chassis. This acts as our base problem statement.
Starting here leads us to an easy decision with actuators- the Firgelli line. As a Canadian company with a proven track record, we were happy to give their products a shot. They have a broad selection of sizes and power, and after measuring twice, we found the perfect size to fit in the space that the old spring suspension would leave. They come with many options for driver mode, we took the PWM input because of the robustness of such a simple method. To sweeten the deal, we were able to get some of their new P16 models with a tremendous student discount. They're en route right now and we couldn't be more excited! Thanks, Firgelli!
Next up, we have the Xbox Kinect. I bought this stellar 3D camera for only ten bucks, and I'm still thoroughly flabbergasted by what it can do, even after using it for a few months. It outputs a custom format RGBA-D image, which stands for Red Green Blue Alpha - Depth. Basically, it's a picture with additional depth info gathered from the time-of-flight sensing system. There's lots of great explanations for how exactly the Kinect gathers that info, so I won't elaborate here- but definitely worth a quick AskJeeves!
Finally, we need a system to translate the depth map input to the wheel actuator output. This is, in general, a control system- so we need some kind of PLC (Programmable Logic Controller), right? But of course, this is 2015. There's no point in using over-specialized hardware when general computers can provide more than enough flexibility and firepower to manage this control problem. We decided on the recently released Raspberry Pi Model B +. This would provide 1 GB of RAM and 900 MHz of processing speed. We think this will be enough to handle the relatively heavy 3D processing load... after some downsampling, of course. More than anything, the minimal cost and wide support were the deciding factors here. We had allocated most of our budget towards the actuators, so we couldn't get any more processing power than this. No problem! Lots of the rough work can be accomplished on a laptop running Ubuntu, and we can definitely optimize for efficiency when we run it on the Pi alone.
So, that's the bulk of the hardware, apart from some of the minor acceleration and gyro sensors for testing and validation. What can we use to digitally glue all these components together? I'll discuss that next, stay tuned!