前言
? 學校任務,挖坑慢慢填闷畸。
硬件支持
? 1.Raspberry Pi 3 (raspberry pi zero用于數(shù)據(jù)集群)
? 2.金士頓16G閃存卡(class10)
? 3.HDMI數(shù)據(jù)傳輸線
? 4.樹莓派官方攝像頭
? 5.其他樹莓派常用配件
? 6.stm32開發(fā)板
? 7.stm32小車配件
? 8.充電寶用于邏輯電路供電
? 9.電池用于機械部件供電
實現(xiàn)方案
? 使用樹莓派作為邏輯總控,使用Arduino作為機械總控吞滞。
? 樹莓派作為小型計算機佑菩,搭載了ARM系列處理器,所以作為圖像識別的處理器冯吓,同時還搭載了WIFI模塊倘待,如果使用樹莓派作為處理器無法達到要求,可以通過WIFI將數(shù)據(jù)傳輸至服務器進行數(shù)據(jù)處理组贺,將結果數(shù)據(jù)傳回小車凸舵。
硬件配置
視頻信號采集硬件
? 本文項目使用了CMOS材料的攝像頭(CSI接口,非USB攝像頭)失尖,像素都連接著 ADC啊奄,不用設計專屬通道,也可以轉為數(shù)字信號使用掀潮,像素體積較小菇夸,內部可以設置信號處理器,輔助寄存器可以用作緩存仪吧,且所需耗電量也少庄新。數(shù)字攝像頭采集的圖像較為準確,可抗干擾薯鼠,有利于 CMOS 攝像頭在智能小車上的實時應用择诈。
- 無 IR 濾波器
- 高清圖像
- 高數(shù)據(jù)容量
- 8 百萬像素固定焦點(包括.焦點調整工具)
- 支持 1080p、720p60 和 VGA90
- Sony IMX219PQ CMOS 圖像傳感器
- 15 引腳帶狀電纜
架構設計
? 小車上開啟socket server出皇,接收控制端發(fā)來的指令羞芍,也將圖片發(fā)送給控制端。
PC上開啟httpserver郊艘,方便隨時隨地查看小車攝像頭的視頻數(shù)據(jù)荷科,由于motion自帶了一個httpserver,可以通過嵌入frame的方式快速實現(xiàn)網(wǎng)頁實時監(jiān)控視頻播放纱注。
邏輯控制單元(raspberry pi 3)
?樹莓派是一系列小型單板計算機由英國樹莓派基金會開發(fā)畏浆,以促進基本的教學計算機科學在學校和發(fā)展中國家。原始模型比預期更加流行狞贱,在目標市場之外銷售機器人等用途刻获。它不包括外設(如鍵盤,鼠標和外殼)斥滤。然而将鸵,一些配件已被包括在幾個官方和非官方的捆綁。
基本參數(shù)
? CPU:ARM Cortex-A53 1.2GHz 64-bit quad-core ARMv8 CPU
? 視頻輸入:Broadcom VideoCrore IV佑颇,OpenGL ES 2.0,1080p 30 h.264/MPEG-4 AVC高清解碼器
? 外接設備:17個GPIO及HAT規(guī)格鋪設
電源:5V / 通過MicroUSB或GPIO頭
? 本文中所采用樹莓派的原因在于樹莓派自帶h264硬解碼顶掉,可以針對攝像頭的視頻進行GPU的處理,同時樹莓派支持多種設備連接方式挑胸,便于使用和多平臺協(xié)作痒筒。
機械控制單元
? Arduino是一款便捷靈活、方便上手的開源電子原型平臺茬贵。包含硬件(各種型號的Arduino板)和軟件(Arduino IDE)簿透。由一個歐洲開發(fā)團隊于2005年冬季開發(fā)。其成員包括Massimo Banzi解藻、David Cuartielles老充、Tom Igoe、Gianluca Martino螟左、David Mellis和Nicholas Zambetti等啡浊。
? 它構建于開放原始碼simple I/O介面版,并且具有使用類似Java胶背、C語言的Processing/Wiring開發(fā)環(huán)境巷嚣。主要包含兩個主要的部分:硬件部分是可以用來做電路連接的Arduino電路板;另外一個則是Arduino IDE钳吟,你的計算機中的程序開發(fā)環(huán)境廷粒。你只要在IDE中編寫程序代碼,將程序上傳到Arduino電路板后红且,程序便會告訴Arduino電路板要做些什么了坝茎。
? Arduino能通過各種各樣的傳感器來感知環(huán)境,通過控制燈光直焙、馬達和其他的裝置來反饋景东、影響環(huán)境。板子上的微控制器可以通過Arduino的編程語言來編寫程序奔誓,編譯成二進制文件斤吐,燒錄進微控制器。對Arduino的編程是通過 Arduino編程語言 (基于 Wiring)和Arduino開發(fā)環(huán)境(基于 Processing)來實現(xiàn)的厨喂『痛耄基于Arduino的項目,可以只包含Arduino蜕煌,也可以包含Arduino和其他一些在PC上運行的軟件派阱,他們之間進行通信 (比如 Flash, Processing, MaxMSP)來實現(xiàn)。
特點
- 跨平臺
- 簡單清晰
- 開放性
- 發(fā)展迅速
邏輯控制單元
? 本項目在樹莓派小車上模擬實現(xiàn)了自動避障的無人駕駛車斜纪,通過使用motion攝像頭管理工具獲取攝像頭數(shù)據(jù)贫母,使用python的tornado框架搭建了webserver進行網(wǎng)頁監(jiān)控文兑,并通過socket與小車進行數(shù)據(jù)通訊,在server上將小車發(fā)送的圖像數(shù)據(jù)利用darknet深度學習框架進行處理腺劣,在此結果上設計了小車的避障算法绿贞,并將控制指令發(fā)送回小車,實現(xiàn)自動避過障礙物達到目標物體的目的橘原。
motion運動檢測模塊
Motion(http://www.lavrsen.dk/foswiki/bin/view/Motion/)是一款小巧籍铁、輕型但又功能強大的應用軟件,可以用來在Linux上操控監(jiān)控攝像頭趾断。它能夠與任何支持Linux的攝像頭協(xié)同運行拒名,包括所有的V4L網(wǎng)絡攝像頭、許多IP攝像頭以及安迅士(Axis)攝像頭芋酌,它還可以控制平移和傾斜功能增显。Motion可以錄制使用JPEG、PPM和MPEG等格式的短片和快照脐帝,你可以在Web瀏覽器中遠程查看這些視頻甸怕,這要歸功于Motion的內置HTTP服務器。它將圖像文件存儲在你所選擇的一個目錄里腮恩,它也不需要數(shù)據(jù)庫梢杭,不過它支持MySQL和PostgreSQL牵咙,如果你的確想要使用其中一個的話嵌洼。
tornado框架
Tornado 是 FriendFeed 使用的可擴展的非阻塞式 web 服務器及其相關工具的開源版本逆济。這個 Web 框架看起來有些像 web.py 或者 Google 的 webapp肤晓,不過為了能有效利用非阻塞式服務器環(huán)境疟位,這個 Web 框架還包含了一些相關的有用工具 和優(yōu)化了罪。
Tornado 和現(xiàn)在的主流 Web 服務器框架(包括大多數(shù) Python 的框架)有著明顯的區(qū)別:它是非阻塞式服務器硼补,而且速度相當快茶鹃。得利于其 非阻塞的方式和對 epoll 的運用释液,Tornado 每秒可以處理數(shù)以千計的連接全释,這意味著對于實時 Web 服務來說,Tornado 是一個理想的 Web 框架误债。我們開發(fā)這個 Web 服務器的主要目的就是為了處理 FriendFeed 的實時功能 ——在 FriendFeed 的應用里每一個活動用戶都會保持著一個服務器連接浸船。
socket連接
兩個進程(程序)如果需要進行通訊最基本的一個前提能夠唯一標示一個進程,在本地進程通訊中我們可以使用PID(progress ID)來唯一標示一個進程寝蹈,但PID只在本地唯一李命,網(wǎng)絡中的兩個進程PID沖突幾率很大,這時候我們需要另辟它徑了箫老,我們知道IP層的ip地址可以唯一標示主機封字,而TCP層協(xié)議和端口號可以唯一標示主機的一個進程,這樣我們可以利用ip地址+協(xié)議+端口號唯一標示網(wǎng)絡中的一個進程。
? 能夠唯一標示網(wǎng)絡中的進程后阔籽,它們就可以利用socket進行通信了流妻,什么是socket呢?我們經(jīng)常把socket翻譯為套接字笆制,socket是在應用層和傳輸層之間的一個抽象層合冀,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用已實現(xiàn)進程在網(wǎng)絡中通信。
darknet神經(jīng)網(wǎng)絡
Darknet是一個用C和CUDA編寫的開源神經(jīng)網(wǎng)絡框架项贺。它安裝速度快,易于安裝峭判,并支持CPU和GPU計算开缎。你可以在GitHub上找到源代碼,并對其進行設計林螃。
你只看一次(YOLO)是一個最先進的實時對象檢測系統(tǒng)奕删。在Titan X上,它以40-90 FPS的速度處理圖像疗认,COCO test-dev上的VOC 2007上的mAP為78.6%完残,mAP為48.1%。
事先檢測系統(tǒng)將分類器或定位器重新用于執(zhí)行檢測横漏。他們將模型應用于多個位置和尺度的圖像谨设。圖像的高評分區(qū)域被視為檢測結果。
我們使用完全不同的方法缎浇。我們將一個神經(jīng)網(wǎng)絡應用于整個圖像扎拣。該網(wǎng)絡將圖像劃分為區(qū)域并預測每個區(qū)域的邊界框和概率。這些邊界框由預測的概率加權素跺。
我們的模型比基于分類器的系統(tǒng)有幾個優(yōu)點二蓝。它在測試時查看整個圖像,以便通過圖像中的全局上下文來預測它的預測指厌。與單一圖像需要數(shù)千個的R-CNN等系統(tǒng)不同刊愚,它也使單個網(wǎng)絡評估的預測成為可能。這使其速度非巢妊椋快鸥诽,比R-CNN快1000倍,比Fast R-CNN快 100倍箕憾。有關完整系統(tǒng)的更多詳情衙传,請參閱我們的論文。
網(wǎng)絡攝像頭的同步檢測
YOLOv2使用一些技巧來改善培訓并提高性能厕九。像Overfeat和SSD一樣蓖捶,我們使用完全卷積模型,但是我們仍然訓練整個圖像扁远,而不是嚴格的否定俊鱼。就像更快的R-CNN一樣刻像,我們調整邊界盒的先驗,而不是直接預測寬度和高度并闲。但是细睡,我們仍然直接預測x
和y
坐標。完整的細節(jié)在我們的論文中帝火。
[圖片上傳失敗...(image-9f52f6-1523716485849)]
Darknet會打印出它檢測到的物體溜徙,信心以及找到它們需要多長時間。我們沒有編譯Darknet犀填,OpenCV
因此無法直接顯示檢測結果蠢壹。相反,它將它們保存在內predictions.png
九巡。您可以打開它來查看檢測到的對象图贸。由于我們在CPU上使用Darknet,每個圖像需要大約6-12秒冕广。如果我們使用GPU版本疏日,速度會更快。
如果你看不到結果撒汉,在測試數(shù)據(jù)上運行YOLO并不是很有趣沟优。而不是在一堆圖像上運行它,讓我們在網(wǎng)絡攝像機的輸入上運行它睬辐!
要運行這個演示净神,你需要用CUDA和OpenCV編譯Darknet。然后運行命令:
./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights
</pre> YOLO將顯示當前的FPS和預測類以及在其上繪制邊界框的圖像溉委。 您需要連接到OpenCV可連接到的計算機的網(wǎng)絡攝像頭鹃唯,否則它將無法工作。如果您連接了多個網(wǎng)絡攝像頭并且想要選擇使用哪一個攝像頭瓣喊,則可以通過該標記
<span style="font-family: 'Open Sans', 'Clear Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;">-</span>c <num>進行選擇(
0默認情況下坡慌,OpenCV使用網(wǎng)絡攝像頭)。 ### 避障代碼實現(xiàn) 將圖片縱向劃分成了三部分藻三,以1/3 洪橘、2/3為中間的界,劃分了三塊棵帽,并依次編號為1,2,4熄求。(本來初衷是想利用二進制處理,但是最后趕時間逗概,也沒有用二進制實現(xiàn)弟晚,實際上,還是用的大量if-ellse) <pre>
st=>start: 接收拍的照片
cond=>condition: 目標物體在視線里?
targ_is_7=>condition: 目標物體沒有占滿視線卿城?
e=>end
rotate=>operation: 調整角度
judge1_if=>condition: 目標物體單獨占了一個block枚钓?
judge1=>operation: judge_barriers_1函數(shù)
judge2=>operation: judge_barriers_2函數(shù)
st->cond->targ_is_7->judge1_if
cond(yes)->targ_is_7
cond(no)->rotate->e
targ_is_7(no)->e
targ_is_7(yes)->judge1_if
judge1_if(yes)->judge1->e
judge1_if(no)->judge2->e
?