This is a sensor designed to be installed on the fingertip of robotic hands. It uses an Avago ADNS-9500 laser mouse sensor to acquire information about the surface of the grasped objects, and detect slippage as well as distance to the object.
Both software and hardware are available under free licenses. The software is released under the GPL, and the hardware board designs are available under the CC-BY-SA 3.0 license.
Please see images of the sensor in this flickr gallery.
The system is composed of 3 boards, the first one is the Floss-JTAG, then an SPI-Controller board based on a STM32 chip, and the mouse sensor board that interfaces to the ADNS9500.
We presented this paper at the IEEE/RSJ International Conference in Robotics and Automation 2012 in Algarve, Portugal.
It describes the sensor and how we use it to improve robotic grasping and manipulation.
We are happy to hear your comments and suggestions. Also, let us know if you would like to integrate the sensor in your own robot hand or gripper. We could even supply some PCBs to make this easier. Find the author's contact info here.
Presentation Slides used at IROS 2012.
You can get the source code and board design made in Eagle here:
git clone http://toychest.in.tum.de/users/maldonado/fingertip.git
To install the ARM Toolchain:
Install the following packages:
apt-get install flex bison libgmp3-dev libmpfr-dev libncurses5-dev libmpc-dev autoconf texinfo build-essential
or in Debian/Ubuntu give this a try (or gcc-4.6)
apt-get build-dep gcc-4.5
Install xstow:
apt-get install xstow
Also install openocd and libftdi-dev
apt-get install openocd libftdi-dev
Add a udev rule so that the programmer can be accessed by everyone: As root:
echo 'SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="0403", ATTR{idProduct}=="6010", MODE="0666"' >> /etc/udev/rules.d/99-ftdi.rules
And restart udev:
/etc/init.d/udev restart
Make sure that ~/local/bin is in your path:
echo "export PATH=${HOME}/local/bin:$PATH" >> ~/.bashrc
Get a new terminal (that should load your .bashrc) and continue:
Go to the repository, and get the script to compile the cross-compiling toolchain:
mkdir -p ~/local/DIR cd fingertip/source mkdir /tmp/compile-arm cp summon-arm-toolchain-elf-no_multilib /tmp/compile-arm cd /tmp/compile-arm ./summon-arm-toolchain-elf-no_multilib
If you have an 64bit Ubuntu 10.10 Linux system, you can get the compiled toolchain here
Uncompress the file in your local/DIR directory:
mkdir -p ~/local/DIR tar -xzf arm-toolchain-elf-nomultilib.tgz ~/local/DIR
Use xstow to install the files to your ~/local directory
cd ~/local/DIR xstow arm-toolchain-elf-nomultilib
Information about the distance classification system is here
This small board has the needed circuitry for the ADNS-9500 and is soldered directly on top of the sensor. It mostly consists of a P-MOSFET for the laser diode, and capacitors for voltage stabilization.
Bill of Materials:
Quantity | Device | Footprint | Value | Refdes | Digikey Part# |
---|---|---|---|---|---|
3 | Ceramic Capacitor | 0603 | 100nF | C1, C3, C5 | |
3 | Tantalum Capacitor | 3216/A | 10uF | C2, C4, C6 | |
1 | Ceramic Capacitor | 0603 | 10nF | C7 | |
1 | Ceramic Capacitor | 0603 | 1uF | C8 | |
1 | Ceramic Capacitor | 0603 | 470pF | C9 | |
1 | P-Mosfet NTA4151PT1G | SC75 | Q1 | NTA4151PT1GOSCT-ND | |
1 | Molex Picoblade conn. header 1.25mm (53261-0671) | 6pos | X1 | WM7624CT-ND | |
1 | ADNS9500 Laser sensor | U1 | |||
1 | ADNS-6190-002 Lens for ADNS9500 |
This board is has an STM32 microcontroller with two independent SPI buses, and a high speed UART to connect to the Floss-JTAG. It has connectors for four laser mouse sensors. The firmware of the microcontroller is responsible for initializing the laser mouse sensors correctly, loading their firmware, and obtaining data and images for transmission to the PC.
Bill of Materials:
Quantity | Device | Footprint | Value | Refdes | Digikey Part# | Mouser Part# |
---|---|---|---|---|---|---|
3 | Ceramic Capacitor | 0603 | 10nF | C1, C4, C10 | ||
4 | Ceramic Capacitor | 0603 | 100nF | C2, C6, C7, C8 | ||
1 | Ceramic Capacitor | 0603 | 1uF | C3 | ||
3 | Tantalum Capacitor | 3216/A | 4.7uF | C5, C9, C11 | ||
9 | Resistor | 0603 | 10kOhm | R1, R2, R7-R13 | ||
2 | Resistor | 0603 | 1.2kOhm | R3, R4 | ||
1 | Resistor | 0603 | 470Ohm | R5 | ||
1 | Resistor | 0603 | 2.2kOhm | R6 | ||
2 | Resistor | 0603 | 100Ohm | R14, R15 | ||
1 | uC STM32 (STM32F103CBT6) | TQFP48 | IC1 | 497-6288-ND | ||
1 | LDO Voltage regulator (LP2992AIM5-3.3/NOPB) (LFEA) | SOT23-5 | 3.3V | IC2 | LP2992AIM5-3.3CT-ND | |
1 | LED (LNJ414K84RA) | 0603 | Amber | LED1 | P11470CT-ND | |
1 | RGB LED (LRTB G6TG-TU7+VV7+ST7-IB) | PLCC6 | LED2 | 475-1319-1-ND | 593-VAOS-5050RGBW1 | |
1 | 8MHz Oscillator (ASE-8.000MHZ-LC-T) | Q1 | 535-9558-1-ND | 788-8002AI233E-8.0T | ||
1 | Molex Picoblade conn. header 1.25mm (53261-0471) | 4pos | UART | WM7622CT-ND | 538-53261-0871 | |
4 | Molex Picoblade conn. header 1.25mm (53261-0671) | 6pos | X1, X2, X3, X4 | WM7624CT-ND | 538-53261-0671 | |
1 | Molex Picoblade conn. header 1.25mm (53261-0871) | 8pos | JTAG | WM7626CT-ND | 538-53261-0471 |
We used nice Molex connectors because they are small, solid and reliable. The only negative is that the connectors and the crimping tool are expensive. If you don't need to make a lot of cables, buying pre-terminated wires is cheaper.
See Mouser's catalog page describing the Picoblade series.
Ready-made jumper wires:
Description | Farnell Part# |
---|---|
MOLEX - 06-66-0012 - Pre Terminated Jumper Wire (10x 28AWG 150mm Socket-Socket) | 1125272 |
MOLEX - 06-66-0012 - Pre Terminated Jumper Wire (10x 28AWG 300mm Socket-Socket) | 1125274 |
Parts needed:
Serial Cable: FLOSS-JTAG ↔ SPI-Controller
Quantity | Description | Molex Part# |
---|---|---|
2 | Molex Picoblade wire to wire housing, female, 1.25mm pitch, 4pos | 51021-0400 |
4 | Pre-terminated jumper wires |
JTAG Cable: FLOSS-JTAG ↔ SPI-Controller
Quantity | Description | Molex Part# |
---|---|---|
2 | Molex Picoblade wire to wire housing, female, 1.25mm pitch, 8pos | 51021-0800 |
8 | Pre-terminated jumper wires |
SPI Cable: SPI-Controller ↔ Mouse sensor
Quantity | Description | Molex Part# |
---|---|---|
2 | Molex Picoblade wire to wire housing, female, 1.25mm pitch, 6pos | 51021-0600 |
6 | Pre-terminated jumper wires |
Pinouts:
Serial Cable Pinout:
Pin # (Side A) | Pin # (Side B) |
---|---|
1 | 4 |
2 | 2 |
3 | 3 |
4 | 1 |
Basically, connectors facing away from each other, and cables going straight from one to the other, except the TXD, RXD pins in the middle, that are reversed.
JTAG Cable Pinout:
Pin # (Side A) | Pin # (Side B) |
---|---|
1 | 8 |
2 | 7 |
3 | 6 |
4 | 5 |
5 | 4 |
6 | 3 |
7 | 2 |
8 | 1 |
Basically, connectors facing away from each other, and cables going straight from one to the other.
SPI Cable Pinout:
Pin # (Side A) | Pin # (Side B) |
---|---|
1 | 6 |
2 | 5 |
3 | 4 |
4 | 3 |
5 | 2 |
6 | 1 |
Basically, connectors facing away from each other, and cables going straight from one to the other.
For recognizing the surface from the fingertip data, Humberto did several experiments, explained here
For information about how to use ./bin/fingerpub and ./bin/surfaceClassifier in order to do surface recognition please see here