劉德志,孫作雷,曾連蓀
(上海海事大學 信息工程學院, 上海 201306)
摘要:構建了小型2D激光掃描儀驅動解決方案。以RPLIDAR為例,基于低成本硬件及其合理的通信規約設計,提升數據獲取的可靠性。基于CMake交叉編譯鏈使硬件驅動具有跨平臺特性。同時,通過增加launch文件,使其支持ROS (Robot Operating System)。并分別在Windows和ROS系統下完成測試。相應的代碼已在Github上開源,可免費用于移動機器人的導航、構圖與3D重建、同步定位與地圖構建(SLAM)等科研。
關鍵詞:驅動;激光雷達;跨平臺;開源
0引言
隨著工業、軍事及民用領域對自動化和人工智能技術需求的日益增長,與移動機器人相關的理論及應用已成為研究熱點。對于移動機器人而言,最常見的任務之一是在環境中繪制地圖并進行導航,而2D激光掃描儀是室內外機器人最常用的傳感器。目前,市場上已有一些廣泛應用于科研的2D激光掃描儀,并在越來越多的論著中被提及。例如德國的SICK系列、日本的Hokuyo系列等。
但是,結合國內外使用現狀,這些激光雷達具有如下弊端:(1)體積較大,在小型的機器人移動平臺上不適合安裝。(2) 售價較高,且多為國外產品,小型科研組難以承擔較為高昂的硬件設備預算,同時也很難廣泛用于民用領域。對于低成本小型激光雷達,2008年KONOLIGE K等人已經提出低成本激光雷達硬件設計思路[1],但直到2013年,一些公司才做出了相應的產品,價格僅為上述產品的十分之一。本文基于KONOLIGE K等人的設計思路及目前市場上現有雷達的通信規約,設計了可靠、高效的激光雷達驅動。該驅動具有以下特點:(1)跨平臺性,可在Windows、Ubuntu環境下使用;(2)使用簡單,研究者僅需簡單設置即可加入自己的工程;(3)開源,可免費用于科研。
1低成本激光雷達原理
所有的單點掃描設備,例如SICK和Hokuyo設備,采用激光時間飛行原理(Time of Flight),即通過測量激光發射和反射的時間來計算距離目標點的距離。而本方案采用激光三角測距技術,所用的紅外線傳感器與激光時間飛行原理所用的激光掃描器不同,所以極大地節省了成本。
1.1硬件結構
低成本激光雷達主要由激光測距核心、掃描電機、傳動和USB適配器三部分組成。測距核心是激光雷達最重要的組成部分。在分別給子系統供電后,測距核心在掃描電機的帶動下將開始順時針360°旋轉掃描并獲得掃描測距數據。
1.2測距機理
激光三角測距技術通過反射光線的角度來測量距離。圖1展現了三角測距的幾何圖。紅外線發射器發射一個紅外線,經物體反射回來并投影到接收器上。一個理想的接收器是調整好的,這樣紅外線光束與某些射線是平行的。
利用相似三角形的原理,垂直距離是:
激光束的距離也取決于激光相對于圖像軸的角度:
1.3數據幀格式
當激光雷達工作時,可進行每秒高達2 000次的測量動作。每個采樣點經過內部DSP處理器實時解算,得出被照射到的目標物體與激光雷達的距離值以及當前的夾角信息,并以表1的數據幀結構通過USB適配器輸出。
2驅動設計
基于目前市場上現有的低成本小型激光雷達RPLIDAR硬件及其通信規約,設計并完善了驅動。(1)合理規劃激光雷達的驅動流程,既保證讀取數據的高效,又增加異常處理保護硬件的安全。(2)編寫Makefile文件,采用交叉編譯[2],生成的驅動可以跨平臺使用,可供研究者在Windows、Linux、MacOS系統下使用。(3)設計存儲格式,使用二進制格式保存數據文件,將測量數據記錄下來用于未來的分析、處理、開發和算法驗證。(4)支持Robot Operating System(ROS),為使用低成本激光雷達研究機器人的導航與定位、環境掃描與3D重建、同步定位與地圖構建(SLAM)等領域提供了極大的方便。
2.1驅動模塊設計
本驅動的設計使用C++語言,基于模塊化思想,可分為激光雷達健康狀況檢測、通信錯誤處理、掃描準備、掃描數據獲取等模塊[3]。獲取激光雷達掃描測量數據的整個流程見圖2。
準備掃描模塊:啟動一個后臺工作線程,異步地接受來自激光雷達的掃描測距數據序列,并保存在內部的緩存當中。
獲取掃描數據模塊:抓取被激光雷達驅動事先接收并緩存的測距數據序列。該模塊將始終返回一個最新的完整的360°的掃描測距序列。每次調用后,保存掃描數據序列的內部緩存將會清空,以確保每次獲得不重復的數據[4]。
2.2輸出數據格式
把激光雷達的測量數據保存為后綴名為.dat二進制文件,供后期研究分析[5]。激光雷達的工作頻率為6 Hz,每掃描一圈有360個測量點,稱為一條記錄。為了方便管理和后期的研究,在每條記錄前加上時間戳。記錄的數據結構見表2。
3實驗驗證
本驅動默認采樣靜態庫方式組織,使用者只要簡單設置就可以整合到自身項目中:引用驅動庫的外部頭文件(位于sdk/inlcude文件夾);在鏈接階段,引用編譯好的靜態庫(rplidar_driver.a)即可。以低成本小型激光雷達的代表性產品rplidar為例,使用該驅動在多種操作系統下測試結果如下。
3.1Windows環境中單幀掃描
編寫顯示界面程序,把本驅動庫整合到此程序中。此程序的功能是實時采集雷達掃描數據,并在GUI界面上將0~360°環境下測距信息以平面圖的方式顯示出來[6]。在走廊中測試得到靜態數據如圖3所示。圖中圓心為RPLIDAR的位置,點集為障礙物。
3.2ROS中單幀掃描
ROS是專為機器人軟件開發所設計的一套開源的電腦操作系統構架,它提供了一系列的開源程序庫和工具以幫助研究者迅速創建機器人應用軟件。
在本驅動庫的基礎上,增加幾個ROS特有的文件并作相關設置即可使用。此部分代碼已在Github上開源。在ROS的RViz工具中實現的靜態掃描圖如圖4所示。
3.3實現構建地圖
在ROS中可以很方便地使用本驅動,然后調用開源的Hectorslam包來構建地圖。移動機器人正在構建地圖如圖5所示。本實驗已經做成視頻上傳到網絡并開源。
4結論
基于激光雷達硬件及其通信規約,構建了靈活、高效、開源的驅動。簡單介紹了低成本小型激光雷達的測距原理,重點闡述了驅動的設計和實現細節。在兩種環境下的測試和利用本驅動實現mapping證明了該驅動的易用性及可靠性。未來本驅動將用于機器人的定位與導航、同步定位與地圖構建的算法驗證工作。
參考文獻
[1] KONOLIGE K, AUGENBRAUN J, DONALDSON N. A lowcost laser distance sensor[C]. ICRA,2008:30023008.
[2] 聶和平. 基于ARM9的嵌入式Linux系統移植與驅動開發[D].南京:南京郵電大學,2013.
[3] 李進,王太宏,張恩迪. 嵌入式linux中nRF24l01驅動的設計與實現[J]. 計算機系統應用, 2011,20(9):226229,237
[4] OKUBO Y, YE C, BORENSTEIN J. Characterization of the Hokuyo URG04LX laser rangefinder for mobile robot obstacle negotiation[C]. International Society for Optics and Photonics, 2009:73321273321210.
[5] 張雪晶,孫作雷,曾連蓀,等. 基于聯合相容分支定界的關聯算法研究[J]. 微型機與應用, 2015,34(15):8284,88.
[6] CIVERA J, DAVISON A J, MONTIEL J. Inverse depth parametrization for monocular SLAM[J]. IEEE Transactions on Robotics, 2008, 24(5): 932945.