程小奔——特別的玩具
來自專欄 為愛寫程序
近日入手了一個很特別的玩具,Makeblock的程小奔,一隻可編程的小玩具機器人。上手之後玩了挺久一會兒的,我和我妻都覺得挺有意思的,於是拿來作一個小小的評測。
開箱
拿到手的時候第一印象是,這是一個完整的商品。
對比Arduino或者樹莓派那種直接給你一塊板子的風格,程小奔無疑更適合給孩子當一個精美的玩具——程小奔的顏值挺高,塑料的外殼並不顯得過於廉價,產品也非常圓潤可愛。
打開盒子,內面包含主控模塊小程,以及它的專屬坐騎小奔——這個底座不僅僅是個履帶輪座駕,也包含著一組感測器組合,包括一個白光LED燈、可見光光線感測器、RGB LED燈、紅外光接收感測器和紅外光發射器。正面的感測器組能夠在水平向前於垂直向下之間手動調整,比較靈活。小程更是主體,包含紅外通信設備、顏色感測器、陀螺儀、麥克風、Wifi模塊等感測和通訊器件,以及點陣屏幕、音響、齒輪電位機、三個按鈕,與小奔結合,基本具備齊整的智能終端基本配置。
小程與小奔之間以磁吸介面連接,正如其它Makeblock產品的連接方式一樣。同理,如果需要繼續擴展,也可以通過這些磁吸介面接駁m家的神經元系列產品。此外,還有不少樂高插口——藉助樂高玩具和神經元器件進行擴展,兩相結合,樂高玩具也不僅僅只是裝飾,甚至能結合出其它運動效果,例如給程小奔接上手臂什麼的。
然而我沒有孩子,所以這也就成了一個給我自己的玩具。想想看已經年近三十,上一次正兒八經玩玩具已經是很模糊的記憶了。這樣一個玩具又有怎麼樣的趣味藏在裡面呢?對此還是十分期待的。
上手
按照卡片指引,首先是安裝開發工具,mBlock 5軟體,目前用到的最新版本是beta 1。
通過mBlock 5自帶驅動可以看出來,以硬體角度看,小程就是一塊集成了系列感測器件,並且有良好外殼包裹的Arduino。目前來看市面上大多數的Arduino產品都顯得非常粗獷,暴露的PCB加上一塊MCU,零散的感測器件,要說針對給孩子玩耍用,大多數都是不合格的。程小奔則很好地把這些都用一個精巧的外殼包裝起來了,彷彿是一個有著可愛臉蛋的小機器人,更能配合孩子的想像力,也更具吸引力——如果說一個有著編程啟蒙意義的小機器人玩具對孩子有十足的吸引力,自然更容易吸引孩子完成這一啟蒙。
mBlock 5是開發環境,同時也是一個「舞台」。mBlock的定義中,程小奔是一個「角色」,除了它以外,舞台上自然還可以放置其它虛擬角色——例如熊貓Panda、以及它的各位小夥伴、各種玩具、樂器、字元等等——而程小奔的獨特之處,在於它是現實中存在的角色。角色之間可以進行交互,程小奔也可以帶著Panda一起跳舞。從這個角度看,上位機與下位機的交互,或者網路間的交互,被抽象成了更可愛的存在。
編程
mBlock 5中提供兩種編程模式,一個是類似於Scratch的拖拽式搭積木編程,一個是Python形式的編程。
Scratch形式十分適合小孩子玩耍,因為相對於寫具體的命令,多彩的圖形、較少的文字輸入量和命令記憶量更方便於小孩子自己進行操作,而流程圖的形式,更是小學數學中已經涵蓋的教學內容。對此,mBlock 5中安排了十餘個示常式序,分別演示了各類感測器、各類命令的使用,同時又沒有實現得過於具體,讓使用者能夠有更多的擴展空間。
值得注意的是,程小奔內置的Wifi模塊使得它具有接入網路的能力。通過服務端的交互,可以進行天氣等信息獲取,也能推送和獲取一些定製數據,如果有多個小程,就可以藉助網路相互交換狀態的。
而對於其它虛擬角色,更是提供了AI介面,能夠調用網路服務,進行語音識別、手寫識別、人臉情緒、年齡推測等功能;同時還有DL模塊,能夠提供簡單的圖片分類識別的訓練和預測工具。它並不能直接在程小奔上進行使用,但是通過通訊配合,還是能做一些有意思的事情。使用DL和AI模塊並不需要額外寫相關代碼,相當程度上減少了孩子及非專業用戶的使用難度。
主體上,程序以事件回調的形式進行調用,即發生事件——執行功能的邏輯。而多端通信被抽象成了消息(固定內容)和通信變數(可變化內容),用戶不用過於操心通信過程中的具體細節。
此外,由Scratch構建好的項目,可以直接查看其對應的Python源碼。
儘管Scratch形式十分方便,但如果想要實現比較複雜的邏輯,還是略微費事的。直接使用Python編程有著更大的自由度。最初我以為Python只是作為一個DSL在編譯前執行的,但後續發現並非如此——它更類似於基於MicroPython那樣的片上Python解釋器。對程小奔的Python編程API有一組堪用的文檔,可以看到Makeblock把程小奔相關代碼做了很好的封裝,編程起來也十分省事。
還可以做得更好
程小奔並非完美,它仍有一些不足夠完美的地方,包括:
- 小奔的感測器組只有一組,只能在垂直方向進行調整,只能手動調整,因此當需要編程使得程小奔同時進行蔽障和防跌落是不能實現的;
- 距離感測器的檢測範圍較小,對於障礙物檢測只能檢測到覆蓋至感測器正前方的部分,而對稍偏斜、沒有覆蓋到正前方但確實會阻礙行進的障礙物無法檢測到;
- Python API的文檔並不齊全,在我寫代碼過程中,就發現過一些坑——例如點陣屏幕的設置,當使用
codey.face
介面改寫時,如果傳入的是字面量,會是以01標註的面板矩陣,但若傳入的是str型變數,則會以一位元組一列的形式,需要送入屏幕內容的十六進位表示。這一點並未在文檔中提及; - Python模式下缺少調試功能,即使運行有錯誤信息,也並不能獲取到。
- 小程有Wifi模塊,經檢測確實能夠連接到Wifi中,但具體使用方式不明。看到了IoT生成代碼中有urequests等工具,其實能夠搭配做出更有意思的應用,包括不牽線纜的計算機與程小奔通信等。
但是這些個建議,大多是站在一個Arduino玩家的角度,而非以程小奔為玩具的小朋友的角度提出的。作為給小孩子設計的一體化的機器人和編程教育玩具,我想它幾乎就是完美的。
附——官方產品鏈接
PS: 好久沒寫DL相關的東西了,一來有點兒忙,二來也是最近在對老婆準備畢業用的模型反覆調整。之後待老婆大人順利畢業,相關文章都會放到這個專欄來。
推薦閱讀:
※2018武漢國際玩具展即將7月開幕
※去年做的幼教三階魔方還原圖集
※軟彈槍或者水彈槍怎麼玩啊?雙方對戰就是胡鬧一氣嗎?沒有辦法判定輸贏?
※玩具的種類和功能
※0-1歲寶寶玩具如何選擇?