Google 工程師手把手教學!用Arduino 和Tensorflow 自組圖像 ...

文章推薦指數: 80 %
投票人數:10人

從買第一個Arduino 套裝開始,我接觸機器人有好幾年了,但直到最近才開始做完整的課題。

期間有兩項技能為我打開了新世界的大門:Python 和Linux。

他們背後 ... Share 【我們為什麼挑選這篇文章】現在網路上的開源軟體、平台、資源、工具這麼豐富,只要事先掌握一兩樣工具,並找到合適的資源,任何人都可以在家開發新產品。

這篇文由Google軟體工程師分享打造一台具圖像識別功能的小車,需要哪些工具和資源?不僅詳解組裝步驟,連程式碼都幫大家寫好了。

(責任編輯:曾宜婷) 作者/趙智沉,Google軟體工程師  本名發表於2017/3/28 從買第一個Arduino套裝開始,我接觸機器人有好幾年了,但直到最近才開始做完整的課題。

期間有兩項技能為我打開了新世界的大門:Python和Linux。

他們背後,是強大的開源社區。

掌握了這兩樣工具的工具(元工具),你感覺網上遍地是趁手的兵器。

上週在公司內部程式設計培訓時,有一句話深得我心:我們是軟體工程師,不是程式師。

我們的工作不是寫程式,而是合理使用工具解決問題。

在Google,如果你覺得自己不得不從零開始寫某項功能,只是你還沒有找到相應的工具罷了。

在開源社區更是如此。

這是一個遙控小車,通過紅外遙控或無線鍵盤可以控制小車的行動和攝像頭的角度。

TensorFlow即時監測攝像頭拍攝到的畫面,語音讀出它識別出的物體。

所有代碼都放在我的GitHub上。

這個想法不是我的原創,來自LukasBiewald去年九月寫的這篇網誌。

核心部分,TensorFlow識別攝像頭圖像並語音輸出,是我司人工智慧工程師PeteWarden的開源工作。

和原網誌不同的是,製作過程中我加入了Arduino作為機械總控,也瞭解了Arduino和樹莓派對話的方法(串口通信)。

期間用到了許多有用的技能和工具,在這裡整理一下,歡迎同好們留言交流! 整個課題在命令列環境完成,沒有圖形介面。

如果你不懂Linux系統,可能有些吃力。

但是,你都開始玩機器人了,怎麼能不學Linux呢?我是通過《鳥哥的Linux私房菜》自學Linux的,後來又嘗試從原始程式碼搭建Linux,終於克服在Windows系統環境長大產生的對命令列的抗拒心理。

相信我,克服這個障礙,你將打開新世界的大門。

何況,用命令列工作才顯得更酷更極客,不是嗎?除了Linux,你還要懂C++和Python來完成這個課題。

另外,這篇文章主要介紹電子部分,不講機械和美工。

如你看到的,這個小車醜破了我的審美底線,我沒花心思在外觀上。

我希望以後做一些兼具美學和功能的電子課題,或許會和設計師朋友們合作! 一、樹莓派 首先,你需要一個最新款的RaspberryPi,安裝好定制的Linux系統,連上無線網。

你還需要一個官配攝像頭,並在樹莓派中設置為可用。

你可以將樹莓派通過HDMI連接到顯示器,但更方便的做法是ssh遠端登入,這樣你就不用在調試過程中反復地把樹莓派從小車上拔線、取下、連螢幕、然後安裝回小車了,你可以即時遠端修改小車的內核。

甚至,我的Arduino程式也是通過樹莓派編寫、上傳、通信的,於是也免去了電腦連接Arduino的步驟,讓一切更流暢無縫。

樹莓派的Linux系統支援圖形桌面,你可以使用RealVNC(用於Windows)或TightVNC(用於Mac)遠端登入圖形桌面。

(這個課題裡不需要) 二、TensorFlow 這是課題的核心部分,反而操作起來最簡單,因為一切都在這裡寫清楚了,按部就班就行。

運行代碼在這裡。

注意:這裡用了訓練好的模型,即TensorFlow中預先給定了訓練好的參數集,訓練圖片庫是ImageNet。

也就是說,小車識別出的物體只能是圖片庫裡包含的labels,也沒有「學習」的過程。

三、小車 小車套件(robotchassis)很多,選你喜歡的一款。

標準的套件包括一個基座,兩組馬達+輪子,一個萬向輪,一個電池盒。

這個課題不需要四驅,而且之後要用到的馬達控制器可能只支持兩個馬達。

我用的是張堯姐送給我的第一個DIY套件:一個戳了很多洞的木板和3D列印出來的輪子和連接部件。

這個恐怕是蘿蔔太辣最早的套件,來自矽谷的創客空間。

現在,蘿蔔太辣正式出品的「起源」套件已很完善,線上也有成熟的教學資源。

這個課題裡用到的舵機和金屬連接部件都來自堯姐送給我的第二個套件——「起源」套件。

但從感情上來講,那套粗糙的木板套件讓我更親近,符合「用最簡單的材料實現原型」的理念。

電源:樹莓派需要5V、2A電源,放在小車上的話需要一個電流足夠大的充電寶。

連接樹莓派和Arduino的連接線同時也為Arduino供電。

但是,馬達我用了外部電源(電池盒)。

你會發現即使沒有外部電源,充電寶依然可以帶動馬達(儘管很慢)。

但是,好的習慣是機械部分獨立供電;邏輯電路部分由充電寶提供。

下一步,操控小車。

這裡有兩個方案,第一個不需要Arduino。

我使用的是第二個。

3.1樹莓派作為機械總控 我認為單片機的精髓,不是尺寸小,而是豐富的GPIO(GeneralPurposeInput-Output),它們是程式與外部世界對話的視窗。

你看到的各種電子部件、探頭、焊接、麵包板,都是在和GPIO打交道。

你需要瞭解基本的電路知識,也需要知道它們在單片機上的排布。

樹莓派有一個非常好用的GPIOPython庫:gpiozero,使用方法一目了然。

通常用四個埠控制馬達,分別連接兩個馬達的正負級,通過每個馬達的正向/逆向旋轉來實現小車的前進/後退/轉向。

實現雙向電流的標準電路模型是H橋接。

你可以選購一款最基本的H-bridge模組。

因為我手頭沒有H橋接,所以這個方案我沒有實現。

3.2Arduino作為機械總控 我沒有H橋接,但有一個用於Arduino的Motorstackingshield,即Arduino上的H橋接。

於是我乾脆用Arduino負責機械(馬達+舵機),相當於身體;樹莓派只負責圖像識別,相當於大腦。

Arduino不是Linux系統,不能直接ssh進去寫程式,需要在外寫好後編譯上傳。

我用資料線連接了樹莓派和Arduino,在樹莓派上寫好程式後上傳。

我發現一個非常好用的命令列IDE:PlatformIO(也有很棒的圖形介面編輯器)。

Linux上的安裝過程基於Python2.7。

你需要一些初始化,如果像我一樣是ArduinoUno主機板,輸入以下命令即可: pioinit-buno Arduino的C++原始程式碼在這裡。

進入這個資料夾後,輸入以下命令即可上傳: piorun–targetupload 後來我發現PlatformIO對於Arduino主機板好像不支持C++11,如果你有這個需要,可以考慮inotool。

四、無線遙控 同樣有兩個方案:無線鍵盤,紅外遙控。

兩個方案我都實現了。

4.1無線鍵盤 如果你在上一步用了3.1,無線鍵盤操控模組就可以直接嵌入到機械操控代碼中(我沒有實現)。

如果你在上一步用了3.2,那麼需要在樹莓派上將按鍵操作轉為機械控制信號(文本形式),通過串口通信(SerialPort)操控Arduino。

python代碼在這裡,用到了我自己寫的庫,用來檢測鍵盤按鍵。

這個庫將單次按鍵匹配到前進/後退/轉/停止等行為;但我希望實現的是長按鍵前進/後退/轉,不按鍵時停止。

但我始終沒有找到現成的庫(Update:據說在PyGame裡有)。

後來我試著通過背景執行緒(threading)和系統延時的方法寫了一個庫,但效果不太理想,系統延時和程式執行時間帶來的誤差總是匹配不好,就放棄了。

現在代碼裡用的是單次按鍵行動/停止的方案。

如果讀者有好的庫,請推薦! 有一點要注意,使用串口通信前需要disablelogin(既然你已經ssh遠端登入了),這篇解釋比較清楚。

4.2紅外遙控 紅外的長按返回的是一個單獨的值(REPEAT),這點就可以讓我很容易實現「長按-車動,不按-車停」。

此外,紅外遙控的代碼直接寫在Arduino的C++代碼裡,不需要通過樹莓派和串口通信,更符合Arduino作為機械總控的設計原則。

PlatformIO不自帶紅外的庫,我用的是這個。

PlatformIO使用協力廠商庫實在太簡單了,不需要下載安裝,直接在配置里加上GitHub連結即可,參考我的設定檔。

還有一點,每一個紅外遙控都不一樣。

家裡的電視機、音響、空調遙控都可以用,你只需要在使用前匹配好按鍵和對應的碼。

我在代碼裡define的一堆KEY只適用於我的遙控器。

你可以用這個代碼來獲得鍵碼。

注意:紅外遙控有幾種模式,我的遙控用的是最常見的NEC模式,如果你匹配出來一堆亂碼,可以考慮庫裡的其他幾個模式。

對了,如果你用紅外遙控,你還需要在車上裝一個IRReceiver。

我裝在Arduino上,用8號埠。

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

五、其他 這些已經夠你開車上路了。

我在車上裝了舵機(Servo),控制攝像頭的上下轉動。

操作很直觀,看代碼就能理解。

我沒有裝超聲探頭,這個可以幫助你檢測障礙,在撞牆前強行停止。

如果你想遠端看攝像頭的即時畫面,VNC不能勝任。

可以考慮這個方案。

但這樣的話TensorFlow就不能再用攝像頭了。

應該有一個共用的方案,我沒有探究。

差不多就這些了,我的代碼沒有太多注釋,等有空往上加。

如果你有疑問,可以留言問我。

福利:這裡有一個延時攝影的簡單程式,我在crontab裡設置為每隔一分鐘拍一張照,然後每天半夜將當天拍的照轉成錄影。

下週打算帶到公司裡,找個風景好的位置,放幾天,拍紐約的24小時風景。

延伸閱讀 TensorFlow成GitHub上最夯機器學習開源項目,Google要當機器學習開源界的老大哥 Linux之父:比起預測未來,我更願意作個踏實處理Linux每個小問題的工程師 Maker新朋友!有WiFi功能的Arduino,插上電源就能開發 (本文經合作夥伴雷鋒網授權轉載,並同意TechOrange編寫導讀與修訂標題,原文標題為〈Google工程師:教你用樹莓派+Arduino+TensorFlow搭建圖像識別小車〉。

首圖來源:Pixabay,CCLicensed) Share 馬上訂閱CONNECT▼ NowReading Google工程師手把手教學!用Arduino和Tensorflow自組圖像識別小汽車 3minread 最新文章 雲端運算人工智慧 雲端服務 數位轉型應用 資訊安全 資訊科技 新經濟新零售 數位金融 虛擬貨幣 數位行銷 通訊科技5G/6G 太空 低軌道衛星 電信通訊 新科技 供應鏈智慧製造 半導體 IoT 未來生活電動車 能源創新 智慧城市 觀看影音新工作進行式 以人為本,醫療新服務 線上教育,素養學習篇 線上教育,數位落差篇 0% ✕ Close 徵才 最新文章 雲端運算 人工智慧 雲端服務 數位轉型應用 資訊安全 資訊科技 新經濟 新零售 數位金融 虛擬貨幣 數位行銷 通訊科技 5G/6G 太空 低軌道衛星 電信通訊 新科技 供應鏈 智慧製造 半導體 IoT 未來生活 電動車 能源創新 智慧城市 公共服務 數位醫療 線上學習 數位政府與未來治理 網路民主與公民 投資創新 新投資 新人才 創業故事 觀看影音 科技橘子 品牌簡介 ABOUTUS 聯絡我們 ✕ 徵才 最新文章 雲端運算 人工智慧 雲端服務 數位轉型應用 資訊安全 資訊科技 新經濟 新零售 數位金融 虛擬貨幣 數位行銷 通訊科技 5G/6G 太空 低軌道衛星 電信通訊 新科技 供應鏈 智慧製造 半導體 IoT 未來生活 電動車 能源創新 智慧城市 公共服務 數位醫療 線上學習 數位政府與未來治理 網路民主與公民 投資創新 新投資 新人才 創業故事 觀看影音 新工作進行式 以人為本,醫療新服務 線上教育,素養學習篇 線上教育,數位落差篇 品牌簡介 ABOUTUS 聯絡我們 LatestPosts 全台首推1kW無線充電系統!台達推充電方案,無需改裝、電能傳輸效率高達93% 2022最迫切資安4大威脅,身處全球供應鏈核心的台灣如何防守? 全球前500大企業開始流行在公司內部「碳定價」!它如何成為企業減碳的有效工具? 如何在最壞狀況當個稱職領導者,看台灣三大頂尖企業家如何挺過難關 創業6年累積銷售額逾10億!新創MR.LIVING再獲國發基金青睞,宣布完成Pre-A輪投資 為提供您更好的網站服務,本網站會使用Cookies及其他相關技術優化用戶體驗,繼續瀏覽本網站即表示您同意上述聲明了解隱私權政策同意並關閉視窗Manageconsent Close PrivacyOverview Thiswebsiteusescookiestoimproveyourexperiencewhileyounavigatethroughthewebsite.Outofthese,thecookiesthatarecategorizedasnecessaryarestoredonyourbrowserastheyareessentialfortheworkingofbasicfunctionalitiesofthewebsite.Wealsousethird-partycookiesthathelpusanalyzeandunderstandhowyouusethiswebsite.Thesecookieswillbestoredinyourbrowseronlywithyourconsent.Youalsohavetheoptiontoopt-outofthesecookies.Butoptingoutofsomeofthesecookiesmayaffectyourbrowsingexperience. Necessary Necessary AlwaysEnabled Necessarycookiesareabsolutelyessentialforthewebsitetofunctionproperly.Thesecookiesensurebasicfunctionalitiesandsecurityfeaturesofthewebsite,anonymously. CookieDurationDescriptioncookielawinfo-checkbox-analytics11monthsThiscookieissetbyGDPRCookieConsentplugin.Thecookieisusedtostoretheuserconsentforthecookiesinthecategory"Analytics".cookielawinfo-checkbox-functional11monthsThecookieissetbyGDPRcookieconsenttorecordtheuserconsentforthecookiesinthecategory"Functional".cookielawinfo-checkbox-necessary11monthsThiscookieissetbyGDPRCookieConsentplugin.Thecookiesisusedtostoretheuserconsentforthecookiesinthecategory"Necessary".cookielawinfo-checkbox-others11monthsThiscookieissetbyGDPRCookieConsentplugin.Thecookieisusedtostoretheuserconsentforthecookiesinthecategory"Other.cookielawinfo-checkbox-performance11monthsThiscookieissetbyGDPRCookieConsentplugin.Thecookieisusedtostoretheuserconsentforthecookiesinthecategory"Performance".viewed_cookie_policy11monthsThecookieissetbytheGDPRCookieConsentpluginandisusedtostorewhetherornotuserhasconsentedtotheuseofcookies.Itdoesnotstoreanypersonaldata. Functional Functional Functionalcookieshelptoperformcertainfunctionalitieslikesharingthecontentofthewebsiteonsocialmediaplatforms,collectfeedbacks,andotherthird-partyfeatures. Performance Performance Performancecookiesareusedtounderstandandanalyzethekeyperformanceindexesofthewebsitewhichhelpsindeliveringabetteruserexperienceforthevisitors. Analytics Analytics Analyticalcookiesareusedtounderstandhowvisitorsinteractwiththewebsite.Thesecookieshelpprovideinformationonmetricsthenumberofvisitors,bouncerate,trafficsource,etc. Advertisement Advertisement Advertisementcookiesareusedtoprovidevisitorswithrelevantadsandmarketingcampaigns.Thesecookiestrackvisitorsacrosswebsitesandcollectinformationtoprovidecustomizedads. Others Others Otheruncategorizedcookiesarethosethatarebeinganalyzedandhavenotbeenclassifiedintoacategoryasyet. SAVE&ACCEPT



請為這篇文章評分?