====== Fingertip Laser Sensor ====== {{:projects:fingertip_on_paper.jpg?250x240|Fingertip sensor on paper (uses an ADNS-9500)}} {{:projects:fingertip_sensor_on_hand.jpg?250x240|Fingertip sensor}} {{:projects:fingertip_on_hand.jpg?250x240|Sensor installed on a DLR/HIT hand}} 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 [[http://www.flickr.com/photos/amaldo/sets/72157622618481171/|flickr gallery]]. The system is composed of 3 boards, the first one is the [[http://www.randomprojects.org/wiki/Floss-JTAG|Floss-JTAG]], then an SPI-Controller board based on a STM32 chip, and the mouse sensor board that interfaces to the ADNS9500. ====== Paper at IROS2012 ====== We presented [[https://ias.in.tum.de/_media/spezial/bib/maldonado12improving.pdf|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 [[http://ai.uni-bremen.de/team/alexis_maldonado|here]]. {{:projects:iros-presentation_small.pdf|Presentation Slides}} used at IROS 2012. ====== Repository ====== You can get the source code and board design made in Eagle here: git clone http://toychest.in.tum.de/users/maldonado/fingertip.git ====== ARM Toolchain ====== 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: ===== Compile the toolchain ===== 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 ===== Get a pre-compiled tolchain for Ubuntu10.10 64bit ===== If you have an 64bit Ubuntu 10.10 Linux system, you can get the compiled toolchain {{:projects:arm-toolchain-elf-nomultilib.tgz|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 ====== Distance Classification ====== Information about the distance classification system is [[[projects:fingertip_distance]|here]] ===== Laser mouse sensor board ===== {{:projects:adns_board.png?200|Laser mouse sensor board for ADNS-9500}} 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 | | | | | ===== SPI Controller ===== {{:projects:spictrl.png?400|SPI controller board, using the STM32}} 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 | ===== Interconection Cables ===== 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 {{:ias:manuals:mouser_molex_picoblade.pdf|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. ===== Surface recognition ===== For recognizing the surface from the fingertip data, Humberto did several experiments, explained [[fingertip_surface|here]] For information about how to use ./bin/fingerpub and ./bin/surfaceClassifier in order to do surface recognition please see [[surface_classifier|here]] ===== Contributors ===== * Alexis Maldonado * Piotr Esden-Tempski * Julian Brunner * Frank Ehmann * Humberto Alvarez