器人開發(fā)實戰(zhàn):從樹莓派到Python編程)
1. 開箱即玩你的第一臺智能伙伴要是你心里頭對學(xué)習(xí)機(jī)器人編程這點(diǎn)事挺感興趣, 可是又覺得那些廠子里頭的機(jī)械手臂, 還有那套特別難搞的ROS系統(tǒng), 門檻實在是在天上飛, 太高了的話, 那么這架機(jī)器人恐怕那就是專門為你一個人量著身體尺寸打造出來的夢中情機(jī)。我第一次把這小家伙拿到手里的瞬間, 心里的那種感覺呀, 簡直就像是手里攥著一臺不僅能在地上跑動起來, 還能和人嘰嘰喳喳聊天的、屬于樹莓派超級魔改版的機(jī)器物件。它本質(zhì)上是一個人形機(jī)器人, 這個機(jī)器人內(nèi)置了樹莓派計算核心, 出廠的時候預(yù)裝了完整的環(huán)境和一套強(qiáng)大的控制庫, 這樣你就不用從零開始去折騰硬件驅(qū)動和系統(tǒng)配置, 把電插上就能開始寫代碼去控制它走路、說話和看東西。這個東西特別地適合學(xué)生, 或者是編程愛好者, 還有教育工作者。你并不需要是電子工程專業(yè)的出身, 只要你懂一點(diǎn)點(diǎn)基礎(chǔ)的語法, 就可以讓它運(yùn)行起來。它設(shè)計的初衷在于降低機(jī)器人開發(fā)的門檻, 從而把復(fù)雜的底層控制, 封裝成為一句一句簡單的API調(diào)用形式。比如來說, 你想要讓機(jī)器人說出你好這兩個字, 那么只需要編寫一行代碼“(“你好”)”, 這樣就可以了, 所以說這比你的想象中還要簡單許多。我一開始進(jìn)行玩的時候, 花費(fèi)了不足半天的時間, 就讓那個機(jī)器人順利地完成了自我介紹以及一小段簡單的揮手動作。那種滿滿的成就感是瞬間就涌上心頭的。它確實成功地把我們給從那些麻煩復(fù)雜的硬件調(diào)試任務(wù)之中徹底解放了出來, 這使得我們能夠更加集中精力去專注地實現(xiàn)各種邏輯設(shè)計和創(chuàng)造性的想法。而這才是去學(xué)習(xí)機(jī)器人技術(shù)時那種非常正確的開始方式與路徑。那么, 到底能用它來做什么呢? 它能發(fā)揮的作用, 完全不是一個簡單的玩具所能比擬的。因為樹莓派本身具備強(qiáng)大的計算能力, 還有很多接接口可以使用, 所以我們把機(jī)身上自帶的攝像頭、麥克風(fēng)陣列、幾個舵機(jī)還有觸摸傳感器都結(jié)合起來用一用, 這樣的話, 你就可以用它來實現(xiàn)讓人臉識別并且跟著移動的追蹤功能了。你也可以用來做語音對話的交互功能了。你還能讓他通過顏色去識別東西然后進(jìn)行抓取。甚至在更復(fù)雜一些的時候, 你還可以讓它編排各種各樣的舞蹈動作出來。我曾目睹部分學(xué)生將其應(yīng)用于課堂助教場景, 使其能夠自動巡視教室亦有人利用它來構(gòu)建智能家居控制中樞的模擬環(huán)境, 通過語音指令來操控?zé)艄庖约跋嚓P(guān)電器設(shè)備。該產(chǎn)品在實際操作層面具備可觀的可玩性, 同時在教學(xué)領(lǐng)域擁有顯著的附加值, 堪稱是一個直觀且可觸摸的、用于開展人工智能與機(jī)器人學(xué)相關(guān)實驗的理想平臺。2. 兩種開發(fā)模式總有一款適合你在拿到機(jī)器人之后, 你也許會覺得非常糾結(jié), 不知道究竟應(yīng)該從哪個具體的地方開始動手撰寫代碼。請完全不用擔(dān)心, 因為已經(jīng)為你準(zhǔn)備好了兩種非常主流的開發(fā)路徑, 其中一種比較適合用來進(jìn)行快速的驗證工作, 也適合用于交互式的學(xué)習(xí)過程, 而另一種則更側(cè)重于那些深度的開發(fā)工作以及后續(xù)的實際項目部署環(huán)節(jié)。我曾經(jīng)對這兩種方式都進(jìn)行過比較深入的體驗和使用, 接下來我就將會把它們的詳細(xì)步驟以及各自適用的場景逐一地進(jìn)行拆解和分析展示出來。2.1 新手福音基于 的在線編程這是官方最推薦的、也是上手最快的方式。你可以把它理解成, 機(jī)器人自己就帶了一個在線的、圖形化的代碼編輯器。你的電腦、手機(jī)或平板, 只要和機(jī)器人在同一個Wi-Fi網(wǎng)絡(luò)下, 就能通過瀏覽器訪問這個編輯器, 直接編寫并運(yùn)行控制機(jī)器人的代碼。我把具體的操作步驟呢, 結(jié)合我自己之前不小心掉進(jìn)坑里里面的那些經(jīng)驗和教訓(xùn), 給你整理出來一個顯得更加穩(wěn)妥一點(diǎn)的整個流程出來:首先, 你得去檢查那個機(jī)器人的電量是不是夠用的, 這個步驟千萬不能夠落下, 只有電量充足以后, 才可以讓你的機(jī)器人進(jìn)行開機(jī)操作。等到你看到或聽到啟動音效響起來了之后, 你就得拿出你自己的手機(jī)或者是筆記本電腦來。然后你去連接那個信號頻段為2.4GHz的Wi-Fi網(wǎng)絡(luò)。這里有一個非常關(guān)鍵的細(xì)節(jié)要點(diǎn)需要特別指出, 就是因為很多剛接觸這方面的新手朋友們通常會很容易把它給忽略掉。其實關(guān)于連接方式, 這個機(jī)器人它自己本身會主動創(chuàng)建一個熱點(diǎn)信號的, 或者你需要去直接連接到你家里面的路由器上面去的。更通用的做法是, 讓機(jī)器人和你的控制設(shè)備手機(jī)/電腦都連接到由同一個路由器發(fā)出的2.4G Wi-Fi網(wǎng)絡(luò)底下。這是后續(xù)能夠互相發(fā)現(xiàn)并且正常通信的一個基礎(chǔ)。 接下來需要獲取機(jī)器人的IP地址, 在網(wǎng)絡(luò)已經(jīng)完成連通之后, 按下安裝于機(jī)器人胸前的那個按鈕, 并且對著它清清楚楚地說出“IP地址”這幾個字。機(jī)器人將通過語音播報的方式把你告訴它的當(dāng)前IP地址給報出來, 例如像“192點(diǎn)168點(diǎn)1點(diǎn)105”這樣的內(nèi)容。你務(wù)必要將這個數(shù)字給深深地記在腦海中。關(guān)于訪問實驗室這回事, 請你直接打開你所使用的電腦瀏覽器, 然后在地址欄里敲入以 http:// 為開頭的鏈接內(nèi)容。機(jī)器人IP地址輸入8888這個端口號, 打個冒, 后面再加一個冒和8888, 比如寫成這樣的形式, :8888, 然后按下回車鍵。等你完成這一連串動作之后, 眼前就會浮現(xiàn)出大家非常熟悉的Lab界面。這個界面其實是運(yùn)行在機(jī)器人里面的樹莓派設(shè)備上的。只要你在這個地方創(chuàng)建一個以.ipynb結(jié)尾的筆記本文件, 或者編寫一段腳本代碼, 那么這些程序都會直接在機(jī)器人的硬件本體上邊執(zhí)行計算任務(wù)。下面是編寫第一個程序的步驟, 你需要在Lab環(huán)境下新建一個筆記本文件。接著打開編輯器的第一個單元格位置, 然后在里面輸入下面給出的這段代碼。import YanAPIfrom time import sleep# 初始化連接這里填寫機(jī)器人自己的IP地址ip_addr “192.168.1.105” # 替換成你機(jī)器人播報的IPYanAPI.yan_api_init(ip_addr)# 讓機(jī)器人說話YanAPI.start_voice_tts(“你好世界我開始學(xué)習(xí)編程了”, False)sleep(2) # 等待播報完成# 讓機(jī)器人做一個打招呼的動作假設(shè)動作ID 1是揮手YanAPI.do_play_action(1)當(dāng)你點(diǎn)擊運(yùn)行單元格的時候, 如果在整個過程中沒有出現(xiàn)什么狀況, 那么程序就很有可能會先完成說話的動作, 然后才做出揮手的動作。這種交互的方式是非常特別的, 它能夠讓你一邊進(jìn)行寫作, 一邊去進(jìn)行測試操作, 并且可以立刻就看到最終的實際效果是什么樣子, 這一點(diǎn)是非常適合用來進(jìn)行學(xué)習(xí)或者調(diào)試程序的環(huán)節(jié)。你要多加小心才行, 因為有時候瀏覽器很有可能會給出一個提示說那個連接是不安全的, 這個現(xiàn)象出現(xiàn)的主要原因是因為系統(tǒng)默認(rèn)使用的是HTTP這種方式。你遇到這種情況的時候, 直接去點(diǎn)擊“高級”這個選項, 然后選擇繼續(xù)訪問網(wǎng)站就行。除此之外, 你還得要確保電腦上的防火墻軟件并沒有把8888端口給攔截掉或者是阻止掉。2.2 高手之路本地IDE遠(yuǎn)程開發(fā)與調(diào)試當(dāng)你已經(jīng)習(xí)慣了那種便利, 并且開始著手開發(fā)規(guī)模更龐大的復(fù)雜項目之際, 你很可能會感到一種不便, 覺得在網(wǎng)頁環(huán)境中直接書寫代碼的做法不夠高效, 特別是在你迫切需要使用諸如智能代碼提示以及版本管理這些功能的時候, 而這些功能在你的本地環(huán)境中往往依賴于你所熟悉的專業(yè)工具軟件來進(jìn)行支撐, 在此時當(dāng)下, 那種采用本地開發(fā)配合遠(yuǎn)程部署的第二種方案做法便會發(fā)揮其作用。這種方法的原理是先用SSH即安全外殼協(xié)議登錄到機(jī)器人里面的樹莓派系統(tǒng), 再把核心的SDK也就是模塊復(fù)制到你的本地電腦上, 這樣的話, 你就能夠在本地IDE里面編寫代碼, 從而享受到一個完整的開發(fā)環(huán)境, 最后再把寫好的腳本上傳給機(jī)器人去運(yùn)行, 或者直接用網(wǎng)絡(luò)API來呼叫遠(yuǎn)程執(zhí)行。我在這里一步一步地帶著你, 將這個過程完全地進(jìn)行展示。SSH登錄機(jī)器人打開你電腦的命令行終端用CMD或Mac/Linux用。輸入命令ssh pi