From: http://www.infoq.com/cn/articles/intelligent-embedded-os-Internet-of-things-and-robotsnode
嵌入式開發是一個低調的領域。相比Web開發和企業級開發,嵌入式開發這一領域彷佛不多在互聯網上發出聲音。隨着智能設備的興起,智能手環、手錶、眼鏡、燈泡等產品成爲互聯網企業的下一個目標,而物聯網這一律念再次復甦,嵌入式開發開始引發不少互聯網工程師的關注。程序員
那麼,如今的嵌入式開發是怎樣的?相比十年前、二十年前有什麼發展?「物聯網」這一大概念下,應用開發者應從何切入?本次訪談,咱們邀請到一位不那麼低調的嵌入式開發者,來跟咱們分享他對這些問題的見解。算法
羅未(Noel),豌豆機器小組(WRTnode machine team)發起人,致力於整合機械設計、嵌入式Linux開發、計算機視覺、機器學習方向,以開源的理念製造智能交互機器,但願爲開源社區和大衆市場帶來 各類伴隨人類卻又獨立於人類的機器。我的出身於行業軟件領域,3年前轉入硬件方向,經歷過智能家居和路由器行業,現但願作一些讓將來更近的事情。微信
羅未是2014年全球架構師峯會(ArchSummit)的聯席主席之一。有關他的更多介紹可參考技術人攻略對他的訪談:開放製造的機器之心。機器學習
如下內容根據InfoQ中文站編輯跟羅未的溝通整理而成。分佈式
目前嵌入式設備主要分爲兩大類:MCU設備和帶MMU的CPU設備。工具
MCU(Micro Computing Unit),也就是咱們常說的單片機,其特色是Micro:主頻大概在幾十MHz,內存在幾KB,Flash非易失存儲也是幾十KB,資源小,價格便宜。 單片機這個領域從80年代、90年代開始就一直有人玩,像是玩具、鬧鐘、計算器、電子錶、工業控制等不少領域都有用到,應用普遍。單片機程序的特色是邏輯 簡單、實時性強沒有等待,不像Linux那樣會存在資源被其餘程序佔用的狀況。
早期單片機程序通常都是裸寫C代碼的方式,用一個大循環把全部事情搞定,全部的底層功能——如資源分配、進程調度、DNS查詢、域名轉換等,都要手寫實現。前幾年開始有一些基於MCU的操做系統,好比μC/OS、RT-Thread等,單片機有了操做系統就至關於資源分配、進程調度等工做不用手寫了,能夠交給系統去管理,程序員不用去管任務間協調的問題。這能夠看做是第二代單片機開發環境。
近幾年有一些新的單片機操做系統,好比Contiki,這套系統的特色是把互聯網特徵做爲基礎的構建。這套系統很牛,用10KB之內的內核就提供了對HTTP、TCP/IP等協議的支持,讓單片機上來就能夠聯網,讓單片機開發者繞過了每次都要裸寫這些基本功能的痛苦。
如今的單片機有些很神奇的應用,好比圖像識別、語音識別,能夠作到在視頻上識別色塊的程度。可是,單片機若是又要作圖像識別又要上網,就會很是吃力,畢竟資源十分有限,須要有很高的開發能力把它們協調好,這種狀況下就不能用操做系統了。
以上是單片機的狀況。另一種是更大一些的,就是自帶MMU(Memory Management Unit,內存管理單元)的設備。這種設備的主頻通常在幾百MHz以上,內存在幾十MB以上,早些年的智能手機就差很少是這個配置,跟十幾年前的PC機配 置差很少,因此安裝運行Linux系統是沒有問題的。這類設備其實也作了十多年了,如今用的比較多的架構有兩個:ARM和MIPS,都是商業的,如今新的 硬件基本上都是這兩種架構。
有不少發行版都專門爲ARM作過安裝包,好比流行的Ubuntu和Debian。不管是ARM仍是MIPS,由於有了系統,開發起來要比在單片機上 舒服多了,但也仍然有一個很麻煩的地方,那就是要作交叉編譯。開發者通常都是在本身電腦上——大部分是x86架構——完成開發的,所以要用x86上的 ARM編譯器交叉編譯出ARM的二進制文件,用MIPS編譯器交叉編譯出MIPS的二進制文件,才能在設備上運行,這爲調試帶來了不小的麻煩。爲何咱們 這個圈子門檻比較高,就是由於通常都是掌握了交叉編譯的開發者纔會進來玩。不過好在有一個叫作GDB(GNU Debugger)的工具能夠作遠程調試,減小一些麻煩。
如今在有一種M2M(Machine to Machine)的思路,在終端用能夠聯網的單片機作最簡單的事情,好比開關一個燈泡;終端直接跟家庭網絡的網關(路由器)鏈接,或直接跟公網的雲端鏈接,由雲端作更復雜的計算和處理。
這種思路能夠解決一部分問題,可是我以爲還不夠。終端須要作更多的事情。
我認爲終端須要是智能的,它們須要達到「機器人」的層面。如今咱們說的機器人跟之前你們理解的那種人型機器人不一樣,如今所說的機器人是一種複雜控制系統,是軟件,能夠跑在各類各樣不一樣姿態的設備上。機器人須要完成三項工做:
如今的機器還處於太過依附於人類的狀態,須要人告訴他要作什麼。我以爲將來的機器應該本身知道要作什麼事情。如今的人工智能、知識圖譜的創建就是奔 着這個方向去的,好比Google工程師訓練機器,讓機器在Youtube的視頻裏認識貓,這個涉及到一個很大的知識庫和訓練過程,須要雲端的協助。但最 終訓練出來以後,其實貓的圖像識別特徵數據是很小的,能夠放在終端的機器人裏,他們本身就會認識貓了。這就好像嬰兒的學習過程同樣。
可是跟嬰兒不一樣的是,機器天生是執行器。因此結合認知能力,讓機器認識貓了以後,加上執行,是否是可讓機器自動的去抓貓或者逗貓玩?機器認識電梯 以後,是否是可以本身去按電梯?機器認識無線充電站後,是否是可以本身跑到無線充電站上面蹲着充電?隨着知識圖譜的建模完善,事物和事物之間的聯繫可以被 機器理解,機器人會變得愈來愈強大,愈來愈重要。
其實如今語音語義的知識圖譜建設已經相對完善了,機器已經可以理解一些上下文之間的關係,好比你說到吃蘋果,他就知道你說的是什麼意思。咱們如今在語音語義+網絡這塊直接使用了訊飛的服務,咱們把工具鏈給他,他們幫咱們生成了一個二進制包給咱們,就很方便了。
上述這些工做當中,有些單片機能夠完成的很好,有些不能。單片機能夠採集一些簡單的數據如位置、高度、重力加速度、四軸姿態、溫度、溼度等,進來都 是數字,只須要作AD轉換。比較複雜的數據如聲音、圖像,單片機處理起來就比較困難,通常咱們經過Linux的USB驅動來跑,須要MMU的芯片。可是單 片機有一個特徵是Linux沒法知足的,就是實時性。不少物理控制對實時性的要求很高,好比四軸飛機的控制,嚴格要求50Hz的控制頻率,即一秒進行50 次計算來決定下一幀的動做,若是稍微有點資源搶佔形成延遲,飛機就掉下來了。
爲了同時達成實時計算+複雜性這兩個目的,咱們只好把兩個芯片加在一塊兒。可是兩個芯片在一塊兒,就成了一個分佈式系統,有芯片級的通訊問題,同時開發 者還須要寫兩套代碼,又要寫單片機的交叉編譯,又要作Linux開發,各類調試和測試的困難。Arduino如今已經有一套挺完善的思路:首先它的傳感 器、控制器的庫都很全,而後它作了一個ArduinoYUN的板子,就是一個OpenWRT(一個超級精簡的Linux發行版)+單片機的雙芯片板子,而後它有一個萬用固件——一個支持firmata協議的 庫,算是一個翻譯,只要符合這個協議就能夠從Linux控制Arduino,算是一種思路。可是我以爲這個思路有兩個問題:第一,ArduinoYUN的 思路是以MCU開發爲主,把OpenWRT當作單片機的透傳模塊,爲單片機提供網絡服務。放着強大的芯片在一邊,用小小的單片機跑主程序,感受未免太浪 費。第二,firmata協議雖然簡化了控制,可是又影響了實時性,在實時性要求較高的時候(好比四軸飛機),這種思路又沒法知足需求了。
如今一些芯片公司已經開始意識到這個問題,開始考慮如何把二者封裝成一個芯片,來知足實時性+複雜性的結合。我認爲封裝後應該要以Linux爲主要的開發平臺和軟件運行平臺,以MCU做爲輔助以知足實時性需求。
因此,實時性+複雜性的結合是第一個挑戰。第二個挑戰是複雜運算的加速,好比H.264/H.265的視頻壓縮、圖像識別的硬件加速,要不要放在機 器人的芯片裏?我以爲是須要的,可是不須要手機那麼強的GPU,有一個視頻壓縮的芯片放在裏面就能夠。終端若是能作視頻壓縮,多半也能作圖像識別,那麼終 端機器人能夠作的事情就更多。
第三個挑戰是針對Linux內核自己的,就是在這種級別的計算平臺上如何進行更合理的裁剪、作更合理的算法策略、執行策略。OpenWRT的開發版 如今咱們作到64MB的運行時內存佔用,而通常的路由器芯片都是16MB、32MB。其實內存的空間佔用倒不是大問題,由於如今內存很便宜,就算用到 128MB、256MB也沒什麼,可是關鍵在於時間片的佔用。所謂省資源其實就是兩個意思:少佔地兒+少佔時間,這樣才能低延遲。因此Linux內核如何 解決這個問題,也是一個比較大的挑戰。
這三個點多是將來幾年這個產業不少人的努力方向。
相比十年前裸寫C代碼的場景,如今咱們有圖形化的界面,有RESTful API,嵌入式開發的難度能夠說已經大大下降了。雖然有上面提到的基礎設施與開發工具的挑戰,但我認爲用不了幾年時間也都能解決。網絡鏈接如今已經基本不 是問題,3G、4G、Wifi已經足以支撐大部分智能設備的應用場景。
可是,僅僅有這些,到「智能的物聯網」有很大的距離。機器須要學習更多、創建更多的知識圖譜,才能變得更增強大。如今雲端尚未太多現成可用的知識 圖譜,但咱們仍然能夠先從簡單的事情作起,好比讓機器人掃地,讓機器人把空瓶子扔進垃圾桶,一點一點的改進它們。也但願有更多的開發者可以加入這一進程, 讓咱們的世界變得更加完整。
ArchSummit全球架構師峯會即將於7月18-19日在深圳舉行,這次會議重點解析九個當前最受關注的領域,包括:SNS、 移動互聯網、 金融、 大數據、 智能硬件、 遊戲、 雲計算、自動化運維、電商等專題。目前正在火熱報名中,感興趣的讀者能夠訪問網站主頁瞭解更多信息。