2012-05-21

使用Mindsensors NXT觸控面板(Touch Panel)製作筆勢控制機器人

Mindsensors NXTTouch Panel會記錄觸控筆在面板上移動過程的連續座標資料,使用NXT讀取之後,藉由分析筆勢(Gesture)軌跡,可以辨識出觸控筆的移動方式,如:由上往下、由左往右或從左下往右上滑動等動作,接下來將這些所解析出來的各式動作轉換成為指令,這樣就可以運用NXT Touch Panel來作為以筆勢控制機器人的輸入裝置。
根據這個構想,本次實作會以兩部NXT透過藍芽來進行遙控。
(Fig-1)
在上圖中接上Touch Panel的為遙控端NXT,會將偵測到觸控筆在面板上的動作,製作成資料字串經由藍芽傳送給被控端的NXT機器人,而被控端NXT在接收到資料之後,會進行解析並轉換為馬達控制指令來執行。
運作的程序參考下圖
(Fig_2)
(video-1)
(video-2)
筆勢分析與動作辨識
分析TouchPanel所回傳的連續座標資料,可以知道觸控筆移動的方位與距離,甚至相對速度。首先在 (Fig-1)圖,所顯示的是每間隔10點取樣,再以直線連接之後的觸控筆移動軌跡:

而在(Fig-2)圖,則依據座標順序顯示觸控筆的移動是由左下到右上,同時,由於每一個編號之間都是相等間隔10點取樣,所以,各點間相對距離的大小,即表示觸控筆移動
速度的快慢。

而在 (Fig-3)圖,則改以座標向量來表示觸控筆的移動方位。位於左下方較大圓圈的標示為起點,右上較小圓圈則為終點。由向量的x位移與y位移值的正負,可以判斷觸控筆移動方位為上/下 與 右/左,如:若向量值為(30,40)表示往右上移動,(0,-20)表示往下移動,這些正是傳送給被控端NXT作為動作辨識資料。

由移動向量 轉換成 控制指令
被控端NXT接收到觸控筆移動的向量值之後,接下來就要轉換成為馬達的控制指令來執行。
轉換方式除了依據向量的x位移與y位移值的正負來判斷之外,然而因為xy位移值的範圍分別是-9999-6363,所以,還需要以其他方式來更精確的辨識向量的移動方位。觀念上就如同類比對數位的轉換一樣,透過門檻值的對應,將線性分佈的位移值轉換成有限個數的控制指令。

以斜率來辨識向量的傾斜程度
本次本實作所採用的是向量的斜率值(Slope),亦即計算 y位移除以x位移 的絕對值。由斜率值可以更精確的判斷向量的傾斜程度,當值越大時表示向量越接近垂直,反之則越接近水平,所以就可以運用來界定門檻值,以判斷所要轉換的控制指令。
下圖就是使用向量xy位移值的正負與斜率兩個因素轉換成8個控制指令的對應關係圖:

範例程式:




  • 留言者: 雄
  • Email: srally2005@yahoo.com.tw
  • 網址:
  • 日期: 2012-05-22 23:16:24
好詳細的說明,謝謝分享
[版主回覆05/23/2012 21:18:29]只是花點時間整理測試的過程,  重新組織一下構思的邏輯,
往後要參考時比較方便.

也歡迎一起交流心得

沒有留言:

張貼留言