靈感背景
作為科幻迷,大家或多或少都看過不少人類幻想中的機器人的應用,在《普羅米修斯》、《阿凡達》、《星球大戰》等電影中,都少不了技術先進,想法奇特的機器人的幫助,特別是在惡劣環境的探測和特定執行任務中,例如《普羅米修斯》中自動搜索迷宮的探測飛行器,《阿凡達》中“人機合一”的戰甲,《星球大戰》中可愛聰明的R2-D2機器人……在這些想法的啟發下,不少狂拽酷炫的科技作品也相繼湧出。 我們項目就是在這種背景下萌生的想法,做一款新奇的機器人,或許可以應用在荒野星球的開荒探測呢~當然,這個只是個願景,我們項目主要做的是探究改進機器人的越障能力,即全地形適應能力,還有利用時下正火的 deep learning 工具 TensorFlow 增加探測機器人的自主智慧,適應未知環境自主探測任務需求。這就是我們的大膽嘗試的項目—基於深度學習的複雜地形輪腿式移動探測機器人,並且在江蘇省虛擬儀器競賽結束後,我們又進一步完善了作品,增加了激光雷達的新功能,實現初步自主移動功能。
設計方案
基於深度學習的複雜地形輪腿式移動探測機器人,底盤運動方式採用輪腿式移動方案,輪腿結合,利用輪式運動連貫特性,節省能量並且控制簡單,並且結合腿式運動方式良好的越障能力,採用複合式運動控制,綜合兩種運動方式在各個方面的優點,提高運動適應能力,可以穩定的移動和攀爬凸起障礙。 機器人的智慧化是利用 deep learning 深度學習,增加機器人的圖像識別能力,可使機器人識別其所看到的東西。我們採用基於ImageNet數據集的Inception V3模型,其Top5的識別率可達96.5%。在參加比賽時,我們的機器人只能達到遙控移動和遠程監控識別,經過最近的優化升級,我們增加了激光雷達,機器人可以完成自主避障,自主搜尋探測功能。
在後續的改進方案裡,我們還要加入激光雷達地圖建立和SLAM自主導航,並且將識別到的物體標記在地圖中,另外我們還有設計將彈跳功能加入機器人,完成全面的自主智慧複雜環境探測器。
使用的軟硬體清單
- 硬體清單:
- 核心板 / LabVIEW for Raspberry Pi2 DIGILENT套件 X1
- 控制器 Arduino Nano X1
- 電機驅動板 L298N 驅動板 X1
- 攝影鏡頭 羅技(Logitech)C270 X1
- 雷射雷達 rplidar A1 X1
- 無線網卡 EDIMAX EW-7711UAN X1
- 遙控器套件 天地飛WFT06A X1
- 電源 12V轉5V5A,4USB X1
- 鋰電池 12V 3000mAh 18650鋰電池組 X1
- 電機 LX31WG雙軸渦輪蜗杆減速電機 X1
- 軟體清單
- 影像服務軟體 MJPG-streamer
- 機器學習平台 TensorFlow
- 物體識別模型 Inception V3
- 避障演算法 Vector Field Histogram
- 上位機軟體 LabVIEW
系統組成
本設計由以下幾個系統組成:底盤底層控制系統、遠端監控系統、機器學習物體識別系統、運動路徑規劃系統,各系統相互整合在整個機器人系統中。 系統硬體採用了上位機PC、樹莓派和Arduino,搭配雷射雷達、攝影鏡頭、電機驅動板等配件,實現完整的機器人系統功能。在整個系統的搭建中,大多是以開源項目的應用為主,結合流行的開源應用進行整合。
底盤控制系統
底盤的運動方案採用的是 Ackerman 轉向結構,由前後貫通橋提供四驅動力,利用前橋轉向舵進行轉向控制,現在的商用車和大多數遙控車車模也是採用此種轉向機構。在此設計中,我們採用了恆冠電動遙控車模前後橋波箱總成,利用 KST 大扭力舵機為轉動副提供轉向動力。巡檢機器人應該兼顧地形通過能力和移動速度,為此我們選用了12V、減速後 60rpm、轉動力矩達 8kg·cm 的自鎖式渦輪蜗杆直角減速直流電機,可以適應一定坡度和高度的障礙物趴越,也可以擁有較快的移動速度。
在輪式運動中,我們並沒有採取通用圓形橡膠輪,而是自行設計了輪腿式三角結構輪,利用 3D 打印技術打印而成。四個腿式結構結構彼此相差120°,彼此輪子構成穩定的三角結構,腿式運動方式具有良好的越障能力,並且輪式運動結構簡單,運動連貫,節省能量並且控制簡單,採用複合式運動控制,綜合兩種運動方式在各個方面的優點,兼顧了運動穩定性和運動越障性能。
底盤的運動控制方式有兩種:遙控器手動控制和自主避障導航控制。手動方式中,遙控器採用天地飛 WFT06A 航模遙控器,利用 Arduino 擷取遙控器控制訊號,直接將訊號控制透過處理分析控制電機驅動板和舵機進行運動。在自主避障導航控制中,Arduino 接收來自樹莓派的底層控制指令,從而控制底盤運動,這種控制方式也使機器人控制有了更好的擴充性。
遠端監控系統
遠程探測器的必備技能就是遠程監控系統,在本項目中,我們選用了比較經典的開源影像服務器軟體 MJPG-streamer。MJPG-streamer是一個輕量級的影像服務器軟體。一個可以從單一輸入組件獲取圖像並傳輸到多個輸出組件的命令應用程序。該軟體可應用在基於 IP 協議的網路中,從網路攝影鏡頭中獲取並傳輸 JPEG 格式的圖像到瀏覽器,甚至可以是運行了 TCPMP 播放器的 windows 移動設備。主要針對 RAM 和CPU 資源有限制的嵌入式設備而編寫的,為了減少 CPU 的負擔,它充分利用了網路攝影鏡頭的硬體壓縮能力,主要通過輸入插件,從攝影鏡頭擷取圖像後,再透過網頁輸出插件將圖像輸出,故其對 CPU 的佔用率較低。這款工具源代碼簡潔,註釋清晰。組件功能明確,銜接清晰。使用Linux C語言進行開發,可移植到不同的計算機平台,也可以在根據GPL v2的條款下進行改進和發行。
MJPG-streamer採用模組化的設計方法,以功能模組為單位進行描述,這些功能模組成為plug-in。軟體中定義好了各組件的輸入、輸出,以及組件之間的銜接關係。MJPG-streamer 最主要並且最常用的組件是 input_uvc 輸入組件和 output_http 輸出組件。其他組件包括input_control、input_file、input_testpicture、input_gspcavl、output_autofocus、output_file、out_viewer 等。關於 MJPG-streamer 的使用教程可以參考《樹莓派使用 MJPG-Streamer 實現網路監控》,關於MJPG-streamer的原理了解和技術實現可以參考《開源軟體 mjpg-streamer簡要分析》。
在我們項目中我們對 MJPG-streamer 程序進行了改寫,使得遠端監控系統可以讀取網路攝影鏡頭影像,並同時通過 http 網頁推流發佈到遠端監控系統上位機監控台和通過緩存文件形式將圖像傳輸到深度學習物體識別模型中進行分析識別。MJPG-streamer本身就是視頻服務器軟件,通過 output_http 組件可以使監控影像進行服務器發佈。 在 LabVIEW 上位機中,我們內嵌了 IE 核心的 WebBrowser ActiveX 控制項,透過讀取樹莓派影像服務器獲取得到網頁監控影像。通過 ActiveX 控制項的打開自動化初始化 WebBrowser 控制項,獲得 ActiveX 控制項的自動化句柄,並且調用資源導航到監控網頁,達到遠端監控效果。
機器學習物體識別系統
時下最火的莫過於機器學習,並且以深度學習為主導的模型應用在圖像識別、圖像分割、語義理解等多個方向,在機器視覺,也就是物體識別方面的進展更是突飛猛進。我們利用 tensorflow 來搭建探測機器人物體識別模組,將圖像識別功能架載在裝有 Linux 系統的樹莓派上,使得我們的複雜地形探測器具有物體識別的實用功能。我們利用了 Google 開源的物體識別演算法 Inception V3 模型,基於 ImageNet 數據集進行物體識別,且可根據需要自行調整數據集。
Inception V3 模型是基於 TensorFlow 平台的,所以需要在樹莓派上搭建 TensorFlow 平台。 TensorFlow 的安裝說明很容易找到,但因為需要運行在樹莓派上,基本上可以找到的編譯好的安裝包是不能直接安裝在樹莓派上,直接用樹莓派從源碼安裝也會有依賴項等解決麻煩,並且耗時耗力。
我們尋找了 GitHub 上別人編譯好的適合樹莓派的 TensorFlow— tensorflow-on-raspberry-pi,建立過程可詳見上述連結。TensorFlow 只是應用工具,應用物體識別功能需要加載模型,下載 Inception V3 模型以及 ImageNet 數據集,只需應用 TensorFlow/models/image/imagenet 模型中的 classify_image.py 即可測試基於機器學習的物體識別功能。我們參考 example 自行編寫了python 程序,將上節所述的影像流擷取的圖像傳遞進模型,等待模型計算即可得到 Top5 相似的識別標籤以及命中率,並且與上位機進行交互,接收識別指令和反饋識別結果。
運動路徑規劃系統
在進一步完善項目過程中,我們發現機器人自主化程度是軟肋,需要提升,因為我們在比賽完後進一步完善作品,增加了360°雷射雷達,獲取機器人周圍的環境訊息,並將數據用來做機器人自主避障功能。 我們選用了 SLAMTEC 的 360°雷射雷達 RPLidar A1,識別距離可以達到 4 公尺左右,識別精度 0.9°。在此項目中,深度學習用來做機器人移動環境物體識別檢測,利用 A1 雷射雷達獲取機器人周圍環境訊息,進行避障和導航。
RPLidar 有封裝好的 API 介面進行調用,可以簡單方便的獲取雷射雷達的數據。在項目中,我們利用多線程工作、影像服務器、機器學習物體識別和雷射雷達數據擷取傳輸均為多線程工作,統一利用TCPServer做通訊介面,與上位機監控軟體做訊息傳遞。我們利用 TCPServer+StreamRequestHandler,重構 handle 方法,進行雷射雷達數據擷取,並傳輸到上位機進行避障算法,再調用classify_image 模型,將擷取圖像傳遞到模型進行分析,並將模型識別結果,通過 TCPServer 發送給監控終端。
機器人自主避障路徑規劃應用的是LabVIEW Robotics中的VFH算法,將雷射雷達數據進行分析計算,得到向量場直方圖,然後通過分析找出最適合的縫隙進行路徑規劃。Vector Field Histogram原理圖見圖2。 我們利用 LabVIEW 自帶的例程 LIDAR Guided Robot example 進行了改寫,透過 TCP Socket 獲取來自樹莓派的激光雷達數據,然後傳遞給 Simple Vector Field Histogram VI 進行分析處理,並將路徑規劃結果發佈到底盤運動控制器。
系統特點
1. 採用地面輪腿式移動形式,高效的輪式運動和靈活的腿式運動相結合,具有較高的地面適應力和越障能力;
2. 利用 LabVIEW 上位機進行遠程的視頻監控,便於控制移動及數據處理,增強了機器人探測的可控性;
3. 嘗試先進技術應用,利用 Tensorflow 機器學習物體識別模型,增加未知環境探測器的智能性,還可自行擷取數據,達到特殊場合的應用,讓探測器更加智能;
4. 利用雷射雷達和VFH算法進行機器人自主避障路徑規劃,擁有自主移動和自主探測能力,堪稱探測機器人標配的兩大功能;
5. 系統化方案設計,從採集、處理、運動到監控系統化設計合理。
基于深度学习的复杂地形轮腿式移动探测机器人项目的DIY动手指南
http://www.digilent.com.cn/project/diy/122.html