丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
智能硬件 正文
發(fā)私信給AI研習(xí)社
發(fā)送

0

Google工程師:教你用樹莓派+Arduino+TensorFlow搭建圖像識(shí)別小車

本文作者: AI研習(xí)社 2017-03-22 15:14
導(dǎo)語(yǔ):在Google,如果你覺得自己不得不從零開始寫某項(xiàng)功能,只是你還沒(méi)有找到相應(yīng)的工具罷了。在開源社區(qū)更是如此

雷鋒網(wǎng)按:本文作者趙智沉,Google軟件工程師。來(lái)自知乎專欄:趙智沉的作坊。雷鋒網(wǎng)獲授權(quán)轉(zhuǎn)載。

Google工程師:教你用樹莓派+Arduino+TensorFlow搭建圖像識(shí)別小車

從買第一個(gè)Arduino套裝開始,我接觸機(jī)器人有好幾年了,但直到最近才開始做完整的課題。期間有兩項(xiàng)技能為我打開了新世界的大門:Python和Linux。他們背后,是強(qiáng)大的開源社區(qū)。掌握了這兩樣工具的工具(元工具),你感覺網(wǎng)上遍地是趁手的兵器。

上周在公司內(nèi)部編程培訓(xùn)時(shí),有一句話深得我心:我們是軟件工程師,不是程序員。我們的工作不是寫程序,而是合理使用工具解決問(wèn)題。在Google,如果你覺得自己不得不從零開始寫某項(xiàng)功能,只是你還沒(méi)有找到相應(yīng)的工具罷了。在開源社區(qū)更是如此。

這是一個(gè)遙控小車,通過(guò)紅外遙控或無(wú)線鍵盤可以控制小車的行動(dòng)和攝像頭的角度。TensorFlow實(shí)時(shí)監(jiān)測(cè)攝像頭拍攝到的畫面,語(yǔ)音讀出它識(shí)別出的物體。所有代碼都放在我的GitHub上。

這個(gè)想法不是我的原創(chuàng),來(lái)自Lukas Biewald去年九月寫的這篇博客。核心部分,TensorFlow識(shí)別攝像頭圖像并語(yǔ)音輸出,是我司人工智能工程師Pete Warden的開源工作。和原博客不同的是,制作過(guò)程中我加入了Arduino作為機(jī)械總控,也了解了Arduino和樹莓派對(duì)話的方法(串口通信)。期間用到了許多有用的技能和工具,在這里整理一下,歡迎同好們留言交流!

整個(gè)課題在命令行環(huán)境完成,沒(méi)有圖形界面。如果你不懂Linux系統(tǒng),可能有些吃力。但是,你都開始玩機(jī)器人了,怎么能不學(xué)Linux呢?我是通過(guò)《鳥哥的Linux私房菜》自學(xué)Linux的,后來(lái)又嘗試從源代碼搭建Linux,終于克服在Windows系統(tǒng)環(huán)境長(zhǎng)大產(chǎn)生的對(duì)命令行的抗拒心理。相信我,克服這個(gè)障礙,你將打開新世界的大門。何況,用命令行工作才顯得更酷更極客,不是嗎?除了Linux,你還要懂C++和Python來(lái)完成這個(gè)課題。

另外,這篇文章主要介紹電子部分,不講機(jī)械和美工。如你看到的,這個(gè)小車丑破了我的審美底線,我沒(méi)花心思在外觀上。我希望以后做一些兼具美學(xué)和功能的電子課題,或許會(huì)和設(shè)計(jì)師朋友們合作!

一、樹莓派

首先,你需要一個(gè)最新款的Raspberry Pi,安裝好定制的Linux系統(tǒng),連上無(wú)線網(wǎng)。你還需要一個(gè)官配攝像頭,并在樹莓派中設(shè)置為可用。你可以將樹莓派通過(guò)HDMI連接到顯示器,但更方便的做法是ssh遠(yuǎn)程登錄,這樣你就不用在調(diào)試過(guò)程中反復(fù)地把樹莓派從小車上拔線、取下、連屏幕、然后安裝回小車了,你可以實(shí)時(shí)遠(yuǎn)程修改小車的內(nèi)核。甚至,我的Arduino程序也是通過(guò)樹莓派編寫、上傳、通信的,于是也免去了電腦連接Arduino的步驟,讓一切更流暢無(wú)縫。

樹莓派的Linux系統(tǒng)支持圖形桌面,你可以使用RealVNC(用于Windows)或TightVNC(用于Mac)遠(yuǎn)程登錄圖形桌面。(這個(gè)課題里不需要)

二、TensorFlow

這是課題的核心部分,反而操作起來(lái)最簡(jiǎn)單,因?yàn)橐磺卸荚?a target="_blank" rel=nofollow>這里寫清楚了,按部就班就行。運(yùn)行代碼在這里。

注意:這里用了訓(xùn)練好的模型,即TensorFlow中預(yù)先給定了訓(xùn)練好的參數(shù)集,訓(xùn)練圖片庫(kù)是ImageNet。也就是說(shuō),小車識(shí)別出的物體只能是圖片庫(kù)里包含的labels,也沒(méi)有“學(xué)習(xí)”的過(guò)程。

三、小車

小車套件(robot chassis)很多,選你喜歡的一款。標(biāo)準(zhǔn)的套件包括一個(gè)基座,兩組馬達(dá)+輪子,一個(gè)萬(wàn)向輪,一個(gè)電池盒。這個(gè)課題不需要四驅(qū),而且之后要用到的馬達(dá)控制器可能只支持兩個(gè)馬達(dá)。我用的是張堯姐送給我的第一個(gè)DIY套件:一個(gè)戳了很多洞的木板和3D打印出來(lái)的輪子和連接部件。這個(gè)恐怕是蘿卜太辣最早的套件,來(lái)自硅谷的創(chuàng)客空間。

現(xiàn)在,蘿卜太辣正式出品的“起源”套件已很完善,線上也有成熟的教學(xué)資源。這個(gè)課題里用到的舵機(jī)和金屬連接部件都來(lái)自堯姐送給我的第二個(gè)套件——“起源”套件。但從感情上來(lái)講,那套粗糙的木板套件讓我更親近,符合“用最簡(jiǎn)單的材料實(shí)現(xiàn)原型”的理念。

電源:樹莓派需要5V、2A電源,放在小車上的話需要一個(gè)電流足夠大的充電寶。連接樹莓派和Arduino的連接線同時(shí)也為Arduino供電。但是,馬達(dá)我用了外部電源(電池盒)。你會(huì)發(fā)現(xiàn)即使沒(méi)有外部電源,充電寶依然可以帶動(dòng)馬達(dá)(盡管很慢)。但是,好的習(xí)慣是機(jī)械部分獨(dú)立供電;邏輯電路部分由充電寶提供。

下一步,操控小車。這里有兩個(gè)方案,第一個(gè)不需要Arduino。我使用的是第二個(gè)。

3.1 樹莓派作為機(jī)械總控

我認(rèn)為單片機(jī)的精髓,不是尺寸小,而是豐富的GPIO(General Purpose Input-Output),它們是程序與外部世界對(duì)話的窗口。你看到的各種電子部件、探頭、焊接、面包板,都是在和GPIO打交道。你需要了解基本的電路知識(shí),也需要知道它們?cè)趩纹瑱C(jī)上的排布。樹莓派有一個(gè)非常好用的GPIO Python庫(kù):gpiozero,使用方法一目了然。

通常用四個(gè)端口控制馬達(dá),分別連接兩個(gè)馬達(dá)的正負(fù)級(jí),通過(guò)每個(gè)馬達(dá)的正向/逆向旋轉(zhuǎn)來(lái)實(shí)現(xiàn)小車的前進(jìn)/后退/轉(zhuǎn)向。實(shí)現(xiàn)雙向電流的標(biāo)準(zhǔn)電路模型是H橋接。你可以選購(gòu)一款最基本的H-bridge模塊。

因?yàn)槲沂诸^沒(méi)有H橋接,所以這個(gè)方案我沒(méi)有實(shí)現(xiàn)。

3.2 Arduino作為機(jī)械總控

我沒(méi)有H橋接,但有一個(gè)用于Arduino的Motor stacking shield,即Arduino上的H橋接。于是我干脆用Arduino負(fù)責(zé)機(jī)械(馬達(dá)+舵機(jī)),相當(dāng)于身體;樹莓派只負(fù)責(zé)圖像識(shí)別,相當(dāng)于大腦。

Arduino不是Linux系統(tǒng),不能直接ssh進(jìn)去寫程序,需要在外寫好后編譯上傳。我用數(shù)據(jù)線連接了樹莓派和Arduino,在樹莓派上寫好程序后上傳。我發(fā)現(xiàn)一個(gè)非常好用的命令行IDE:PlatformIO(也有很棒的圖形界面編輯器)。Linux上的安裝過(guò)程基于Python 2.7。你需要一些初始化,如果像我一樣是Arduino Uno主板,輸入以下命令即可:

pio init -b uno

Arduino的C++源代碼在這里。進(jìn)入這個(gè)文件夾后,輸入以下命令即可上傳:

pio run –target upload

后來(lái)我發(fā)現(xiàn)PlatformIO對(duì)于Arduino主板好像不支持C++11,如果你有這個(gè)需要,可以考慮inotool

四、無(wú)線遙控

同樣有兩個(gè)方案:無(wú)線鍵盤,紅外遙控。兩個(gè)方案我都實(shí)現(xiàn)了。

4.1 無(wú)線鍵盤

如果你在上一步用了3.1,無(wú)線鍵盤操控模塊就可以直接嵌入到機(jī)械操控代碼中(我沒(méi)有實(shí)現(xiàn))。如果你在上一步用了3.2,那么需要在樹莓派上將按鍵操作轉(zhuǎn)為機(jī)械控制信號(hào)(文本形式),通過(guò)串口通信(Serial Port)操控Arduino。

python代碼在這里,用到了我自己寫的庫(kù),用來(lái)檢測(cè)鍵盤按鍵。這個(gè)庫(kù)將單次按鍵匹配到前進(jìn)/后退/轉(zhuǎn)/停止等行為;但我希望實(shí)現(xiàn)的是長(zhǎng)按鍵前進(jìn)/后退/轉(zhuǎn),不按鍵時(shí)停止。但我始終沒(méi)有找到現(xiàn)成的庫(kù)(Update:據(jù)說(shuō)在PyGame里有)。

后來(lái)我試著通過(guò)背景線程(threading)和系統(tǒng)延時(shí)的方法寫了一個(gè)庫(kù),但效果不太理想,系統(tǒng)延時(shí)和程序運(yùn)行時(shí)間帶來(lái)的誤差總是匹配不好,就放棄了?,F(xiàn)在代碼里用的是單次按鍵行動(dòng)/停止的方案。如果讀者有好的庫(kù),請(qǐng)推薦!

有一點(diǎn)要注意,使用串口通信前需要disable login(既然你已經(jīng)ssh遠(yuǎn)程登錄了),這篇解釋比較清楚。

4.2 紅外遙控

紅外的長(zhǎng)按返回的是一個(gè)單獨(dú)的值(REPEAT),這點(diǎn)就可以讓我很容易實(shí)現(xiàn)“長(zhǎng)按-車動(dòng),不按-車?!?。此外,紅外遙控的代碼直接寫在Arduino的C++代碼里,不需要通過(guò)樹莓派和串口通信,更符合Arduino作為機(jī)械總控的設(shè)計(jì)原則。

PlatformIO不自帶紅外的庫(kù),我用的是這個(gè)。PlatformIO使用第三方庫(kù)實(shí)在太簡(jiǎn)單了,不需要下載安裝,直接在配置里加上GitHub鏈接即可,參考我的配置文件。

還有一點(diǎn),每一個(gè)紅外遙控都不一樣。家里的電視機(jī)、音響、空調(diào)遙控都可以用,你只需要在使用前匹配好按鍵和對(duì)應(yīng)的碼。我在代碼里define的一堆KEY只適用于我的遙控器。你可以用這個(gè)代碼來(lái)獲得鍵碼。注意:紅外遙控有幾種模式,我的遙控用的是最常見的NEC模式,如果你匹配出來(lái)一堆亂碼,可以考慮庫(kù)里的其他幾個(gè)模式。

對(duì)了,如果你用紅外遙控,你還需要在車上裝一個(gè)IR Receiver。我裝在Arduino上,用8號(hào)端口。

如果你用了方案3.1,你也可以直接將IR Receiver裝在樹莓派的GPIO上。

五、其他

這些已經(jīng)夠你開車上路了。我在車上裝了舵機(jī)(Servo),控制攝像頭的上下轉(zhuǎn)動(dòng)。操作很直觀,看代碼就能理解。我沒(méi)有裝超聲探頭,這個(gè)可以幫助你檢測(cè)障礙,在撞墻前強(qiáng)行停止。

如果你想遠(yuǎn)程看攝像頭的實(shí)時(shí)畫面,VNC不能勝任??梢钥紤]這個(gè)方案。但這樣的話TensorFlow就不能再用攝像頭了。應(yīng)該有一個(gè)共用的方案,我沒(méi)有探究。

差不多就這些了,我的代碼沒(méi)有太多注釋,等有空往上加。如果你有疑問(wèn),可以留言問(wèn)我。

福利:這里有一個(gè)延時(shí)攝影的簡(jiǎn)單程序,我在crontab里設(shè)置為每隔一分鐘拍一張照,然后每天半夜將當(dāng)天拍的照轉(zhuǎn)成錄像。下周打算帶到公司里,找個(gè)風(fēng)景好的位置,放幾天,拍紐約的24小時(shí)風(fēng)景。

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

分享:
相關(guān)文章

編輯

聚焦數(shù)據(jù)科學(xué),連接 AI 開發(fā)者。更多精彩內(nèi)容,請(qǐng)?jiān)L問(wèn):yanxishe.com
當(dāng)月熱門文章
最新文章
請(qǐng)?zhí)顚懮暾?qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說(shuō)