发新话题
打印

大尺寸投射式電容多點觸控開發測試 2

大尺寸投射式電容多點觸控開發測試 2

以下文章來源 blog.xi-ji.com
" J( K  k8 A0 a5 `" V" p( M6 B$ r2 D2 M& H
針對上次開發的測試程式作了許多的修正首先是將處理電容觸控訊號的部份把它物件化, 因為程式是使用WPF+VB下開發的,  所以物件化的好處就是容易除錯跟修改, 還有可以提升一些效能. 另外則增加了以下幾個功能1. JitterFix - 針對電容訊號抖動的部份進行過濾跟修正, 以便增加判定的穩定性2. AutoTune - 是將電容訊號的變化做 Smooth 的處理, 讓瞬時間的雜訊可以被抑制3. AutoSnap - 自動回覆功能, 當電容訊號處在長時間存在的雜訊干擾自動做消除的功能
1 G& U2 q2 i' ^- @. N% D2 I) j8 M& p
4. WaveVector - 主要是加入波形向量化資訊, 方便取得方波波型的變化量, 並且透過變化量轉換為狀態時, 自動將方波作平整化
- J7 G2 [( a+ t' j6 E1 f: C. I; ^
8 k1 _" U1 d, `7 W$ h0 b( C! x1 [由於目前所使用的投射式觸控模產生的資訊為 256*32 的方波波型,  因此特別針對此波型作特殊處理, 但是VB速度有限, 所以會有資料遺失的狀況產生, 至於為什麼不用C開發呢, 當然是為了觀看結果方便, 如過使用C開發會花很多時間在如何把結果呈現在畫面上, 故採用WPF為基礎, 這樣對於畫面的呈現完全交給WPF處理而不需要直接叫用Windows  GDI的API, 可以節省很多時間, 當然未來測試完成後, 因為目前已改成使用物件寫法, 可以輕易的將處理資料的Parser輕鬆的轉換為C& n$ M# u5 h& A) N: s4 x, s
0 @1 w: k& @6 t; Z% n
下一版本會將物件重新再改寫一次, 因為這次開發中使用了陣列, 並且利用回圈去處理陣列資訊, 導致太多回圈時間, 托慢資料Parse速度, 下一版的物件會把部分陣列轉換成集合物件, 這樣對於很多排序或運算的工作可以交回去給原本WPF內的物件去做, 可以提升速度, 其次就是要把這次開發的功能重新做最佳化的動作, 預計該版完成後, 便可以進行下一階段, 將各點資訊取出, 並且透過定位換算成座標, 最後加入手勢判別, 不過可能考慮手勢判別在前期就做整合, 因為很多手勢其實不需要利用定位後的座標來操作, 因此在沒有定位座標的換算下, 相對處理速度會比換算成螢幕的實際座標來的快, 所以考慮先把一些簡單的手勢做整合, 不過一切都要等測試過下一版本的速度之後才能確認啦~呵呵
+ o6 N$ Y9 B( `: D$ e: q# D. v* ]& ]: e" H4 t, ~( {' U# Y
補充說明, 這次程式本來有採用 .Net 的 BackgroundWorker 這個物件去做多執行緒的處理, 結果發現, WPF 的 UI 處理速度還蠻慢的, 一但使用多執行緒的處理, 導致接收資料的 Thread 一進來就交給 Parser 的 Thread 去處理, 然後繼續接收資料, Parser 則是一處理完就去叫 UI 的 Thread 來處理, 結果導致, 接收資料的 Thread 會去一直收資料進來, Parser 處理完就一直丟資料給 UI, 結果整個 UI 就拖垮了, 完全 Hang 在那邊不會更新了, 後來只好改回用接收 Thread 的資料去把資料 Parse 完以後再去丟給 UI 的 Thread 處理, 因為接收資料的 Thread 要等處理完 Parser 以後才會繼續去收新資料, 所以 Buffer 自然都是滿到爆, 因此這程式沒有辦法執行太久的時間, 下次會想辦法在裡面加入 DTR 訊號控制直接讓硬體不要在送資料來了, 不然程式跑一個小時以後就爆了
2 ~- O: N: m5 g3 d- @4 V
# [1 j: k0 `4 H) P' `線上影片
& ^: n. n0 y. ^8 ?" x% V( C
3 ^& z: p% c, ~' E  a' u高解析度影片下載 (速度較慢)0 u) d1 B6 S, O& B9 A7 _
/ X$ m- K6 J1 O# q, c9 r
[ 本帖最后由 stevehsu 于 2008-6-4 00:42 编辑 ]
Steve Hsu@XiJi Int'l LTD
http://blog.xi-ji.com

TOP

大尺寸投射式電容多點觸控開發測試 3

文章出處 http://blog.xi-ji.com/?p=101
) f  w" t! p' D- o0 C5 W
2 s' b5 n# L! H5 n
這是第三版的 Parser 了, 今天測試的結果效果相當好, 處理速度相當快, 而且穩定度又高, 只是今天發現一個很大的問題, 浪費一天時間, 就是 WPF 對 TextBox 的處理速度很慢啦. * y* e' v5 E  }/ F! r. G) z0 Z
我的畫面上用了 100多個 Textbox 要更新, 結果發現經常 UI 會卡死在那邊, 要等將近30秒才會繼續動作, 我猜可能是因為 WPF 字型都是向量化的, 所以反應特別的慢吧? 總之拿掉 Textbox 不更新以後, 馬上速度就恢復正常了. 結果為了這小問題搞了一天, 氣死……* t  s5 s' Y0 U. R; Q2 }9 V
如同上次說的這次已經把上次說的功能都做了最佳化的演算, 不過上次提到要使用物件處理的, 現在還是放棄啦,  因為又發現一個大問題, 就是 WPF 每個物件的功能都太強大啦, 所以相對速度就慢了, 連一個最基本的 List 或是 Array 都很複雜, 而且他一定要宣告成 static 才能 safe threading, 所以放棄使用, 乖乖的用回陣列, 而且用陣列的寫法會比較像是低階 RISC 或是 8051 的寫法. 呵呵. 乖乖的用陣列, 連迴圈都少用, 判斷也儘量少, 副程式呼叫不用, 免得浪費堆疊, 唯一用的就是很多的陣列(也就是很多預留的記憶體), 不過這樣速度快啦, 反正現在記憶體不用錢, 儘量用…呵呵8 j- u3 g3 ^/ P- x
這次除了把之前的功能最佳化來獲得速度外, 另外又增加了 AutoLevel 功能, 透過 Autolevel 可以動態的調整觸控感應強度, 達到更人性化的功能, 當然這次也針對多點做了個小小的測試, 可以自由的放大縮小,  原本連旋轉也放上去, 不過今天也是搞了半天才搞動 WPF 的 Transform  功能, 所以下一版在放旋轉囉
3 Y! _# \( N( p- t: a3 y; T$ u下一版預計完成的有 1. 計算多點座標, 2. 加入滑鼠事件模擬(利用 Event ) 來做' u# ?# W8 {! ~! O( }' ^8 Z+ `
加油加油喔
4 U6 m* E' x& Y  D# y& h
線上影片觀賞
高解析度影片下載 (速度較慢)
ps. 急徵熟悉 Windows Driver 的合作開發夥伴. 歡迎有興趣的跟我聯絡喔 steve.hsu@xi-ji.com

; o: W) W7 v/ w
( ?/ v' u/ h8 \- C) z9 l[ 本帖最后由 stevehsu 于 2008-6-6 00:41 编辑 ]
Steve Hsu@XiJi Int'l LTD
http://blog.xi-ji.com

TOP

大尺寸投射式電容多點觸控IV

文章出處 http://blog.xi-ji.com/?p=102+ w$ o! b' Z/ ]* H

( a6 L7 {9 }8 g% {' J4 G* ~
第四版程式已經可以成功換算X軸及Y軸座標, 目前假設虛擬解析度為 4096x4096, 不過由於硬體掃描線到邊界需要進行修正, 將在下一版本加入邊界修正的部分, 所以下一版本主要有幾個方向要做修正1. 邊界修正 (主要在邊上沒有電容線可以參考運算, 僅能用預測值) 5 i9 }0 K# t% P' Z& o
2. 抖動修正 (由於雙手指上去可能會導致電容差距量太小, 整體電容量提升, 導致誤判), ~1 o. p, o4 I% h9 g6 A3 h
3. 貼近運算 (當兩指在相鄰的兩條電容線上, 由於沒有任何可以判別兩指的數據,因此得採用新的方法來算出正確的手指)  f5 B& u4 i) Y" I/ R; a! p
4. 交錯運算 (由於當兩指貼近後便判定為一指, 因此在離開時就會先抓第一點的位置, 這部分需要重新增加判斷來提升準確性)$ X# r, @0 o$ Q: A4 M& \* I- Y+ X$ m
5. 演算法更新, 由於之前抓取手指點的部分考慮三指以上的情形出現, 因此做了許多額外的判斷, 但由於在電容上面有三指以後, 幾乎完全分辨不出來, 主要因為整體導電量增加, 所以所有電容線讀取準位都升高, 但是相對於手指的地方則是因為整體準位升高而導致差距變小, 只要有稍微的 Jitter 變會誤判, 但若把 Jitter filter 增強, 則會有許多點不被判定, 這部分恐怕要能找到可以輸出更多準位的硬體, 如 16bits 的以後才有可能再進行改善.
$ ], V" o/ e1 J+ i0 u* `# W呵呵~看來本來下一版就要開始做手勢的, 現在得繼續延後啦~~加油加油., \) Q/ [8 r8 f/ U, @( v0 ^) D
有沒有做硬體的廠商願意支持啊, 我目前需要能讀取 16bits準位x256條掃描線的(目前我是用 8bits x 32條的)
( a" Y" b3 t, \; Y9 A, o$ b
線上影片
高解析度影片下載, 速度較慢
ps. 歡迎合作廠商洽談各項合作事宜
) p, x: |* i$ D7 z
9 X8 B% H/ E0 t" W
[ 本帖最后由 stevehsu 于 2008-6-9 21:25 编辑 ]
Steve Hsu@XiJi Int'l LTD
http://blog.xi-ji.com

TOP

自己开发的算法?厉害厉害! R4 ?1 t2 k; v/ |: g2 `+ u
你用的什么controller芯片?& P$ ~  a& _- e! P( h$ a
有没有参考过fingerworks的算法?我觉得那个考虑的比较全面,不过看得头大

TOP

演算法跟各種不同的硬體設備有很大的關係,
/ `* q  K8 \6 o) g
* d; M4 e4 t) C  e- ^  R" W我用的是比較特殊的設備, 這個控制晶面也就只有那家生產而已啊
* B( _' {+ S9 b! h+ |( V7 M& S. F, J: o4 C9 i" v5 i. J' M& b
Fingerworks 演算法沒聽過呢? 大概原理是甚麼呢?
Steve Hsu@XiJi Int'l LTD
http://blog.xi-ji.com

TOP

比较复杂,先根据压感图像辨识出手的各个部分,然后根据预测的位移和实际位置来跟踪路径,再预测手的下一个位置。手部分的辨识精确到是哪一个手指,比如食指还是拇指,对特定的部分也有特定的算法来进行判断。05年fingerworks被苹果收购,IPHONE现在采用的算法可能就是这个啦。

TOP

发新话题