Wire-suspended "delta robot"
My summer job this year involved the selection of 3D coordinates by mouse from a stereo image pair. To demonstrate the results, I built a cheap robot that picks up the selected object.
The robot borrows its geometry and name from delta robots, though instead of rigid arms it uses wire suspension. The parts cost only 100 EUR, including the laser-cut acrylic. The result is a bit prone to oscillations and the horizontal working area is small, but it fills its purpose.
The motors are SP2575M0206 unipolar stepper motors. These are very easy to control using logic-level N-fets, such as BSH105. The spindle is a piece of aluminum rod, with a 2mm hole drilled through and a set screw used to fix it to the motor axis.
The electronics are based on STM32L152 microcontroller. It connects directly to USB, and GPIO pins are used to control the motors.
The yellow wires also conduct power to the electromagnet. The wires have lead balls (fishing weights) that act as stoppers: at bootup, all the cables are wound in for 0.5 seconds, and remain at the position where they hit the stopper.
Laser cut acrylic forms the main part of the robot body. It is joined with three aluminum tubes, which also act as cable conduits. The pieces were designed in QCad, ordered from a local plastics shop and glued with cyanoacrylate.
The software for the robot is a quick two-day hack atop ChibiOS. The operating system comes with a simple command shell and USB support built-in, and the hardware abstraction layer simplifies configuring the peripherals.
The motors are controlled from interrupt routines, each driven by a separate timer. The STM32 controllers have a plenty of timers, and this allows setting a different speed for each motor.
Locations are converted from millimeter XYZ coordinates to cable lengths. The math is simply to calculate the distance from each motor to the desired point. A bit more involved is to limit the point location into the accessible area: the working volume is triangular, and a dot product is computed against every facet of the triangle. Finally, the motor speeds are calculated so that they all reach the target position at the same time. Libfixmath and libfixmatrix are used for the computations.
– Petteri Aimonen on 25.8.2012