Sensing Projects


The Master Plan


Here are the slides I showed.


Depth Camera

Currently the Bluetechnix Sentis M100 depth camera is our best option. It can operate at very close range (up to a few cm) in full sunlight. When it becomes available, the Sentis P510 adds more illumination (helps deal with sunlight) and a color visible light camera.

Here is a movie of simulated grasping.

Here is the state of things.

How to program the camera? The camera has an ethernet interface. There is a TCP/IP control interface, and visual data is sent as UDP packets. To talk to the depth camera, you need to set an ethernet port to:

address 192.168.0.1
mask: 255.255.255.0
gateway 192.168.0.1
no DNS servers

All the info and code I developed for the camera is on the machine drc-dev-2 (130.215.73.140) in /home/cga/m100. You can log in using the standard atlas account and password. Here is info on what is there:

m100/manual      all the manuals. some are just html files.

m100/application    Bluetechnix example code
m100/application/BltTofVisualizer_V3.0.0  Windows demo code I found very
                                          useful to run the camera and see
                                          what it was doing.
m100/application/GraphicalStreamAnalyserLite  Windows demo code. Does
                                              something.
m100/application/Sentis-ToF-M100-Visualizer   Windows demo code. Does
                                              something
m100/application/Sentis-ToF-M100-Visualizer_V2.0.0_source_20130814
             Windows source
m100/application/sentis_tof_m100_api_lib_20140115  API and example code
                         that can be compiled for both Linux and Windows
m100/application/argos3d_p100_ros_pkg-master   ROS package for closely
             related P100 sensor, Check on web for more recent source.

m100/bin  compiled versions of
             m100/application/sentis_tof_m100_api_lib_20140115 for linux.

m100/firmware    presumably stuff related to firmware. I ignored it.

m100/test1/       my code. I wrote my own UDP multicast packet receiver.
                  I used BltTofVisualizer_V3.0.0 on a windows machine to
                  set the camera up, and then used a Linux machine to
                  actually collect data.
m100/test1/test1.c    My basic test program. Grabs frames.
m100/test1/collect-average.c   Averages depth images
m100/test1/make-movie.c        How I made the exciting movies.
              Takes 2000 frames and writes them to ./tmp
m100/test1/make-png.c make-png2.c sh-make-png.c utilities.c: utility
                                                             programs
m100/test1/data data for the movies
              Each directory has a .dat file for each frame.
              The depth and intensity data is originally 16 bit unsigned
              integers (depth in mm and intensity in unknown units).
              My .dat format just has everything as floats. First the
              entire depth image, and then the entire intensity image.
              The m*.png files are the frames of the movies (both
              intensity and depth in one image). The d*.png are just the
              depth images, and the i*.png are just the intensity images.
              Note that you have to make arbitrary scaling choices to
              generate these images. You can edit the program
              make-png2.c to change the choices and regenerate the
              .png files. (see m100/doit).

If you let the camera run continuously, it heats up and may overheat. Don't just let it run continuously at full blast. You can set the frame rate to 1Hz or just unplug it when not in use.

Here are things to work on:


Range Sensor Arrays

Use new digital Sharp sensor GP2Y0E02B with I2C bus. The arrangement of sensors in the array might look like this:

...

Programming Guide

Related Product GP2Y0E03 with both analog out and I2C bus.

My Arduino code to read the analog out of the GP2Y0E03.

Arduino note: you need to set the baud rate of the terminal window to match the baud rate set by Seril.begin(xxx) in your program.

Arduino Wire Library is used to drive the I2C bus.

Here are things to work on:


Distributed IMUs

We would like to put IMUs on every link connected by a SPI network (Arduino SPI Library).

We are currently using the MPU-6500 from Invensense.

USB Evaluation Board: Invensense documentation and software. Read notes.txt to get descriptions of the software. The USB evaluation board use UDL1-1.zip which works on only some versions of Windows.

Small Evaluation Board: Made by embeddedmasters.com. See the data sheet and schematic available from that page. Note that you have to remove jumpers to make SPI work.

Here are things to work on:


Slip and Force Sensing Using Optical Mice

We can put an optical mouse in the sole of the foot pointed upwards to measure sideways force (the amount of soft material deformation) and slip (the amount the ground moves under the foot), as is shown in this picture:

Currently we are using an Avago ADNS 9800 chip which is sold in this circuit board with this code. We are going to need to set up an SPI network to handle multiple devices (Arduino SPI Library). I used an Arduino Due board with the following pinout:

Where are the ICSP pins on an Arduino?

My Arduino code for the Due to read the mouse. I couldn't get the ADNS9800test-serial code to work since interrupts didn't work. [UPDATE: New code as of Sep 26] [UPDATE: The MOTION line is now working (goes low when data is available), so interrupts should now work. We will probably be polling in actual use, since the computer will be dedicated to this task.]

Arduino note: you need to include My Arduino code in the sketch above for the firmward variables to be defined.

Arduino note: you need to set the baud rate of the terminal window to match the baud rate set by Seril.begin(xxx) in your program.

I would like to be able to use the Cypress Semiconductor chip which is programmable (more info), and we could customize the optical sensor to do exactly what we want

The sensor in the steelseries mouse seems to be a CYONS1002-LBXC. The closest data sheet I could find is the CYONS1001x data sheet. This does not seem to be the programmable version we were looking for, but it is a potential alternative to the Avago device. Here is my code to talk to it.

We could also develop our own custom sensor.

Here are things to work on:


Networking

We need to get all this sensor information onto an ethernet wire, ultimately. We can network everything with ethernet (see Arduino ethernet shield) or we can create a USB network with the Arduino Due and its two USB ports.

The version 1.0 network plan: There is an Arduino EtherDue (faster clock, two i2c ports, on board ethernet) on each major link. These are connected by a gigabit switch in the torso. The IMUs are connected by SPI. The range finders are connected by I2C (up to 32 GP2Y0E02B can be connected given two I2C ports). The foot with the optical mice stuff will be a special case. This networking plan has 3-5 ethernet cables crossing major joints (hip, shoulder, knee, elbow). An alternative is to have each Arduino have two network ports, and have a linear chain of Arduinos connected by short ethernet cables. The problems with this approach are 1) we have to make a dual ethernet shield, and 2) if the chain fails anywhere, we lose everything down stream. The V1 network plan is more robust: if an ethernet connection fails, we lose sensing on a single link.


ROS interface

We need to create a ROS interface for all this information.


Cheap Color Cameras

We could develop cheap tsk oriented color camera sensing using Arduinos or Rasberry PIs to process camera data and put it on the ethernet.


Building a new foot

Another way to get Fx, Fy, and Mz on the feet is to build our own foot with our own force sensors. I am considering this option.

WPI Prof. C. Onal is working on Hall effect based sensors. This might be workable with just instrumenting the current Vibram sole.

www.optoforce.com is proposing us using some version of their six axis force torque sensor in a foot shape. Problems are: 1) too compiant? and 2) we don't know if the sensors degrade because of hydraulic oil (they are testing this).

Tecgihan makes a low profile 3 axis force sensor, the USL08-H6-2kN. We would use four for each foot (expensive). Needs big electronics box, and we don't know how it reacts to hydraulic oil.

PCB Piezotronics makes a low profile 3 axis force sensor. They said: To submerge a sensor, we offer the "W" (Water Resistant Cable) option. With this option a sensor can be submerged for a few days in shallow depth. You would then need to clean it and dry it out before submerging again. The only Series 260A that we have made with this option is W260A01/010G10 [Triax ICP force sensor, 1k lb (Fz), 500 lb (Fx,y), 2.5 mV/lb (z), 10 mV/lb (x, y), with attached & sealed water-resistant 10-ft cable].

Being water resistant is not the same thing as being resistant to hydraulic oil.