Close

On Haptic Feedback

A project log for Pathfinder - Haptic Navigation

Wearable Navigation Assistance for the Blind

neilNeil 08/21/2014 at 06:100 Comments

At this point, "Haptic Feedback" seems more an art than a science.

One of the central challenges in this project is the communication of sensor data to the user in an intuitive manner. Now, blind people are often described as having significantly enhanced tactile senses, which would make sense considering the precision and sensitivity that's needed to quickly parse Braille. So when I first brainstormed feedback mechanisms, haptic feedback seemed an obvious choice. 

I started with this funny-looking prototype:

Prototype (marked "Alpha") on top, current LRA iPhone motor on the bottom

It was a DC brushed motor with a piece of rubber glued to the shaft. When the motor spun, the imbalanced weight would cause the whole frame ("frame" is a fancy word for a piece of PVC pipe, taped to the motor) to vibrate. 

The very first breadboard example just varied the voltage available to the motor (through PWM). I immediately ruled that out as an unusable option: It was near impossible to feel subtle changes in vibration intensity; in fact, I had an easier time listening to the motor's hum to discern changes.

I started working on a better feedback system right away. Not too many hours later, I had a new version setup that pulsed the motor regularly, and by varying the time between discrete pulses, I had a much more workable sensory range. In fact, I was so satisfied with this new pulse based model that I hardly changed it at all while the rest of the design evolved significantly. 

Switching to a small, disk ERM motor, not unlike the LRA version pictured above, allowed for much more refinement in each pulse, as the small motor was faster to spin up and slow down. 

But the software was still limited to a simple linear relationship between pulseDelay (time between discrete pulses, which are 20ms blocks of motor ON time) and distanceToObject. This setup provided a solid 10cm resolution over the 250cm target range, but 

1) that's not good enough (it never is!) and

2) 10cm is waaaay too large at ranges <50cm, and not nearly as important at ranges >150

So what we really need is a curve of some sort. I tried my hand at modeling something in Mathematica:

Old linear function is a line, New curve function is a curve

But most people who tried it felt little, if any, difference. 

That's when I realized what I really wanted: a logarithmic function. 

Humans don't feel numbers - what I mean by that is, we're not sensitive to numerical changes in the pulseDelay. Although we maybe can feel the difference between 1000ms and 500ms delays, we certainly don't think in terms of the time between the pulses: we're more inclined to say things like, "oh, the frequency just doubled." Or at least that's what makes sense in my head.

With that in mind, I believe an ideal "quantitative haptic feedback" system should be focused on a base 2 logarithmic scale, whereby a user can easily point to different points on the range between which the pulse frequency roughly doubles. 

This system has the fundamental feature of redistributing our finite feedback range (by the way, "feedback range" refers to the fact that the motor can only pulse so quickly and slowly without becoming annoying or insufficiently informative. In my experience, this range is from 50ms to ~1000ms.). Now, the pulse frequency will double over fairly small distance changes when in close proximity, while the same doubling points will be spaced much further apart at longer ranges.

So that's the game plan to bring our haptic feedback to the next level. I'm also looking into haptic driver ICs that allow us to:

1) use cool LRAs that are supposedly superior to ERMs in providing haptic feedback

2) potentially output cleaner, more controlled pulse than a simple square wave through a transistor.

More on the new IC soon! Unfortunately, they cost >$2 in small volumes, a big step over generic transistors...

Discussions