320 likes | 504 Views
Multi-Touch Navigation Engine. Presented by Team Extra Touch: Chris Jones Shuopeng Yuan Nathan Wiedeback. Multi-Touch Navigation Engine. Background System Design Accomplishments. Background. AIS offers single-touch Multi-touch is the “cool new thing” iPhone , MacBook MS Surface
E N D
Multi-Touch Navigation Engine Presented by Team Extra Touch: Chris Jones Shuopeng Yuan Nathan Wiedeback
Multi-Touch Navigation Engine • Background • System Design • Accomplishments
Background • AIS offers single-touch • Multi-touch is the “cool new thing” • iPhone, MacBook • MS Surface • Mitch Butzer had good ideas…
Project Specifications • Microcontroller-based • Written in C • 2 - 6 independent control channels • Defined at compile time • Recognize defined patterns • e.g., finger but not palm
Serial Stream Parser 74 byte “packets” from the screen Processed to get 32 sensor values, etc. Subtract the lowest value from each • (Little-endian) • Average: 0x488B = 18,571 • First sensor: 0x4886 = 18,566
Interpolator Red dots: intersections of sensors (16 x 16) Green dot `P`: interpolated point Set a threshold and discretize at the end Each pixel -> 1 or 0 Image source: Wikipedia
Phantom Filter One touch Two touches Phantom touches (unfiltered) • Intersections -> phantom touches • Compare touches to last frame for filtering
Pattern Recognizer: Flowchart Data In : Frame of Data Resolution: 240 * 180
Blob Classification and Checking Engine Input Example: Resolution 60*20
Blob edge finding algorithm First edge Last edge
Blob Classification and Checking Engine Input Example: Resolution 60*20 -- two blobs found
Voronoi Skeleton Algorithm Ideal case Actual case
Slope Algorithm Linear skeleton should have the same angle at each point. (a1 = a2 = a3 = a4) Linear -> accept and find center Nonlinear -> reject
Channel Frames – Overall Look Current Form Potential Form
Current SetupChannel Frames Channel 1 Frame Channel 2 Frame
Channel Assignment – How it Works Channel 1 Frame Channel 2 Frame Input: Coordinate Data (3,3) touched Channel 3 Frame Output to One Touch per Channel Limiter: Coordinates 3,3 Channel 3 We have a match at Channel 3!
One Touch per Channel Limiting Channel A -Phase 1 Reduction Channel A – 3 touches Channel A - Phase 2 Reduction
Output Data Altered Coordinate Array Channel Array
Accomplishments • Translate sensor wires into 16x16 matrix • Interpolate • Recognize finger touches, reject other shapes • Assign to either of two channels
Challenges Challenge Solution Compare to previous frame Low resolution (240 x 180 ?) for proof-of-concept Make each stage’s data available at the output • Phantom touches • “[40K] ought to be enough for anybody!” • Need “tap points” for intermediate data
Future • Serial interrupt issues • Phantom filtering implementation • Would also enable more shapes • Different touchscreen technology?
Data In: Center coordinates (X,Y) Processing: Data gets transformed into a 2d array, and the compared against each channel frame to determine its channel. Channel frames are defined before compile. Data Out: (X,Y) coordinates with channel data attached. Details: Aiming for 2 channels initially Should be simple to add channels in the final iteration. Channel Assignment – Text Overview
Summary • Major design: “Proof-of-concept” • 240 x 180 x 1-bit “color” • Simple phantom filtering • Accept a single finger per channel, reject other cases • Two channels