1 / 50

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

慣性感測器之應用 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 開關

michi
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 慣性感測器之應用WiTilt v3 2010/09/28 陳宗隆

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

  3. Overview • WiTilt v1 • 玩具機器人的控制器 • WiTilt v2 • 兩軸或三軸加速度計結合2.4 GHz Bluetooth • WiTilt v3 • Freescale MMA7260Q三軸加速計 • Melexis MLX90601 E2 的陀螺儀 • class 1 的Bluetooth

  4. 內部介紹 • 1. Power開關 • 2. UARTswitch連結模式選擇(W:bluetooth D:hardware) 3. Debug header • 4. 充電頭 (可充電的 LiPo 電池) 5. Restart button • 6. 顯示狀態和充電的LED 7. 電池連接器 8. AVR Programming Support 9. Bluetooth的連接指示器

  5. 建構環境 • 設備和所需軟體: • EPC(or Notebook)一台 • WiTilt v3 sensor 一個 • 藍芽接收器一個 • 藍芽軟體安裝 • 超級終端機(winXP) or PuTTY(winXPor win7)

  6. 安裝藍芽接收器 • 注意事項: • WiTiltv3是免安全認證方式連線 • 藍芽軟體選擇,需支援免安全認證 • MicroSoftware XP內建的驅動,不支援 • 先安裝光碟(舊版32bit.64bit) • TOSHIBA Bluetooth Stack • 新版32bit.64bit • http://aps2.toshiba-tro.de/bluetooth/?page=download • 30天限制(破)延用 • 舊版裡面的TosBtChk.dll覆蓋到新版的資料夾

  7. 藍芽軟體設定 記得開啟感測器電源 可以改COM PORT

  8. 藍芽軟體設定

  9. 感測資料擷取與後處理

  10. 超級終端機設定(1/3) 1 3 2 4

  11. 超級終端機設定(2/3) 5 6 8 7

  12. 超級終端機設定(3/3) 按一下空白鍵開始 連線成功!!

  13. PuTTY

  14. Calibrate(sensor校正) • 在我們開始讀值之前,最好都先做校準的動作(calibrate) • [3] Calibrate(sensor校正) • 三軸加速度計的校正 • 一軸gyro的校正

  15. WiTilt v3.3configuration • [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(ADCvalue) • Binary Mode • Degree Mode (degree/second)

  16. WiTilt v3.3configuration • [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) • 輸出使用者想要的輸出值

  17. 手動匯入EXCEL 存成文字檔再匯入EXCEL Ctrl+c 複製 用右鍵會當掉!!

  18. 操作練習 • 各種設定及輸出格式 • 將各種資料匯出至excel • 加速度計 data 分析 • 靜止狀態 • 擺動 • 實際走路的資料 • Gyro data 分析 • 旋轉

  19. 靜態測試 (1/2)

  20. 靜態測試 (2/2)

  21. 擺動 • 上下擺動5次 • 左右擺動5次

  22. 擺動 • 前後擺動5次

  23. 旋轉測試 Gyro測量出來的為角速度,將角速度/頻率 or 角速度*週期 再去累加 • 右轉90度 • Σ: 9820 • 右轉180度 • Σ: 19564

  24. 人走幾步的波動

  25. Question?? • 操作練習10~15分

  26. On-line 資料即時處理

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

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

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

  30. Windows內建API簡介(1/12) • 目的 • Windows本身就有提供大量的函式庫,希望藉由這個API能讓大家了解感測器如何透過一些通訊口傳入電腦,能更即時動態的擷取資料並加以處理,讓感測器傳到電腦的數據能更迅速的呈現出來 • 參考資料: • MSDN Library • http://msdn.microsoft.com/en-us/library/default.aspx

  31. Windows內建API簡介(2/12) • Windows.h • HANDLE type • DCB type and set/get state • CreateFile • CloseHandle • 程式練習-開啟COMport • DWORD type • WriteFile • ReadFile • 程式練習-輸出Witilt V3數值

  32. Windows內建API簡介(3/12) • <Windows.h> • WinAPI的標頭檔,裡面包含許多函式和型態的定義 • 接下來用到的函式及物件的定義都在這裡面

  33. Windows內建API簡介(4/12) • HANDLE type(一個用來handle某裝置) • 用來控制檔案、裝置讀寫的物件型態 • 物件裡包含許多裝置的屬性可供設定,但必須透過其他函式來完成 • 宣告一個物件: • HANDLE handle1,handle2,…; • DCB type • 用來儲存HANDLE設定值的物件 • 宣告一個物件: • DCB dcb1,dcb2,…; • 更改baudrate的設定值: • dcb1.BaudRate=115200; • Witilt V3的baudrate必須設為115200才能使用

  34. 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

  35. Windows內建API簡介(6/12) • CreateFile(char *path, DWORD mode, DWORD dwShareMode,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL); • 開啟一個裝置或檔案的函式 • 函式傳回值為開啟的HANDLE物件 • (只是COMport有做好設定 並不是以連線的意思) • 由於參數眾多,只介紹接下來會用到的參數(前二個): • path:要開啟的裝置/檔案的位置 • mode:要開啟的模式,有GENERIC_READ及GENERIC_WRITE • ShareMode的選擇 ,設定為0代表互斥存取 • 其他參數用途可參考MSDN Library • http://msdn.microsoft.com/en-us/library/aa363858%28VS.85%29.aspx

  36. 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++ “\” 是特殊字元

  37. Windows內建API簡介(8/12) • CloseHandle(HANDLE) • 關閉一個開啟的HANDLE • 若一HANDLE不關閉,作業系統會認為此裝置或檔案一直被佔用 • 使用範例: • CloseHandle(variable); • 程式練習-開啟Witilt V3 (file.cpp參考架構) • 利用HANDLE開啟Witilt V3並且設定baudrate • 盡量利用投影片的函式樣板撰寫 • 參考程式碼請看com_file.cpp • demo

  38. Windows內建API簡介(9/12) • DWORD type • winAPI自己的整數型態 • 此型態不管在任何一個平台,大小都是4Bytes、32Bits • 使用方法(宣告): • DWORD dword1,dword2,…; • Ex. DWORD real;

  39. 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);

  40. 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);

  41. Windows內建API簡介(12/12) • 程式練習-輸出Witilt V3數值(readwrite.cpp參考架構) • 利用開啟好的HANDLE讀取Witilt V3的訊息 • 寫入和讀出的資料如同使用超級終端機,使用前請先reset,並且在使用前超級終端機先校正及設定好頻率、輸出模式…等參數 • 為了讀資料,請在一開始先寫入一個空白,使其menu出來。之後再寫入一個”1”,讓他開始產生資料。待結束時再寫一個空白使程式暫定輸出並關閉 • 參考程式碼請看readwrite.cpp • demo • ->期望讓使用者去控制何時停止.停止之後還可以繼續讀 • 可以用for loop控制 or signal

  42. Signal信號控制(1/4) • 在剛剛的程式(readwrite.cpp),如果要用for控制擷取信號的長短相當的不方便,資料太短,就沒有完整的資料,像你可以固定一段時間讓for停止讓使用者選擇,但是還是不夠動態 • 解決這個的最好方法就是讓使用者隨時控制程式何時停止,所以我們使用signal來停止我們的程式

  43. Signal信號控制(2/4) • Signal的東西非常簡單,只要引入標頭檔,用一個函式設定就行了 • <signal.h> • Signal控制的標頭檔 • signal(int SIG, void (*f)(int) ) • 啟動signal的函式,當觸動了SIG的信號,系統會產生一個執行緒呼叫f這個函式,其參數為SIG的值 • SIG信號的意義(每個系統的值都不一樣): • SIGINT:在程式中按下ctrl+c • 21:按下視窗右上角的x按鈕

  44. 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; }

  45. Signal信號控制(4/4) • 程式練習-信號停止裝置(signal.cpp參考架構) • 用一個signal的函式,當按下ctrl+c或是視窗右上角的x時,可以讓Witilt V3停止讀取,並結束程式(系統預設中斷不正常關閉,改成我們想做的控制) • 參考程式碼請看com_signal.cpp • demo

  46. 封裝程式碼(1/3) • 剛剛的程式中,其實HANDLE的控制並不算難,但是如果今天我們的程式要一次控制四五個感應器,這樣程式一定到處都是HANDLE,很難了解。 • 在資訊科學裡,為了解決類似的問題,就用物件來將程式包裝起來,增加程式的可讀性,讓使用者管理方便,也減少不預期的錯誤

  47. 封裝程式碼(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 &); • };

  48. 封裝程式碼(3/3) • 程式練習-物件封裝(object.cpp) • 將witilt的constructor和destructor完成 • Constructor裡需要初使化handle_com(已完成),和測試com是否開啟,以及設定baudrate • Destructor要將裝置關閉 • 最後請看一下main裡使用的方法,比較裝置有無封裝的簡潔度和可讀性(與com_signal.cpp相比) • 跟signal_comport.cpp功能是一樣的 • 參考程式碼請看com_object.cpp

  49. Question??

  50. The End • Thank you

More Related