如何利用RPLIDAR A2進行多點觸控應用
1. RPLidar鐳射雷達套件
2. RPlidar_multi_touch SDK : 請點選 這裡 下載
注意事項
注意
此SDK僅適用於RPLiDAR A2 型號,其他型號暫不支援,請知悉。
1. 請確保USB線不宜過長,需保證RPLidar的供電需求,最好先使用RPLidar套件中0.3m的短USB線。
2. 需要在電腦上事先安裝對應系統的cp210x驅動,具體詳情可以參考RPLidar開發套裝使用者手冊。
3. 使用網口附件板的使用者首先需按照下面連結中文件配置好模組IP地址,
https://wiki.slamtec.com/pages/viewpage.action?pageId=10354801
並且將電腦的IP地址配置到同樣網段,例如模組預設IP地址為192.168.0.7, 此時可按照如下圖片中設定電腦的IP地址。
另外,需要將multi_touch.json中的connect_path引數改為TCP。(此部分將在SDK檔案組織結構中介紹)
配置流程
1. 首先開啟位於workspacesvc10下的 VS 解決方案檔案:sdk_and_demo.sln
注意
注意:本文件所使用的應用環境均基於VS2010, 其他版本的VS會出現編譯問題。
2. 右鍵點選Solution Explorer 中的Solution”sdk_and_demo”(5 projects), 點選rebuild solution。
3. 開啟workspacesvc10sdk_projectmultiTouch_sdkoutput 檔案目錄,拷貝目錄下的multiTouch_sdk.dll檔案。如果在該目錄下沒有發現multiTouch_sdk.dll檔案,說明之前的編譯未成功,請返回步驟2,重新編譯Solution。
4. 複製到workspacesvc10demo_project 檔案目錄下對應的3個demo檔案中的bin目錄下,這樣就可以開啟對應的3個demo app來進行後續操作。
左邊紅框中顯示當前目錄為rplidar_multi_touch這個app的bin目錄,右邊紅框中即為步驟2中編譯出的multiTouch_sdk.dll檔案。
5. 將RPLidar固定於牆面, 為了標定時方便,建議使用者將雷達如下圖所示方向固定,即雷達接線方向垂直向下。如若固定時按照其他角度來安裝,請注意雷達的串列埠接線方向為雷達實際的180度方向。
6. 通過USB介面卡或者網口附件板接入PC後,首先開啟calibration application標定觸控區域,
點選左上角file選單下load configuration讀取對應的配置
注意
請注意這裡要讀取的multi_touch.json配置檔案, 在Debug模式編譯下,是儲存在..conf檔案目錄下,Release模式編譯下是儲存在workspacesvc10demo_projectrplidar_multi_touchbin檔案目錄下,放在其他目錄下無效。
7. 拖動白色虛線框體來標定觸控區域和大小
標定結束後儲存區域至conf目錄下multi_touch.json檔案,圖中標定範圍為一個1米邊長的正方形,即圖中白色虛線區域,圖中藍色點為實時掃描的鐳射點,如步驟5中安裝圖所示,藍色點掃描出的是固定在牆面時的房間輪廓。
8. 開啟workspacesvc10demo_projectrplidar_multi_touchbin目錄下的rplidar_multi_touch_debug.exe。會顯示顏色大小不同的圓,代表了每一個TouchPoints。按照之前標定的1m*1m的區域內,將其按照螢幕比例對映顯示(此時螢幕解析度為1920*1080)
TouchPoints的大小是如何確定的?
Rplidar_multi_touch應用中首先將原始以極座標系表示的雷達點資料轉換成以笛卡爾座標系表示,如果兩個點距離小於0.05m (BlobCombinationThreshold引數),則將兩個點融合為一個以兩個點為矩形頂點的矩形,矩形長度取兩個點中較大x值,寬度取兩個點中較大y值,如果融合後的矩形和其他的矩形距離還是小於0.05m,則將兩個矩形繼續融合,以兩個矩形較大長度為新矩形長度,以兩個矩形較大寬度為新矩形寬度,融合直到沒有矩形或者點兩兩之間距離小於0.05.
然後根據矩形長度和寬度的大小關係,計算出以長度或者寬度為直徑的圓的半徑,作為TouchPoints在螢幕上畫圓的半徑。
SDK 和例項程式的編譯
如果您使用Windows進行開發,請開啟位於workspacesvc10下的 VS 解決方案檔案:sdk_and_demo.sln。其中包含了 SDK 專案工程以及所有的示例程式專案。
您可以直接在 VS 環境中使用編譯命令對 SDK 本身以及所有示例程式進行編譯。按照開發需要,可以選擇 Debug 或者 Release 編譯方式。編譯結果可以 在 outputwin32Debug 或者 outputwin32Release 中找到。
Ultra_simple_multi_touch
該示例程式演示 PC 通過串列埠與 RPLIDAR 進行連線,並不斷的將在觸控區域內的 RPLIDAR 掃描資料輸出的最簡單過程。
使用方式:
1) 使用包裝裡提供的 USB 線連線 RPLIDAR 至 PC 機 (開發板集成了 USB 轉 串列埠晶片)
2)控制檯開啟workspacevs10demo_projectultra_simple_multi_touch bin下ultra_rplidar_multi_touch.exe執行程式
如果不指定 COM 裝置號,則程式會嘗試開啟 COM3。
rplidar_multi_touch
該示例程式演示 PC 通過串列埠與 RPLIDAR 進行連線,實時採集雷達掃描資料, 並在 GUI 介面上將觸控區域內的點資料融合以後以彩色圓圈的方式顯示出來。
使用方式
1) 使用包裝裡提供的 USB 線連線 RPLIDAR 至 PC 機 (開發板集成了 USB 轉 串列埠晶片)
2) 雙擊開啟 workspacevs10demo_projectrplidar_multi_touchbin下的rplidar_multi_touch_debug.exe執行程式
在配置流程步驟8中已有詳細介紹。
Calibration application
該示例程式演示 PC 通過串列埠與 RPLIDAR 進行連線,實時採集雷達掃描資料, 並在 GUI 介面上將觸控區域內的點資料,以及標定了觸控區域的大小與範圍.
使用方式
1) 使用包裝裡提供的 USB 線連線 RPLIDAR 至 PC 機 (開發板集成了 USB 轉 串列埠晶片)
2) 雙擊開啟 workspacevs10demo_projectcalibration_appbin下的rplidar_multi_touch_debug.exe執行程式
3)點選左上方file目錄下load configuration,選擇..conf目錄下(Debug編譯)workspacevs10demo_projectcalibration_appbin目錄下(Release編譯)的對應json檔案讀取配置,此時雷達會開始轉動,介面上會出現雷達掃描點和標定觸控區域的白框,可以手動拖動調整框體的大小和區域。點選file目錄下的save configuration可以儲存配置好的觸控區域位置資訊。
注意
請注意儲存的配置檔案也必須位於相應同一目錄下,否則將無效。
SDK檔案架構
SDK的檔案結構如下圖所示:
檔案中包含了此SDK中使用的第三方庫,分別是:
· Jsoncpp庫 用於解析Json格式的檔案
· Open frameworks庫 用來基於此框架快速開發高效能的互動程式
conf目錄包含一個json格式的配置檔案,會在每次開始掃面時讀取這個配置檔案中的引數,可配置的引數包括
· “connect path”連線路徑和方式選擇,暫時只支援串列埠和TCP,
· “touch_area”觸控區域的大小
· “show_lidar_scan”是否顯示雷達掃描點
· “show_touch_point_coordination”是否顯示touchpoint座標
· “angle_offset”預設為180度,此引數不能改變。
demo_app目錄包含了相關的示例程式程式碼,暫時提供瞭如下幾個示例程式:
· rplidar_multi_touch
一個基於win32的GUI顯示程式,獲取到當前觸控的點資料後,經過渲染實時的呈現在介面上。
· Ultra_simple_multi_touch
一個基於命令列的演示程式,不斷的輸出當前的觸控點資料。
SDK目錄包含了multi_touch驅動程式的外部標頭檔案(include目錄)以及SDK自身的內部實現程式碼(src目錄)。
Workspace目錄包含了SDK和相關示例程式的VS工程專案檔案。
對於經過編譯的 SDK,上述目錄結構還會新增 2 個子目錄:obj 和 output。 其中 output 目錄存放了編譯產生的 SDK 靜態庫(.lib 或者.a)以及示例程式的可 執行檔案(exe 或者 elf 格式)。obj 目錄存放了編譯過程中的中間檔案。
至此所有的配置步驟已經SDK介紹就結束了,使用者可以通過配置快速將RPLIDAR與Multi_touch SDK結合,通過rplidar_multi_touch應用顯示所有的TouchPoints,實現多點觸控的效果。
使用者也可以根據Multi_touch SDK進行二次開發,附錄中附有SDK標頭檔案和介面函式的簡介,以幫助使用者快速開發。