Stereo vision head with servo-driven pan & tilt
This webcam-based stereo vision head is fully calibrated using a checkerboard and using the camera calibration from OpenCV, so it can do 3D vision. But mainly it lives next to my PC for use as a webcam for Skype calls. One camera does tracking using OpenCV so the head follows me around, and the other camera does the Skype video.
The webcams in this setup are standard definition. The servos are Hitec and the controller is a Pololu Micro Maestro.
A while back I wanted to play with Microsoft Robotics Developer Studio. I had a couple of Parallax Basic Stamp boards and controllers kicking around, so I decided to clone the Parallax BoeBot since this is (or was) a supported robot under MRDS. Whereas the BoeBot uses continuous rotation servos, I used DC motors and a Pololu Qik 2s9v1 motor controller. A few simple mods to the BoeBot code and that was up and running. Also I made a little plug-in circuit board with a MAX232 converter so I could use a commercial Free2Move Serial Bluetooth plug that I had at that time. This allowed for controlling the BoeBot wirelessly using the MRDS tools.
The chassis parts are repurposed brackets from ActiveRobots. The motors are by Como Drills, and the wheels are from Active Robots but with the hubs bored out to fit these motor shafts.
Probably everyone that builds mobile robots will build a balancing ‘inverted pendulum’ robot at one stage. This one is a simple and cheap project with the chassis plates made from old CDs.
The controller is a Pololu Baby Orangutan based around an Atmel AT Mega 328P processor and is programmable in C using the AVR Studio IDE. I used a couple of different sensors to achieve control of the robot. It has a Sharp optical rangefinder which measures tilt by sensing the distance to the ground. It also has a 2-axis gyro and a 3-axis accelerometer. I played around with fuzzy control algorithms as well as conventional PID control.
Omni Roller Robot
This is an 8-wheel holonomic drive. Details are in this tutorial pdf along with some diagrams and simple math examples in Wolfram Alpha notation.
The robot is running Debian (Raspbian) on a Raspberry Pi, programmed in Python. The Python ‘numpy’ library is nice for doing the matrix multiplications needed to calculate the wheel velocities.
The Devantech motor controllers are controlled using the I2C interface, using the Python ‘smbus’ library. The Devantech I2C is 5 volt whereas the RPi ports are 3.3 volt, so a voltage level shifter is needed to connect these different boards.
In fact although the robot is pictured running Raspbian, it also has an Intel Galileo Gen 2 and I have run the robot off that controller, running Arduino Sketches. I have some code available: arduino sketch for the Galileo and Python for the RPi. Feel free to mail firstname.lastname@example.org for more info.
The ultimate plan is to add another module to this robot and use my Microsoft Kinect and a PC board to do navigation using the Kinect sensor. That’s a project waiting to be done.