樹莓派圖像避障小車

前言

? 學校任務,挖坑慢慢填闷畸。

硬件支持

? 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)

覆盆子-PI-3-平面Top.jpg

?樹莓派是一系列小型單板計算機由英國樹莓派基金會開發(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)。

特點

  1. 跨平臺
  2. 簡單清晰
  3. 開放性
  4. 發(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框架

TornadoFriendFeed 使用的可擴展的非阻塞式 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ū)域的邊界框和概率。這些邊界框由預測的概率加權素跺。

img

我們的模型比基于分類器的系統(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一樣刻像,我們調整邊界盒的先驗,而不是直接預測寬度和高度并闲。但是细睡,我們仍然直接預測xy坐標。完整的細節(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

img

?

機械控制單元

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瑟押,隨后出現(xiàn)的幾起案子搀捷,更是在濱河造成了極大的恐慌,老刑警劉巖多望,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫩舟,死亡現(xiàn)場離奇詭異,居然都是意外死亡怀偷,警方通過查閱死者的電腦和手機家厌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枢纠,“玉大人,你說我怎么就攤上這事黎棠〗欤” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵脓斩,是天一觀的道長木西。 經(jīng)常有香客問我,道長随静,這世上最難降的妖魔是什么八千? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮燎猛,結果婚禮上恋捆,老公的妹妹穿的比我還像新娘。我一直安慰自己重绷,他們只是感情好沸停,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昭卓,像睡著了一般愤钾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上候醒,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天能颁,我揣著相機與錄音,去河邊找鬼倒淫。 笑死伙菊,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播占业,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼绒怨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谦疾?” 一聲冷哼從身側響起南蹂,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎念恍,沒想到半個月后六剥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡峰伙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年疗疟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞳氓。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡策彤,死狀恐怖,靈堂內的尸體忽然破棺而出匣摘,到底是詐尸還是另有隱情店诗,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布音榜,位于F島的核電站庞瘸,受9級特大地震影響,放射性物質發(fā)生泄漏赠叼。R本人自食惡果不足惜擦囊,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嘴办。 院中可真熱鬧瞬场,春花似錦、人聲如沸涧郊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽底燎。三九已至刃榨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間双仍,已是汗流浹背枢希。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留朱沃,地道東北人苞轿。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓茅诱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搬卒。 傳聞我的和親對象是個殘疾皇子瑟俭,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容