慣性感測器之應用 wi t i lt v3

50
慣慣慣慣慣慣慣慣 WiTilt v3 2010/09/28 慣慣慣

Upload: michi

Post on 19-Jan-2016

68 views

Category:

Documents


0 download

DESCRIPTION

慣性感測器之應用 Wi T i lt v3. 2010/09/28 陳宗隆. Outline. WiTilt v3 基本介紹 感測資料擷取與後處理 | On-line 資料即時處理. Overview. WiTilt v1 玩具機器人的控制器 WiTilt v2 兩軸或三軸加速度計結合 2.4 GHz Bluetooth WiTilt v3 Freescale MMA7260Q 三軸加速計 Melexis MLX90601 E2 的陀螺儀 class 1 的 Bluetooth. 內部介紹. 1. Power 開關 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 慣性感測器之應用 Wi T i lt v3

慣性感測器之應用WiTilt v3

2010/09/28 陳宗隆

Page 2: 慣性感測器之應用 Wi T i lt v3

Outline WiTilt v3 基本介紹 感測資料擷取與後處理 | On-line 資料即時處理

Page 3: 慣性感測器之應用 Wi T i lt v3

Overview WiTilt v1

玩具機器人的控制器 WiTilt v2

兩軸或三軸加速度計結合 2.4 GHz Bluetooth WiTilt v3

Freescale MMA7260Q 三軸加速計 Melexis MLX90601 E2 的陀螺儀 class 1 的 Bluetooth

Page 4: 慣性感測器之應用 Wi T i lt v3

內部介紹 1. Power 開關 2. UART switch 連結模式選擇 (W:bluetooth

D:hardware)3. Debug header 4. 充電頭 ( 可充電的 LiPo 電池 )5. Restart button 6. 顯示狀態和充電的 LED7. 電池連接器 8. AVR Programming Support9. Bluetooth 的連接指示器

Page 5: 慣性感測器之應用 Wi T i lt v3

建構環境 設備和所需軟體 :

EPC(or Notebook) 一台 WiTilt v3 sensor 一個 藍芽接收器一個 藍芽軟體安裝 超級終端機 (winXP) or PuTTY( winXP or

win7)

Page 6: 慣性感測器之應用 Wi T i lt v3

安裝藍芽接收器 注意事項 :

WiTilt v3 是免安全認證方式連線 藍芽軟體選擇 , 需支援免安全認證 MicroSoftware XP 內建的驅動 , 不支援

先安裝光碟 ( 舊版 32bit.64bit) TOSHIBA Bluetooth Stack 新版 32bit.64bit http://aps2.toshiba-tro.de/bluetooth/?page=download 30 天限制 ( 破 ) 延用 舊版裡面的 TosBtChk.dll 覆蓋到新版的資料夾

Page 7: 慣性感測器之應用 Wi T i lt v3

藍芽軟體設定記得開啟感測器電源

可以改 COM PORT

Page 8: 慣性感測器之應用 Wi T i lt v3

藍芽軟體設定

Page 9: 慣性感測器之應用 Wi T i lt v3

感測資料擷取與後處理

Page 10: 慣性感測器之應用 Wi T i lt v3

超級終端機設定 (1/3)

1

2

3

4

Page 11: 慣性感測器之應用 Wi T i lt v3

超級終端機設定 (2/3)

5

6

78

Page 12: 慣性感測器之應用 Wi T i lt v3

超級終端機設定 (3/3)按一下空白鍵開始

連線成功 !!

Page 13: 慣性感測器之應用 Wi T i lt v3

PuTTY

Page 14: 慣性感測器之應用 Wi T i lt v3

Calibrate(sensor 校正 ) 在我們開始讀值之前,最好都先做校準的動作

(calibrate) [3] Calibrate(sensor 校正 )

三軸加速度計的校正 一軸 gyro 的校正

Page 15: 慣性感測器之應用 Wi T i lt v3

WiTilt v3.3 configuration [2] Set active channels (XYZBR Active)

選擇想輸出的值 XYZ: 加速度計的 X,Y,Z 軸的變化值 B: 電池 ( 不會顯示 ) R: 一軸 gyro 值 (Z 軸旋轉 )

[4] Sensor range (range 設定 ) Range:+/-1.5g ,+/- 2g , +/-4g , +/-6g

[5] Display mode (output mode) Gravity values Raw values (ADC value) Binary Mode Degree Mode (degree/second)

Page 16: 慣性感測器之應用 Wi T i lt v3

WiTilt v3.3 configuration [6] Set/View threshold values

設定門檻值,濾掉 sensor 的小誤差 [7] Set output frequency

讀取資料的快慢 (100Hz 比較好算角度 ) 最大 50Hz 的角度模式 最大 135Hz 的重力模式 最大 220Hz 的 raw ADC 模式 最大 610Hz 的二進制模式

[1] Start Tri-Ax detector (Press any key stop) 輸出使用者想要的輸出值

Page 17: 慣性感測器之應用 Wi T i lt v3

手動匯入 EXCEL

Ctrl+c 複製 用右鍵會當掉 !!

存成文字檔再匯入EXCEL

Page 18: 慣性感測器之應用 Wi T i lt v3

操作練習 各種設定及輸出格式 將各種資料匯出至 excel 加速度計 data 分析

靜止狀態 擺動 實際走路的資料

Gyro data 分析 旋轉

Page 19: 慣性感測器之應用 Wi T i lt v3

靜態測試 (1/2)

Page 20: 慣性感測器之應用 Wi T i lt v3

靜態測試 (2/2)

Page 21: 慣性感測器之應用 Wi T i lt v3

擺動 上下擺動 5 次

左右擺動 5 次

Page 22: 慣性感測器之應用 Wi T i lt v3

擺動 前後擺動 5 次

Page 23: 慣性感測器之應用 Wi T i lt v3

旋轉測試

右轉 90 度 Σ: 9820

右轉 180 度 Σ: 19564

Gyro 測量出來的為角速度 , 將角速度 / 頻率 or 角速度 * 週期 再去累加

Page 24: 慣性感測器之應用 Wi T i lt v3

人走幾步的波動

Page 25: 慣性感測器之應用 Wi T i lt v3

Question??

操作練習 10~15 分

Page 26: 慣性感測器之應用 Wi T i lt v3

On-line 資料即時處理

Page 27: 慣性感測器之應用 Wi T i lt v3

資料即時處理目的 更改 Sensor 資料顯示的格式 想隨時隨地觀察 Sensor 動向 節省資料事後處理程序 (直接存成 excel) 最終做出 pseudo driver (i.e. 更大型的 API) 模擬超級終端機讀值前的一些動作

Page 28: 慣性感測器之應用 Wi T i lt v3

資料即時處理 安裝 C++編譯器 -Dev C++(沒有強制 ) Windows 內建 API簡介 Signal信號控制封裝程式碼

Page 29: 慣性感測器之應用 Wi T i lt v3

安裝 C++編譯器 -Dev C++ http://www.bloodshed.net/dev/devcpp.html

Page 30: 慣性感測器之應用 Wi T i lt v3

Windows 內建 API簡介(1/12)

目的 Windows 本身就有提供大量的函式庫,希望藉由這個

API能讓大家了解感測器如何透過一些通訊口傳入電腦,能更即時動態的擷取資料並加以處理,讓感測器傳到電腦的數據能更迅速的呈現出來

參考資料: MSDN Library

http://msdn.microsoft.com/en-us/library/default.aspx

Page 31: 慣性感測器之應用 Wi T i lt v3

Windows 內建 API簡介(2/12) Windows.h

HANDLE type DCB type and set/get state CreateFile CloseHandle 程式練習 -開啟 COM port DWORD type WriteFile ReadFile 程式練習 -輸出 Witilt V3數值

Page 32: 慣性感測器之應用 Wi T i lt v3

Windows 內建 API簡介(3/12) <Windows.h>

WinAPI 的標頭檔,裡面包含許多函式和型態的定義

接下來用到的函式及物件的定義都在這裡面

Page 33: 慣性感測器之應用 Wi T i lt v3

Windows 內建 API簡介(4/12) HANDLE type ( 一個用來 handle某裝置 )

用來控制檔案、裝置讀寫的物件型態物件裡包含許多裝置的屬性可供設定,但必須透過其他函式

來完成宣告一個物件:

HANDLE handle1,handle2,…; DCB type

用來儲存 HANDLE 設定值的物件宣告一個物件:

DCB dcb1,dcb2,…; 更改 baudrate 的設定值:

dcb1.BaudRate=115200; Witilt V3 的 baudrate必須設為 115200才能使用

Page 34: 慣性感測器之應用 Wi T i lt v3

Windows 內建 API簡介(5/12) GetCommState(HANDLE,DCB *)

將 HANDLE 的設定存到 DCB 裡 ( 設定方向→ ) SetCommState(HANDLE,DCB *);

將 HANDLE 改為 DCB 的設定 ( 設定方向:← ) 使用範例

GetCommState(handle_com,&dcb); dcb.BaudRate=115200; SetCommState(handle_com,&dcb);

Dcb structure http://msdn.microsoft.com/en-us/library/

aa363214%28VS.85%29.aspx

Page 35: 慣性感測器之應用 Wi T i lt v3

Windows 內建 API簡介(6/12)

CreateFile(char *path, DWORD mode, DWORD dwShareMode,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL); 開啟一個裝置或檔案的函式函式傳回值為開啟的 HANDLE物件 (只是 COM port有做好設定 並不是以連線的意思 )由於參數眾多,只介紹接下來會用到的參數 ( 前二個 ):

path:要開啟的裝置 / 檔案的位置 mode:要開啟的模式,有 GENERIC_READ 及

GENERIC_WRITE ShareMode 的選擇 , 設定為 0 代表互斥存取其他參數用途可參考MSDN Library http://msdn.microsoft.com/en-us/library/

aa363858%28VS.85%29.aspx

Page 36: 慣性感測器之應用 Wi T i lt v3

Windows 內建 API簡介(7/12)

CreateFile(char *path, DWORD mode,DWORD dwShareMode,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL); 使用範例:

HANDLE handle_com = CreateFile(“COMx”,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

其中” COMx”請改成自己的 com port如果要讀和寫,就寫成 GENERIC_READ|GENERIC_WRITE若開啟檔案失敗,函式會回傳” INVALID_HANDLE_VALUE”

通常是連線被佔用 ( 不能開著超級終端機 ) 或路徑錯誤 HOWTO : 指定大於 COM9 序列連接埠 (COM40->\\.\COM40) note:In C/C++ “\” 是特殊字元

Page 37: 慣性感測器之應用 Wi T i lt v3

Windows 內建 API簡介(8/12) CloseHandle(HANDLE)

關閉一個開啟的 HANDLE 若一 HANDLE 不關閉,作業系統會認為此裝置或檔案一直被佔用

使用範例: CloseHandle(variable);

程式練習 -開啟 Witilt V3 (file.cpp參考架構 ) 利用 HANDLE 開啟 Witilt V3並且設定 baudrate 盡量利用投影片的函式樣板撰寫 參考程式碼請看 com_file.cpp demo

Page 38: 慣性感測器之應用 Wi T i lt v3

Windows 內建 API簡介(9/12) DWORD type

winAPI自己的整數型態 此型態不管在任何一個平台,大小都是

4Bytes 、 32Bits 使用方法 (宣告 ):

DWORD dword1,dword2,…; Ex. DWORD real;

Page 39: 慣性感測器之應用 Wi T i lt v3

Windows 內建 API簡介(10/12) WriteFile (HANDLE com, char *buffer, DWORD

towrite, DWORD *written, LPOVERLAPPED overlapped ); 將 buffer 裡的 towrite 個字元寫到 com 裡面去 實際寫入幾個 BYTEs 會藉由written傳回來 Overlapped 為進階選項,在此使用 NULL 即可 使用範例:

WriteFile(handle_com," ",1,&real,NULL);

Page 40: 慣性感測器之應用 Wi T i lt v3

Windows 內建 API簡介(11/12) ReadFile (HANDLE com, char *buffer,

DWORD towrite, DWORD *written, LPOVERLAPPED overlapped ); 用法和 WriteFile類似 從 com 裡讀出 towrite 個字元並寫到 buffer 裡

去 實際讀到幾個 BYTEs 會藉由written傳回來 Overlapped 為進階選項,在此使用 NULL 即可 使用範例:

ReadFile(handle_com,buf,(DWORD)SIZE,&real,NULL);

Page 41: 慣性感測器之應用 Wi T i lt v3

Windows 內建 API簡介(12/12)

程式練習 -輸出 Witilt V3數值 (readwrite.cpp參考架構 ) 利用開啟好的 HANDLE 讀取 Witilt V3 的訊息 寫入和讀出的資料如同使用超級終端機,使用前請先 reset ,並且在使用前超級終端機先校正及設定好頻率、輸出模式…等參數

為了讀資料,請在一開始先寫入一個空白,使其menu 出來。之後再寫入一個” 1” ,讓他開始產生資料。待結束時再寫一個空白使程式暫定輸出並關閉

參考程式碼請看 readwrite.cpp demo -> 期望讓使用者去控制何時停止 . 停止之後還可以繼續讀

可以用 for loop 控制 or signal

Page 42: 慣性感測器之應用 Wi T i lt v3

Signal信號控制 (1/4) 在剛剛的程式 (readwrite.cpp) ,如果要用

for 控制擷取信號的長短相當的不方便,資料太短,就沒有完整的資料,像你可以固定一段時間讓 for停止讓使用者選擇,但是還是不夠動態

解決這個的最好方法就是讓使用者隨時控制程式何時停止,所以我們使用 signal 來停止我們的程式

Page 43: 慣性感測器之應用 Wi T i lt v3

Signal信號控制 (2/4) Signal 的東西非常簡單,只要引入標頭檔,用

一個函式設定就行了 <signal.h>

Signal 控制的標頭檔 signal(int SIG, void (*f)(int) )

啟動 signal 的函式,當觸動了 SIG 的信號,系統會產生一個執行緒呼叫 f 這個函式,其參數為 SIG的值

SIG信號的意義 (每個系統的值都不一樣 ): SIGINT:在程式中按下 ctrl+c 21:按下視窗右上角的 x 按鈕

Page 44: 慣性感測器之應用 Wi T i lt v3

Signal信號控制 (3/4) signal(int SIG, void (*f)(int) )

範例: void hello(int)

{printf(“hi!!\n”);return;}int main(void){signal(SIGINT,hello);while(true);return 0;}

Page 45: 慣性感測器之應用 Wi T i lt v3

Signal信號控制 (4/4) 程式練習 - 信號停止裝置 (signal.cpp參考架

構 ) 用一個 signal 的函式,當按下 ctrl+c 或是視窗右

上角的 x 時,可以讓Witilt V3停止讀取,並結束程式 (系統預設中斷不正常關閉 , 改成我們想做的控制 )

參考程式碼請看 com_signal.cpp demo

Page 46: 慣性感測器之應用 Wi T i lt v3

封裝程式碼 (1/3)剛剛的程式中,其實 HANDLE 的控制並不算難,但是如果今天我們的程式要一次控制四五個感應器,這樣程式一定到處都是 HANDLE ,很難了解。

在資訊科學裡,為了解決類似的問題,就用物件來將程式包裝起來,增加程式的可讀性,讓使用者管理方便,也減少不預期的錯誤

Page 47: 慣性感測器之應用 Wi T i lt v3

封裝程式碼 (2/3) 基本語法

class witilt // a object for witilt { public: // can use by others inline witilt(char const *); inline ~witilt(); int read(char *,size_t =1); int write(char const *,size_t =1); protected: // only witilt itself can use HANDLE handle_com; private: // they are settings for C++ object witilt(witilt const &); void operator=(witilt const &); };

Page 48: 慣性感測器之應用 Wi T i lt v3

封裝程式碼 (3/3) 程式練習 - 物件封裝 (object.cpp)

將 witilt 的 constructor 和 destructor完成 Constructor 裡需要初使化 handle_com(已完成 ) ,

和測試 com 是否開啟,以及設定 baudrate Destructor 要將裝置關閉 最後請看一下 main 裡使用的方法,比較裝置有無封

裝的簡潔度和可讀性 ( 與 com_signal.cpp相比 ) 跟 signal_comport.cpp 功能是一樣的 參考程式碼請看 com_object.cpp

Page 49: 慣性感測器之應用 Wi T i lt v3

Question??

Page 50: 慣性感測器之應用 Wi T i lt v3

The End Thank you