Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

GPS + Google fusion table 雲端應用

2,499 views

Published on

利用ublox GPS 晶片結合 Google fusion table 進行Google MAP應用

Published in: Technology
  • Be the first to comment

GPS + Google fusion table 雲端應用

  1. 1. 艾鍗學院 Linux工程師人才養成班 GPS + Google Fusion Table 雲端應用 時間:2015/07/23 地點:艾鍗學院
  2. 2. 內容摘要 1. 專題概要 2. 關鍵技術簡介 3. 硬體架構 4. 軟體架構 5. 後續改善方向 附錄: 關鍵字
  3. 3. 1. 專題概要 移動式 GPS接收裝置 Google Cloud Fusion Table 手機 (Browser) 電腦 (Browser)平板裝置 (Browser) 網際網路 NMEA-0183 座標資訊 Google 座標資訊 Google Map 及位置記錄點 後續可擴充 增加各種不 同統計方析 資訊 Google 各種雲端應用服務
  4. 4. 2. 關鍵技術簡介 2-1. GPS 2-2. Fusion Table
  5. 5. 2-1. GPS (1) [ 圖片來源: wiki網站 https://en.wikipedia.org/wiki/NMEA_0183 ] 市面上一般GPS模組的資料輸出格式: NMEA-0183 在此我們採用GPRMC sentence的資訊 (NMEA: National Marine Electronics Association)
  6. 6. 2-1. GPS (2) RMC: GPS建議最小傳輸資料 ( $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11> ) 範例說明: $GPRMC,055148,A,2407.8945,N,12041.7649,E,000.0,000.0,061196,003.1,W*69 1) $GPRMC,055148 接收定位時間 (UTC time) 格式:時時分分秒秒.秒秒 (HHMMSS.SS) 2) A = 定位狀態,A:資料可用,V:資料不可用 3) 2407.8945 = 緯度,格式:度度分分.分分分分 (DDMM.MMMMMM) 4) N = 緯度區分,北半球(N)或南半球(S) 5) 12041.7649 = 經度,格式:度度度分分.分分分分 (DDDMM.MMMMMM) 6) E = 經度區分,東(E)半球或西(W)半球 7) 000.0 = 相對航行速度, 0.0 至 1851.8 knots(節) 8) 000.0 = 相對航行方向,000.0 至 359.9度。實際值 9) 061196 = 日期,格式:日日月月年年 (ddmmyy) 10) 003.1 = 磁極變量,000.0 至180.0度 11) W = 磁方位角(西W或東E)度數 12) *hh = Checksum.(檢查位元)
  7. 7. 2-1. GPS (3) NMEA-0183 (GPS) 轉 Google Map 座標 : DDMM.MMMMMM Latitude: Longitude: DD + MM.MMMMMM/60 D: Degree M: Minute DDDMM.MMMMMM DDD + MM.MMMMMM/60
  8. 8. 2-2. Fusion Tables (1) 簡易工作表 [ 圖片來源: Google 網站 https://developers.google.com/identity/protocols/OAuth2ForDevices ] Google提供的雲端應用服務 目前仍在實驗階段 以簡易的工作表 (Spread Sheet) 建立資料庫 自動從工作表轉換出: - 各種統計圖表 - 分析曲線 - 客制化地圖
  9. 9. 2-2. Fusion Tables (2) Google的官方定義 : Google Fusion Tables is a web application used for sharing, visualizing, and publishing tabular data. You can upload your own CSV, KML, ODS, XLS, or Google Spreadsheet data to a Fusion Tables table. Once your data is in Fusion Tables, you can collaborate on it with others in real time, publish it for Google Search, create map and chart visualizations for private use or for embedding on websites, filter it according to specific criteria, and update the data behind your visualizations or filters at any time.
  10. 10. 2-2. Fusion Tables (3) Google Cloud Google 各種雲端應用服務Google Developers Console (提供各種API) Fusion Table API Fusion Table user Browser裝置應用程式 Google針對各種雲端應用服務 提供相對應的API 針對Fusion Tables, 其最新版 API為Fusion Tables API v2.0
  11. 11. 2-2. Fusion Tables (4) Google針對各種雲端應用服務所提供的API, 可在Google API Explorer中找到: https://developers.google.com/apis-explorer/#p/
  12. 12. 2-2. Fusion Tables (5) Google對於 Fusion Tables API 的官方定義 : The Fusion Tables API allows you to use HTTP requests to programmatically to perform these tasks, which are also available in the Fusion Tables web application: 1. create and delete tables 2. read and modify table metadata such as table and column names and column types 3. insert, update, and delete the rows in a table 4. create, update, and delete settings for certain visualizations 5. query the rows in a table
  13. 13. 2-2. Fusion Tables (6) Google API 所共用的 認證機制為 “OAuth 2.0” 非Andriod或iOS的行動裝 置, 可採用 “OAuth 2.0 for Devices” [ 圖片來源: Google 網站 https://developers.google.com/identity/protocols/OAuth2ForDevices ]
  14. 14. 2-2. Fusion Tables (7) [ 圖片來源: Google 網站 https://developers.google.com/identity/protocols/OAuth2ForDevices ] Access Token在產生後3600秒 便會過期, 因此需要適時進行更新: 1. 使用: - refresh token - client ID, - client secret 以POST request向Google Server要求更新的Access Token 2. 平常Refresh Token不須更新 3. 但每當重做認證(產生並取得更新 的authorization code)時, 就須再 取得更新的 Refresh Token Token的更新
  15. 15. 3. 硬體架構 3-1. 整體硬體架構 3-2. GPS 接收模組 3-3. UART-USB 轉換模組
  16. 16. 3-1. 整體硬體架構 GPS 接收模組 (gy-gps-6mv2) Raspberry Pi 2B (CPU: BCM2836) UART-USB 轉換器 (FTDI FT-232R) UART USB2.0 UART USB2.0 Ethernet Internet Access
  17. 17. 3-2. GPS接收模組 (1) GPS模組 NEO-6 u-blox 6 的性能規格
  18. 18. 3-2. GPS接收模組 (2) [ 圖片來源: uBox NEO-6 u-blox 6 GPS Modules Datasheet ] GPS模組 NEO-6 u-blox 6 內部方塊圖
  19. 19. 3-3. UART-USB轉換模組 核心晶片: Silicon Lab2102
  20. 20. 4. 軟體架構 4-1. 整體軟體架構 4-2. 軟體流程 4-3. cURL request
  21. 21. 4-1. 軟體架構 主程式: - gpsrx.c 副程式: - auth_req.c 產出檔案: - tok_update.txt 儲存從 Google Server 取得的 最新回應, 含 access token ) 輸入檔案: (僅在模擬測試模式時需要) - 檔案名稱由 gpsrx 程式指令的第二 引數決定 例如: 執行時主程式 gpsrx 的指令為 $> gpsrx –t gsp_sim 則程式會自動依序尋找 ”gpsrx00”, “gpsrx01”, “gpsrx02”, …. 等檔案做為每一個cycle的 NMEA-0183 輸入 gpsrx.c Auth_req.c System Call NMEA-0183 記錄(Log)檔 Goggle回應 訊息檔 tok_update.txt NMEA-0183 模擬資料 NMEA-0183 模擬資料 NMEA-0183 模擬資料 Xxx00, xxx01, xxx02 gps_log.txt
  22. 22. 4-2. 軟體流程 (1) 開啟 GPS NMEA-0183 -> 讀取字串 字串 Parsing & Decoding : 1. 取得 GPRMC sentence 2. 取得 Latitude, Longitude, Date, Time 3. 將 Latitude/Longitude 資訊由NMEA 轉換為 GoogleMap 格式 透過cURL上傳HTTP POST/GET指令給 Google Fusion Table: 1. 更新 Access Token 2. 在 Fusion Table中加入新資料 備存記錄 正常動作模式 NMEA-0183 記錄(Log)檔Goggle回應 訊息檔 tok_update.txt gps_log.txt
  23. 23. NMEA-0183 模擬資料 NMEA-0183 模擬資料 4-2. 軟體流程 (2) 開啟模擬資料檔案 -> 讀取字串 字串 Parsing & Decoding : 1. 取得 GPRMC sentence 2. 取得 Latitude, Longitude, Date, Time 3. 將 Latitude/Longitude 資訊由NMEA 轉換為 GoogleMap 格式 透過cURL上傳HTTP POST/GET指令給 Google Fusion Table: 1. 更新 Access Token 2. 在 Fusion Table中加入新資料 備存記錄 模擬測試 (file feeding) 模式 NMEA-0183 模擬資料 NMEA-0183 記錄(Log)檔Goggle回應 訊息檔 tok_update.txt gps_log.txt Xxx00, xxx01, xxx02
  24. 24. 4-3. cURL request (1) GET request: - 只能讀取資料, 不允許任何修改動作 POST request: - 可允許各種資料修改動作, 如: 插入/移除欄位, 建立新Table, 更新內容等…. - 需提送Access Token, Refresh Token, Client ID, Client Secret 等認證資訊 Fusion Tables API 對於資料存取的權限限制:
  25. 25. 4-3. cURL request (2) 更新 (Refresh) Access Token (POST type request) Request root@raspberrypi:~# curl -d "client_id=530304002742- 55mhfghci5o59tur1tgt183p38ceh08t.apps.googleusercontent.com&client_secret=xtogS1gi_MSl_7apvzfrsvmK&r efresh_token=1/97_rdY40n2PusItQPVPENp5ECTZYqFvUobJZB09nOxlIgOrJDtdun6zK6XiATCKT&grant_type=r efresh_token" Response https://www.googleapis.com/oauth2/v3/token { "access_token":"ya29.tAHsfamfZ4CUSiMwXG0TztY9DYkcj3Zs988p9Wr_GrZz5vRbxkGHFoQiHxDMNsuEZf8-", "token_type": "Bearer", "expires_in": 3600 }
  26. 26. 4-3. cURL request (3) 重做 Authorization (POST type request) Request root@raspberrypi:~# curl -d "client_id=530304002742- 55mhfghci5o59tur1tgt183p38ceh08t.apps.googleusercontent.com&client_secret=xtogS1gi_MSl_7apvzfrsvmK&c ode=ZMUM-BZYM4/b1grhomQLBtifJxKrATFJ- m8AoYV7tr3RfN1BLvOTlo&grant_type=http://oauth.net/grant_type/device/1.0" Response https://www.googleapis.com/oauth2/v3/token { "access_token": "ya29.tAH13KudNYGAmG9rtdXLJjO_QNPjbJcvEkJEeG_C3MxqWh5T9sFbbrguWh77llT6JbVL", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "1/97_rdY40n2PusItQPVPENp5ECTZYqFvUobJZB09nOxlIgOrJDtdun6zK6XiATCKT" }
  27. 27. 4-3. cURL request (4) 插入一筆新資料 ROW (POST type request) Request root@raspberrypi:~# curl -H "Authorization: Bearer ya29.tAH13KudNYGAmG9rtdXLJjO_QNPjbJcvEkJEeG_C3MxqWh5T9sFbbrguWh77llT6JbVL" -d "sql=INSERT INTO 1fV5mXuKgG5cCck1cAVQX0G7HVTjfdm1SqeYSdmXU (number,Address)VALUES(43,'IT robotics lab')" Response "https://www.googleapis.com/fusiontables/v2/query" { "kind": "fusiontables#sqlresponse", "columns": [ "rowid" ], "rows": [ [ "5002" ] ] }
  28. 28. GPS NMEA-0183 輸出字串接收 字串 Parsing & Decoding : 1. 取得 GPRMC sentence 2. 取得 Latitude, Longitude, Date, Time 3. 將 Latitude/Longitude 資訊由NMEA 轉換為 GoogleMap 格式 透過cURL上傳HTTP POST/GET指令給 Google Fusion Table: 1. 更新 Access Token 2. 在 Fusion Table中加入新資料 備存記錄 5. 後續改進方向 (1) 加入GPRMC的多筆 數據分析處理能力, 並依距離變化合理性 來判斷與捨棄非正常 資訊 1. 重新與網路連線 (e.g. WiFi) 時的 資料補上傳, or 2. GSM即時上傳
  29. 29. GPS NMEA-0183 輸出字串接收 字串 Parsing & Decoding : 1. 取得 GPRMC sentence 2. 取得 Latitude, Longitude, Date, Time 3. 將 Latitude/Longitude 資訊由NMEA 轉換為 GoogleMap 格式 透過cURL上傳HTTP POST/GET指令給 Google Fusion Table: 1. 更新 Access Token 2. 在 Fusion Table中加入新資料 備存記錄 5. 後續改進方向 (2) 將目前使用system call方式執行cURL, 改為直接在程式中使 用cURL API 改善資料搜集與上傳 的頻率精準控制
  30. 30. 附錄: 關鍵字

×