1
本文作者: 金紅 | 2017-03-09 17:50 | 專題:雷峰網(wǎng)公開(kāi)課 |
導(dǎo)語(yǔ):樹(shù)莓派是為學(xué)習(xí)計(jì)算機(jī)編程教育而設(shè)計(jì)的一種微型電腦,其系統(tǒng)是基于Linux的, 雖然只有信用卡大小,但視頻、音頻等功能通通皆有,可謂是“麻雀雖小,五臟俱全”。因此自問(wèn)世以來(lái),受到了眾多計(jì)算機(jī)發(fā)燒友和創(chuàng)客的追捧。
樹(shù)莓派可以用來(lái)開(kāi)發(fā)各種硬件產(chǎn)品,此次雷鋒網(wǎng)硬創(chuàng)公開(kāi)課邀請(qǐng)到國(guó)際資深創(chuàng)客,莫比嗨客樹(shù)莓派智能機(jī)器人有限公司創(chuàng)始人兼CEO劉端陽(yáng),從樹(shù)莓派的起源講起,一步步教我們?nèi)绾伍_(kāi)發(fā)出一款機(jī)器人。
嘉賓介紹:
劉端陽(yáng),莫比嗨客樹(shù)莓派智能機(jī)器人有限公司創(chuàng)始人兼CEO,國(guó)際資深創(chuàng)客。
以下內(nèi)容整理自劉端陽(yáng)在雷鋒網(wǎng)硬創(chuàng)公開(kāi)課的分享。關(guān)注雷鋒網(wǎng)旗下微信公眾號(hào)「新智造」,可獲取嘉賓完整PPT。
公開(kāi)課視頻:
計(jì)算的過(guò)程中經(jīng)歷了這么幾個(gè)發(fā)展:最早的時(shí)候是應(yīng)用于自動(dòng)式,比如彈道導(dǎo)彈的計(jì)算,但是隨著計(jì)算的發(fā)展,其有了更加寬廣范圍的應(yīng)用,比如軍隊(duì)、政府、銀行等都會(huì)用到計(jì)算設(shè)備。
計(jì)算設(shè)備的發(fā)展歷史,按照公認(rèn)的說(shuō)法,分為大型機(jī)、小型機(jī)、PC階段,以及現(xiàn)在基于Arm體系結(jié)構(gòu)的手機(jī)時(shí)代。那么,反向思考的話,未來(lái)的硬件設(shè)備是什么樣的趨勢(shì)呢?
小型化
圖1 樹(shù)莓派大小
大家可以在PPT上看到,我放了一個(gè)美元的圖標(biāo)和一個(gè)小的設(shè)備,這個(gè)小的設(shè)備叫樹(shù)莓派??梢钥吹竭@個(gè)設(shè)備是非常小的,但它的性能卻非常強(qiáng),可以說(shuō)隨著電子設(shè)備二極管的高度集成,未來(lái)設(shè)備將趨向小型化。
量子化
圖2 Dwave
在電子化的基礎(chǔ)上,計(jì)算設(shè)備另一個(gè)發(fā)展形式是量子化,最典型的是Dwave公司,它最后被Google收購(gòu)了。
計(jì)算思維(Computational Thinking)這個(gè)概念由CMU的周以真教授提出,剛開(kāi)始大家都覺(jué)得云里霧里的,其實(shí)它的核心就是:我們要用計(jì)算機(jī)的基本概念比如迭代、循環(huán)、Loof做整體的問(wèn)題求解、系統(tǒng)設(shè)計(jì)和人類行為分析的一種思維活動(dòng)。從這個(gè)角度來(lái)講,計(jì)算思維是基本問(wèn)題解決之道。在生活中,比如我們經(jīng)常去超市買東西,結(jié)賬時(shí)我們會(huì)排成一列進(jìn)行結(jié)算,這與我們計(jì)算機(jī)的隊(duì)列是一樣的。
圖3 樹(shù)莓派的歷史
樹(shù)莓派的出現(xiàn)其實(shí)是一個(gè)偶然的事情,同時(shí)也是必然的事情。這個(gè)偶然是大家沒(méi)想到這個(gè)東西會(huì)這么火,就連創(chuàng)始人Eben Epton也沒(méi)想到。那它的出現(xiàn)為什么是必然的呢?
2006年Eben Epton發(fā)現(xiàn)一個(gè)問(wèn)題,劍橋大學(xué)近期入學(xué)的學(xué)生編程能力普遍較低,原因是什么呢?就是我們現(xiàn)有的“舒適的圖像化編程”毀滅了創(chuàng)造的樂(lè)趣,于是他開(kāi)始構(gòu)思:我能不能做一種設(shè)備讓學(xué)生有創(chuàng)造性的樂(lè)趣?之后Eben Epton和小伙伴一起設(shè)計(jì)了很多設(shè)備,但都不符合要求。
2007年蘋(píng)果的iPhone發(fā)布,世界迎來(lái)了互聯(lián)網(wǎng)時(shí)代。2008年樹(shù)莓派基金會(huì)設(shè)計(jì)了一款原型機(jī),使用了Atmel的ATmega644,這個(gè)事件發(fā)生后,樹(shù)莓派基金會(huì)終于找到一個(gè)“好基友”:ARM芯片?,F(xiàn)在很多移動(dòng)設(shè)備都使用ARM芯片,因?yàn)楣男?,所以它的電池是可以使用很長(zhǎng)時(shí)間的。當(dāng)然,這個(gè)東西設(shè)計(jì)出來(lái)后的產(chǎn)品推廣需要很長(zhǎng)時(shí)間。所以,到2011年問(wèn)題就出現(xiàn)了,當(dāng)時(shí)英國(guó)的產(chǎn)業(yè)鏈?zhǔn)遣煌耆模訣ben Epton找到了深圳的一家工廠,于是第一批50片Alpha電路板上線。2012年第一周,Eben Epton將電路板放在EBay上拍賣,結(jié)果10個(gè)電路板在Ebay上共籌集了16000英鎊,這讓他信心倍增,說(shuō)明這種產(chǎn)品是非常受大家歡迎的。
圖4 樹(shù)莓派1代
2012年2月29日樹(shù)莓派1代發(fā)布,那時(shí)候要使用樹(shù)莓派系統(tǒng)還需要插入一個(gè)很大的SD卡,然后基于千兆網(wǎng)絡(luò)就可以連接USB了,它主要是把GPIO接口給露出來(lái)了,因?yàn)榇蠹抑酪郧暗脑O(shè)備都是集成在USB接口上的,所以那時(shí)候都是即插即拔的,現(xiàn)在突然露出來(lái),那么就需要很大的創(chuàng)造性了。
圖5 樹(shù)莓派結(jié)構(gòu)和功能
左邊的樹(shù)莓派既可以接USB的接口,又能通過(guò)USB接鍵盤(pán),把SD插入進(jìn)去以后就可以寫(xiě)入系統(tǒng)了。大家都知道操作系統(tǒng)在計(jì)算設(shè)備上是非常關(guān)鍵的,因?yàn)樗鼧O大地降低整個(gè)應(yīng)用開(kāi)發(fā)的周期和成本,就是你在獨(dú)特的設(shè)備上開(kāi)發(fā)應(yīng)用和在已經(jīng)有了通用操作系統(tǒng)的設(shè)備上開(kāi)發(fā)應(yīng)用的時(shí)間周期和難度是不同的。
右邊是Raspberry Pi 3 Model B。
1949年前,文盲的標(biāo)志是不識(shí)字;1970年前后,文盲的標(biāo)志是數(shù)理化不好;1990年前后,文盲的標(biāo)志是英語(yǔ)不好;到了2013年,文盲的標(biāo)志則是不會(huì)編程。在這種環(huán)境下,創(chuàng)客成為一種新的時(shí)尚,因?yàn)閯?chuàng)造成為市場(chǎng)。以機(jī)器人為依托的創(chuàng)客教育,樹(shù)莓派最后成為創(chuàng)客的首選,原因如下:
(1)RPI是電腦(2)性價(jià)比超高(3)體積小
MBH創(chuàng)客蜂巢是從樹(shù)莓派機(jī)器人開(kāi)始起步的,在這里聚集了很多創(chuàng)客,而想要成為一名創(chuàng)客,需要這些技能:
(1)長(zhǎng)生劍:樹(shù)莓派-機(jī)器人大腦蛋白質(zhì)
(2)碧月刀-Processing
(3)3D建模軟件-SketchUp等
(4)多情環(huán)-電路板設(shè)計(jì)
(5)葵花寶典-Python編程設(shè)計(jì)
(6)一指禪-機(jī)器學(xué)習(xí)(智能的最直接的體現(xiàn))
樹(shù)莓派與單片機(jī)
單片機(jī)的功能比較單一,只是為了某種特定意義而設(shè)計(jì),而樹(shù)莓派是有操作系統(tǒng)的PC,功能全且性能強(qiáng)。
樹(shù)莓派與Arduino
樹(shù)莓派有操作系統(tǒng),能使用Python開(kāi)發(fā),能運(yùn)行高級(jí)算法。
Arduino實(shí)時(shí)性強(qiáng),普及比較廣泛。
在樹(shù)莓派上,我們會(huì)將所有的代碼寫(xiě)入SD卡中,就是我們通常說(shuō)樹(shù)莓派的系統(tǒng)是被燒進(jìn)去的。那么,樹(shù)莓派的系統(tǒng)都有哪些呢?
官方的系統(tǒng)是基于Debian 的Raspbian OS,有的時(shí)候推薦使用Ubuntu Mate系統(tǒng)。隨著樹(shù)莓派被廣泛地接受,微軟也開(kāi)始支持樹(shù)莓派了,目前Win10 IOT 是支持的,同時(shí)Android也支持樹(shù)莓派。而樹(shù)莓派是裝有Linux系統(tǒng)的PC,所以天然地可以使用Python編程。Python在國(guó)內(nèi)的普及率不是很高,但是在國(guó)外是被大量使用的,例如谷歌。在我的認(rèn)知中Python只有操作系統(tǒng)的驅(qū)動(dòng)程序是不能寫(xiě)的,其他所有程序都是可以寫(xiě)的,比如開(kāi)發(fā)WEB、嵌入式設(shè)備等。
什么是機(jī)器人
能自動(dòng)執(zhí)行工作的機(jī)械設(shè)備就叫機(jī)器人——首先,它是能夠自動(dòng)的執(zhí)行工作,其次是機(jī)械設(shè)備,比如挖掘機(jī),或者拖地的機(jī)器人。
一個(gè)機(jī)器人的組成部分包括機(jī)械裝置(執(zhí)行機(jī)構(gòu))、傳感裝置Sensors(傳動(dòng)+感知)、控制系統(tǒng)(大腦)。
機(jī)器人如何工作
圖6 機(jī)器人工作原理
一句話概括:用Python代碼,通過(guò)GPIO接口,去控制傳動(dòng)和感知設(shè)備,讓機(jī)械設(shè)備按照預(yù)想的動(dòng)作去執(zhí)行任務(wù)。
如何一步步地構(gòu)建一個(gè)機(jī)器人?
第一步就是組裝硬件,硬件組裝完后就是測(cè)試,會(huì)有專門(mén)的測(cè)試平臺(tái)來(lái)測(cè)試。測(cè)試完以后我們就要設(shè)計(jì)相應(yīng)的軟件。
圖7 樹(shù)莓派GPIO接口
接下來(lái)我給大家重點(diǎn)講下樹(shù)莓派上比較特殊的,也就是樹(shù)莓派GPIO接口與控制器。GPIO對(duì)于樹(shù)莓派來(lái)說(shuō)是很特別的,這也是吸引創(chuàng)客的主要原因。GPIO接口有40個(gè)pin和引腳,有的是接電壓和電流的,還有的是用于外接傳感器的。外接傳感器有時(shí)候會(huì)多于40個(gè),那這個(gè)時(shí)候該怎么辦呢?這個(gè)時(shí)候我們就需要做一些樹(shù)莓派的擴(kuò)展板了。
圖8 樹(shù)莓派拓展板和集群
左上角是我們MBH創(chuàng)客蜂巢自己生產(chǎn)的一個(gè)擴(kuò)展板,當(dāng)初我們想要做智能農(nóng)業(yè)和智能家居工程,但是發(fā)現(xiàn)40個(gè)接口根本不夠,因?yàn)槲覀円雍芏嗪芏嗟膫鞲衅魅ジ兄麄€(gè)空間里的環(huán)境,比如溫度、濕度、酸堿度等等。
這個(gè)擴(kuò)展板有一個(gè)獨(dú)立的CPU,然后上面設(shè)計(jì)了很多的引腳。大家可以在我們的論壇上或官網(wǎng)上找到代碼,這些我們都已經(jīng)開(kāi)源了。
我感覺(jué)最好玩的應(yīng)該是圖中下部位置的擴(kuò)展板了,它并沒(méi)有像樹(shù)莓派其他設(shè)備一樣把GPIO接口用引腳給引出來(lái),它只是打了幾個(gè)孔。有人說(shuō)我們是用更大的板子把所有的孔或Pi Zero設(shè)備集在一起形成集群一樣的擴(kuò)展板,但是Pi Zero設(shè)備是比較小的,如果要去擴(kuò)展的話是可以插很多Pi Zero設(shè)備的,比如你插100個(gè),總體積也不會(huì)有什么大的變化。所以,有的人就在這上面挖礦,也就是挖比特幣,還有人純粹把它當(dāng)做集群,相當(dāng)于NOS,可以在里面存入大量文件,而且還是并行的處理方式,相當(dāng)于你可以對(duì)你的文件進(jìn)行多重備份,而不用害怕它會(huì)丟失了。
大家都知道樹(shù)莓派和Python是可以天然地結(jié)合在一起的,所以天然的Python在GPIO接口上有庫(kù):
sudo apt-get install python-dev
wget http://raspberry-gpio-python.googlecode.com/files/RPI.GPIO-0.5.3a.tar.gz
tar xvzf RPI.GPIO-0.5.3a.tar.gz
sudo pytho setup.py install
關(guān)于樹(shù)莓派的控制器,這里我們主要講下步進(jìn)電機(jī)。樹(shù)莓派的GPIO接口可以控制其他裝置,只要你給它信號(hào),這個(gè)信號(hào)不一定是脈沖信號(hào),可以是連續(xù)的或跳躍的各種信號(hào)——給它規(guī)則的跳躍信號(hào)就可以控制步進(jìn)電機(jī),不規(guī)則的信號(hào)就可以控制其他傳動(dòng)裝置或感應(yīng)裝置。
圖9 常見(jiàn)傳感器
如果我們把機(jī)器人與人做類比的話,那么傳感器對(duì)應(yīng)人又是什么呢?傳感器就像人類的器官一樣,可以聽(tīng)、說(shuō)、看、動(dòng)。傳感器種類是非常多的,我們可以通過(guò)GPIO接口或是擴(kuò)展板將這些傳感器接入到樹(shù)莓派中,而且可以用Python的庫(kù)控制它們。
常用的傳感器有超聲波傳感器、紅外傳感器、溫濕度傳感器。所謂傳感器,就是能夠?qū)鞲行盘?hào)感知成普遍的電信號(hào)的設(shè)備。比如超聲波傳感器,可以把聲波信號(hào)映射為電信號(hào)。
圖10 基于樹(shù)莓派的無(wú)人機(jī)
這是我們自己設(shè)計(jì)的一款飛行機(jī)器人,現(xiàn)在也叫無(wú)人機(jī)。當(dāng)時(shí)我們?cè)诜g一本書(shū)叫《樹(shù)莓派機(jī)器人藍(lán)圖》,其中第七章就是講飛行機(jī)器人的,但是它的飛控是用Pix hawk,而Pix hawk的價(jià)格非常昂貴,用完之后還不能做他用。于是我們想是不是可以用樹(shù)莓派去做無(wú)人機(jī)的飛控呢?前面我們也講過(guò),樹(shù)莓派和代碼其實(shí)構(gòu)成了整個(gè)機(jī)器人的大腦,而無(wú)人機(jī)上的大腦就是飛控,它的螺旋槳被稱為執(zhí)行機(jī)構(gòu),電動(dòng)機(jī)就是傳輸機(jī)構(gòu)。我們用這樣裝置做出來(lái)的飛控并不比Pix hawk或是Pix 4性能差。在這個(gè)過(guò)程中,剛開(kāi)始我們的代碼是用C語(yǔ)言寫(xiě)的,寫(xiě)完之后發(fā)現(xiàn)CPU的使用率會(huì)達(dá)到100%,不過(guò)后來(lái)經(jīng)過(guò)優(yōu)化整個(gè)CPU的使用率也不過(guò)8%,這也就驗(yàn)證了樹(shù)莓派是完全可以用來(lái)做無(wú)人機(jī)的飛控的!
那么,我們就以這個(gè)無(wú)人機(jī)為例,為大家講講如何用樹(shù)莓派來(lái)做飛控。
圖11 機(jī)器人工作布線圖
我們用倒敘的方式來(lái)思考。首先,它要讓四個(gè)螺旋槳轉(zhuǎn)動(dòng),因?yàn)橹挥新菪龢D(zhuǎn)動(dòng)無(wú)人機(jī)才能起飛。而螺旋槳在轉(zhuǎn)動(dòng)過(guò)程中要執(zhí)行哪些工作呢?比如無(wú)人機(jī)在轉(zhuǎn)彎的時(shí)候怎么辦?在這個(gè)時(shí)候就需要兩個(gè)螺旋槳轉(zhuǎn)動(dòng)的速度快些,另外兩個(gè)螺旋槳轉(zhuǎn)動(dòng)速度慢些。無(wú)人機(jī)在飛行過(guò)程中兩個(gè)螺旋槳是正轉(zhuǎn),而另外兩個(gè)螺旋槳是反轉(zhuǎn)的,執(zhí)行這些命令也需要傳感。
現(xiàn)在大部分無(wú)人機(jī)都是由一個(gè)手柄,或者是手機(jī)APP來(lái)控制。這些控制設(shè)備通過(guò)websocket來(lái)傳輸命令信號(hào),信號(hào)在CPU上經(jīng)過(guò)處理后,結(jié)果通知到GPIO接口,然后GPIO接口向傳動(dòng)裝置發(fā)送命令信號(hào),傳動(dòng)裝置再向感知設(shè)備發(fā)送信號(hào)。在無(wú)人機(jī)上,電機(jī)是傳動(dòng)裝置,當(dāng)GPIO接口向它發(fā)送命令信號(hào)后,螺旋槳會(huì)隨之正轉(zhuǎn)或反轉(zhuǎn)。
另外,無(wú)人機(jī)的平衡也非常關(guān)鍵。所以,我們?cè)跓o(wú)人機(jī)上加了一個(gè)陀螺儀,陀螺儀在很多領(lǐng)域都有應(yīng)用,無(wú)人機(jī)的平衡需要它的四個(gè)葉片轉(zhuǎn)動(dòng)速度一樣,而且整個(gè)無(wú)人機(jī)不發(fā)生傾斜的情況下無(wú)人機(jī)才能保持平衡。那么,我們就需要在代碼上進(jìn)行補(bǔ)償。
圖12 機(jī)器人控制程序代碼結(jié)構(gòu)
如果你想用樹(shù)莓派做無(wú)人機(jī),用這一套代碼就夠了。如果你想加一些傳感器,比如攝像頭,那么就加一個(gè)camera.py的代碼就好了。
圖13 camera.py源代碼
圖14 樹(shù)莓派尋跡避障小車
既然是個(gè)小車,那肯定是能走的。而避障,也就是碰到一個(gè)物體要停下來(lái),避障需要傳感器,比如超聲波傳感器,或者紅外傳感器。最后還有一個(gè)“智能”,比如它第一次走是一個(gè)探索的過(guò)程,第二次走就會(huì)走的更順利,這個(gè)時(shí)候我們可以加入一些機(jī)器學(xué)習(xí)的方法,讓整個(gè)路徑得到優(yōu)化。也就是說(shuō),這個(gè)小車要能走、能避障、能學(xué)習(xí)。
原理:
1.小車—電機(jī)啟動(dòng)—前后左右
2.停止—電機(jī)不轉(zhuǎn)—設(shè)置時(shí)間周期
3.障礙識(shí)別—傳感器(超聲波,紅外識(shí)別,激光雷達(dá)等)
4.GPIO接口—L298N驅(qū)動(dòng)
5.將代碼寫(xiě)入樹(shù)莓派Sd卡中
圖15 機(jī)器人控制系統(tǒng)代碼結(jié)構(gòu)
這里的代碼多了一個(gè)aeduino,這是因?yàn)樾≤囋诒苷线^(guò)程中需要很快地剎車,而樹(shù)莓派的實(shí)時(shí)數(shù)據(jù)的處理性能沒(méi)有aeduino好。然后再加入一些機(jī)器學(xué)習(xí)的算法,這個(gè)小車就算有些智能了。
圖16 《樹(shù)莓派機(jī)器人藍(lán)圖權(quán)威寶典》
如果大家覺(jué)得我今天講得不夠詳細(xì),可以去看《樹(shù)莓派機(jī)器人藍(lán)圖權(quán)威寶典》這本書(shū)。這本書(shū)通過(guò)70個(gè)案例講述如何一步步用樹(shù)莓派做機(jī)器人。
Q:樹(shù)莓派的操作系統(tǒng)能方便移植到別的開(kāi)發(fā)板嗎?
A:因?yàn)闃?shù)莓派的OS使用了Linux kernel,所以完全可以。現(xiàn)在樹(shù)莓派嗨推出了桌面操作系統(tǒng)PIXEL OS。
Q:用樹(shù)莓派開(kāi)發(fā)和用普通的單片機(jī)開(kāi)發(fā)相比有什么優(yōu)勢(shì)?
A:樹(shù)莓派功能更加的全,能接入的傳感器更多。
Q:飛行時(shí)間切片法這個(gè)不是說(shuō)幀率做不上去么?
A:代碼優(yōu)化其實(shí)是可以的。
Q:單片機(jī)上有各種總線(串口 can口等) 一般的傳感器單片機(jī)都能夠使用???難道樹(shù)莓派有些特殊傳感器?
A:樹(shù)莓派上基本所有傳感器都可以用,因?yàn)镚PIO。
Q:樹(shù)莓派操作系統(tǒng)穩(wěn)定性怎么樣?因?yàn)楹芏囗?xiàng)目由于穩(wěn)定性原因不采用這種嵌入式,轉(zhuǎn)向plc了。
A:穩(wěn)定性經(jīng)過(guò)幾年的發(fā)展還是可以的,但是現(xiàn)在在工業(yè)上穩(wěn)定性不好,尤其是有電磁干擾的情況下樹(shù)莓派不穩(wěn)定。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。