嵌入式开发 MCU
From: http://www.infoq.com/cn/articles/intelligent-embedded-os-Internet-of-things-and-robots
嵌入式開發是一個低調的領域。相比Web開發和企業級開發,嵌入式開發這一領域似乎很少在互聯網上發出聲音。隨著智能設備的興起,智能手環、手表、眼鏡、燈泡等產品成為互聯網企業的下一個目標,而物聯網這一概念再次復蘇,嵌入式開發開始引起很多互聯網工程師的關注。
那么,現在的嵌入式開發是怎樣的?相比十年前、二十年前有什么發展?“物聯網”這一大概念下,應用開發者應從何切入?本次訪談,我們邀請到一位不那么低調的嵌入式開發者,來跟我們分享他對這些問題的看法。
嘉賓簡介
羅未(Noel),豌豆機器小組(WRTnode machine team)發起人,致力于整合機械設計、嵌入式Linux開發、計算機視覺、機器學習方向,以開源的理念制造智能交互機器,希望為開源社區和大眾市場帶來 各種伴隨人類卻又獨立于人類的機器。個人出身于行業軟件領域,3年前轉入硬件方向,經歷過智能家居和路由器行業,現希望做一些讓未來更近的事情。
相關廠商內容
微信Android客戶端架構演進及其對開發流程的影響
海量游戲運維的云化演進
開源運維軟件在小米的應用
相關贊助商
全球架構師峰會,7月18-19日,深圳萬科會議中心舉辦,精彩呈現!
羅未是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)的思路,在終端用可以聯網的單片機做最簡單的事情,比如開關一個燈泡;終端直接跟家庭網絡的網關(路由器)連接,或直接跟公網的云端連接,由云端做更復雜的計算和處理。
這種思路可以解決一部分問題,但是我覺得還不夠。終端需要做更多的事情。
我認為終端需要是智能的,它們需要達到“機器人”的層面?,F在我們說的機器人跟以前大家理解的那種人型機器人不同,現在所說的機器人是一種復雜控制系統,是軟件,可以跑在各種各樣不同姿態的設備上。機器人需要完成三項工作:
感知:從傳感器采集數據
交互:網絡傳輸(如HTTP、TCP/IP)和物理控制
智能:如圖像識別、語音語義的理解、智能規劃,需要抽象成智能的算法
現在的機器還處于太過依附于人類的狀態,需要人告訴他要做什么。我覺得未來的機器應該自己知道要做什么事情。現在的人工智能、知識圖譜的建立就是奔 著這個方向去的,比如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、 移動互聯網、 金融、 大數據、 智能硬件、 游戲、 云計算、自動化運維、電商等專題。目前正在火熱報名中,感興趣的讀者可以訪問網站主頁了解更多信息。
總結
- 上一篇: 元气骑士牧师技能
- 下一篇: windows下"8080&q