摘要:在我已經制作完成一輛可以運行的遙控車時,公司發布了一個自駕車項目,來展示自動駕駛汽車的工作原理。需要注意的是,這里用的都是語言而非,其主要原因有兩個一方面,近來似乎已成為運用機器學習技術時實際使用的語言。
最近,Mapbox 的 Android 工程師 Antonio 使用計算機視覺和機器學習技術,為他的女兒 Violeta 重新制作了一臺遙控車。接下來我們看看 Antonio 是如何實現是:
今年上半年的一天,我和女兒 Violeta 在玩著她爺爺奶奶送給她的遙控車。為了學習如何操控它, Violeta “有條不紊”地開著車撞向每一個家具,結果就在某一個“砰”聲后,遙控車罷工了。我們打開了遙控車內部,瞧瞧是哪兒出了問題——幸好只是一根電線松了,幾分鐘后,我就搞定它了。
然而,這個小插曲卻引起了我的思考。這些用集成電路板做的小玩具生產成本低但是修起來卻未必那么容易。
如果下一次把車里的零件撞壞了,我們又修不了,那該怎么辦?
在那段時間,安卓剛剛發布了 Android Things, 是安卓開發的“小周邊”,在樹莓派(Raspberry Pi) 和類似的 IoT 設備上運行。我對安卓非常熟悉,所以我做了個決定,相信你們也能猜到:我決定重新制造一臺“不怕撞”的遙控車。
硬件
硬件方面,我是用現成的組件組裝的,這樣如果有部件損壞,更換起來比較方便。以下是我的簡短的購物單(總價略高于100美元):
一個樹莓派(Raspberry Pi)(大約35美元);
一個馬達控制器(22美元)—— 馬達不能直接連接在樹莓派上;
一個便攜式充電器(用來為樹莓派和馬達充電)(30美元);
最后,是一個支撐框架。Junior Runt Rover 是一個不錯的選擇(28美元),當然你也可以從別的玩具上拆一個下來。
通過一個安卓系統下的配套應用程序可以控制遙控車,該控制通過一個本地服務器實現。然而,我不得不告訴你,用一個復古的任天堂控制器一定會有趣的多(當然你的預算得調高35美元)。
將這些組件直接拼裝在一起即可,拼裝過程我另有記錄。此外,還有一些注意的地方:
關于焊接:我還未找到一臺與樹莓派兼容且已焊接的馬達控制器。你可能需要從床底翻出你的焊臺或者問朋友借一臺。焊接本身不難,但是你可能需要提前練習一下,畢竟零件都太小了。
超越樹莓派:Android Things 是 IoT 設備上一個抽象的圖層,雖然樹莓派廣受興趣愛好者的歡迎,但其它設備也同樣支持,而且不需要改一行代碼。到目前為止,我的最愛還是 NXP Pico. 它的優勢在于高速的內存(這樣你就不需要再額外買一張 SD 卡),并且它帶有一個模組化系統。如果你想要將你的硬件項目實體化,那么哪些實體產品設備會用到這種模塊(是不是似乎看到了商機……)
一開始,我以為我女兒會害怕我自制的遙控車,沒想到她毫不畏懼,還很喜歡帶著它“跌跌撞撞”闖蕩世界。看,領居家的貓也很喜歡它……
軟件
設計軟件時,發生了一些我計劃外的事。在我已經制作完成一輛可以運行的遙控車時,Udacity 公司發布了一個自駕車“nanodegree”項目,來展示自動駕駛汽車的工作原理。
他們運用了計算機視覺(Computer Vision)和深度學習(Deep Learning)技術來使自動駕駛汽車識別道路和人行道。這些技術都從實用角度出發,讓你在模擬器甚至在車子里都可以進行編程。
有很長一段時間,自動駕駛汽車技術于我而言就是一個未知的匣子,我渴望探索,因此我毫不猶豫報名了相關課程并申請加入了遙控車項目。
在課程中你第一個學到的是自動駕駛汽車識別物體的兩種方式(通常兩種方法結合使用):計算機視覺技術(Computer Vision)和機器學習技術(Machine Learning)。
無論你使用哪種技術,你都需要一個攝像頭來探測車前的情況。這并不困難。現在你只要花30美金就能買到一個800萬像素的可直接連接樹莓派或其它設備的攝像頭。
計算機視覺技術(Computer Vision)
計算機視覺技術是最為直觀的技術。它的主要原理是從車上的攝像頭提取關于街道的信息并進行圖像過濾和轉化(這里就需要車內攝像頭有足夠的高度來拍攝一個比較好的視角)。
為了使這樣的分析可行,并且使車子可以對分析結果有實時的應對,我使用了一種同地圖 SDK 很類似的方法:花了一番功夫在C++上(使用開源的計算機視覺技術代碼),并在Java端展示了所用的方法,藉此,安卓系統可以做出判斷是直行或轉彎。
一旦這一步完成了,我們就做得差不多了。那我們就從項目測試套件開始吧,下面這張圖展示了測試的一部分:
1、將獲取的畫面轉化成圖片,這張圖看起來就像是從攝像頭拍攝的照片。(如果你熟悉開源計算機視覺技術代碼的話,你就能知道這結合了 “getPerspectiveTransform” 和 “warpPerspective”)。這一步清除了畫面中所有的無關物體,從而使車子可以集中于眼前的道路:
2、進行色差閾分析使車子從獲取的畫面中識別出路線。根據你設計的路線顏色(比如我這里是亮黃色)可以選擇不同的色彩空間。鑒于 HSV 色彩空間更符合人類識別、感知顏色的方式,你可以將開源計算機視覺技術中默認的 BGR 色彩空間改成 HSV 色彩空間,利用 HSV 中的色相和飽和度范圍還可以更容易地過濾具體的顏色。
3、最后,我們需要繪制分布圖來找到最佳的位置定位(如下圖所示的垂直藍線):
好了,做完上面幾步,你的小車就能聽你的話看準自己的車道了!
接下來,我們要為小車安裝雷達定位器了 :-)
你想知道從小車的攝像頭里看出去是怎樣的嗎?那不妨來看看這個視頻吧(https://www.youtube.com/watch...).這是你在 Udacity 訓練中要做的一個練習。
機器學習技術(Machine Learning)
另一種讓小車自動駕駛的方法就是機器學習技術(Machine Learning)(又稱:深度學習卷積神經網絡)。深度學習技術目前已經成為自動駕駛汽車發展中十分重要的一種方法。大部分情況下,你都會用真實數據構建一個模型來區分交通信號,或是通過克隆學習真實情況下的汽車行為使自動駕駛汽車能夠做出即時的駕駛判斷。你會找上千張照片,然后將其中你想讓汽車學習的部分進行編碼(比如,每個車輪的轉速)。
這樣做的問題在于設計一個卷積神經網絡并不是容易事,而且對于我要達成的目標而言太小題大做了。
所以,我換了一種方法。我參考 NVIDIA 發布的公開的相關研究報告后(點擊可查看完整研究報告),選用了其中一種網絡架構。這種架構由九層組成,包括一個標準化層,五個卷積層,三個全連接層:
使用 Keras 這樣的工具,只需要幾行代碼就能實現。
需要注意的是,這里用的都是 Python 語言而非 Java,其主要原因有兩個:
一方面,近來 Python 似乎已成為運用機器學習技術時實際使用的語言。它有很大的程序庫和相關文檔記載,而且像在使用 TensorFlow 這類框架時也經常使用它。
另一方面,誰都不愿意在小容量的樹莓派上調試模型,實在太慢、太不方便了。所以很多人會選擇用一個更強大的筆記本電腦或是一個云端的服務器(比如許多 Mapboxers 會這么做:mapbox/morecs#54)。
社區
在我研究過程中最棒的就是能夠認識這群熱衷于自己造自動駕駛汽車(“機器車”)的狂熱愛好者。這起初只是 Chris Anderson 在加利福尼亞州奧克蘭市發起的一場同好聚會,沒想到迅速擴散到了其他地方。
你可能因為《連線》雜志或是“開始DIY無人駕駛飛機”這樣的事情知道 Chris Anderson 的名字。他說他的志向就是“用‘DIY’去攻克世界上所有著名的大型產業,并看看會怎么樣”。
下面這張圖表是最近一次機器車同好小聚上,大家對比的計算機視覺技術和機器學習技術。你可以發現,兩種技術方法表現都很好。雖然計算機視覺技術更快地取得優勢,但機器學習技術也不遜色,很快地追了上去:
寫在最后
如果你想了解更多關于自動駕駛汽車,或是他們的小兄弟機器車的信息,不妨看看下面幾條:
如果你熟悉 Java/ Android, 可以參考這個說明來搭建你自己的安卓機器車。
如果你更喜歡用 Python,那建議你可以從兒童單車項目開始。它的編程和搭建更加復雜(它需要可打印的3D模型),但也的確非常值得你這樣的投入。
如果你有任何問題,或者分享有關遙控車、計算機視覺(Computer Vision)和深度學習(Deep Learning)技術方面的內容,隨時歡迎聯系 Mapbox 公眾號。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90072.html
摘要:近年來,觀山湖區按照省委省政府大扶貧大數據大生態三大戰略行動部署和市委市政府打造公平共享創新型中心城市的目標要求,堅定不移守底線走新路,縱深推進大數據戰略行動,按照三融合六中心多板塊的思路,推進大數據產業發展及中國數谷核心區建設。市民體驗花舞林城沉浸式數字光影藝術大展。 王頊 攝位于觀山湖區的貴陽大數據創新產業(技術)發展中心。(觀山湖區大數據局供圖)一份分析報告幫你預測身體健康走勢、通過手...
閱讀 3712·2023-04-25 17:45
閱讀 3426·2021-09-04 16:40
閱讀 999·2019-08-30 13:54
閱讀 2125·2019-08-29 12:59
閱讀 1395·2019-08-26 12:11
閱讀 3272·2019-08-23 15:17
閱讀 1516·2019-08-23 12:07
閱讀 3878·2019-08-22 18:00