2010-04-19 20:53:00探奇教室

關於NXT樂高機器人3--程式設計

瞭解NXT樂高機器人的硬體設備,我們再來看看NXT樂高機器人的軟體--程式設計。

一般的樂高模型完成之後是『』態模型,玩家可以自由想像,沈浸於觀賞之中。

將模型加上馬達等動力元件,就可以進化為『』態模型,有了動作,玩家可以有更多的玩法。

可是馬達也只會像電風扇一樣正轉或反轉,配合機構設計,模型也只能重複動作。

有了NXT主機及感應器,NXT樂高機器人模型就能夠具備『互動』的效果,針對周遭環境的變化,產生不同的對應動作。

控制程式就像是賦予樂高機器人『靈魂』一般,讓NXT機器人更加生動有趣。

簡單的來說,控制NXT樂高機器人有兩種不同的方式:

1.  機器人內心自主行動

     程式儲存在NXT主機,所有動作由NXT主機發號施令。

2.  外部命令控制機器人

     程式儲存在遙控電腦,機器人的所有動作由遙控電腦(或手機等)發號施令。有點像是遙控汽車或是遙控飛機。

當然也有綜合兩者的方式,特別是需要大量運算的工作,例如影像處理。

用下面兩張圖片說明控制NXT樂高機器人的方法,左邊的小恩是機器人,右邊的BetaRex是媽媽。






在電腦世界中有許多不同的程式語言,控制NXT當然也可以使用各種不同語言。例如:

1. NXT-G

樂高官方的NXT程式語言,G表示Graphic圖形化語言,為樂高與NI合作開發,適合入門者快速學習,實際上就是簡化版的LabVIEW。(打個廣告,歡迎購買探奇的書籍一起研究。NXT樂高機器人:創意樂趣,隨心所欲!


2. NXC (Not eXactly C):

NXC是一種類似C語言的程式(語法並非完全依照ANSI C的標準),由John Hansen先生開發。

撰寫NXC程式可以搭配BricxCC(Bricx Command Center)整合式開發環境,從程式編排、編譯、下載、執行,一次搞定。還有許多有用的公用程式。完全免費使用,想多瞭解的人也可以參考CAVE的書籍。


3. NBC  (Next Byte Codes):

NBC類似組合語言,語法簡單,但是撰寫時需要比較清晰的思路,NXC即是建構在NBC上的高階語言。


4. RobotC

卡內基美隆大學出品的商業產品,當然付費使用會有較佳的支援,例如標準ANCI C語法,強大的除錯系統,快速的編譯及執行速度。


5. leJOS (NXJ)

leJOS是一個JAVA語言的虛擬機器(Virtual Machine),搭配NXJ API,可以使用JAVA語法控制機器人。大部分的同好會使用Eclipse整合式編譯環境開發。


6. pbLua

pbLua就是可以在NXT上執行的Lua,由於是Script形式,所有編譯及執行都在NXT主機上完成。

(我對於『程式理論』的瞭解不夠,還請專家指正。)


7. Robolab

從RCX時代就是最佳的樂高機器人操控工具,如果說NXT-G是LabVIEW裹上一層糖衣,那麼Robolab根本就是LabVIEW。雖然沒有支援PC的藍牙連線,但是強大的功能,仍然是許多老師的最愛,可惜的是已經不再更新支援。


8. LabVIEW (搭配NXT module) 或是LVEE

NXT樂高機器人是由樂高公司與美商國家儀器公司(National Instruments)所共同開發,最棒的程式語言當然是NI引以為傲的LabVIEW,配合NXT的Add on或NXT擴充模組,就能完全發揮LabVIEW圖控式語言的特點。

LVEE則是新開發的LV簡易版本,專門支援NXT的控制,還受到Tufts大學的大力支持及研究開發。

請參考探奇舊文章:LVEE--LabVIEW Education Edition


以上的程式語言都可以經過撰寫、編譯、傳輸下載到NXT主機,直接從NXT主機執行。是屬於內心自主行動的程式語言。

其他常見的電腦程式語言也能使用玩家所開發的程式庫,『遙控』NXT樂高機器人,屬於外部命令控制機器人,例如:

1. MSRDS (VPL)

MSRDS (Microsoft Robotics Developer Studio)微軟公司為控制機器人所開發的程式設計環境。

樂高NXT機器人當然也是MSRDS支援的重要機器人之一。

VPL是其中一種視覺性程式設計語言,這方面可以參考台大土木系康士仲教授及其MSRDS課程團隊的相關書籍。


2. VB

Visual Basic大家應該蠻耳熟的。


3. C#

C#也是微軟公司力推的程式語言,目前有Mindsqualls支援NXT相關函式庫。或是NXT.NET


4. C++

物件導向語言,有NXT++Anders' Mindstorms page - C++ Communication Library


5. python

大莽蛇,可以參考http://code.google.com/p/nxt-python/,上次為了與Scratch結合,探奇也下苦工試用了一下!(請參考探奇舊文章:Scratch and LEGO NXT

6. Matlab

有學校單位的網友寫出The RWTH - Mindstorms NXT Toolbox,可以運用MatLab強大的數學運算功能控制NXT。

7. Perl

最早可以在Mac控制NXT的語言。


8. Ada, Smalltalk.......

超多語言都可以控制NXT,

請參考探奇舊文章:

可以用Ada控 制NXT機器人

NXTalkNXT 樂高機器人也可以用Smalltalk控制


===========================================================

其實只要符合NXT官方通訊規範,任何程式語言都能使用Direct Command控制NXT。

撰寫程式控制NXT樂高機器人還有幾點需要注意:

1. Buletooth v.s. USB

藍牙通訊與USB傳輸可以針對不同的需求選擇使用,大部分的程式語言透過NI所開發的Fantom Driver,進行PC與NXT的連結。但是在linux系統就必須自己撰寫驅動程式。

2. Firmware的差異:

韌體是NXT主機的靈魂,有了不同的韌體,可以發揮的功能也不相同。NXT官方的韌體寫得並不夠完善,應該還有許多改進的空間。大部分內心自主行動的程式語言都需要自己專屬的韌體,除了NXC/NBC,當然John Hansen先生也有推出加強版的NXT韌體,讓NXC語言可以做更多應用。

3. 程式執行反應速度的差異:

常常在一些文章中看到各種程式語言對於NXT執行速度的比較。其實NXT主機的規格並不差,大部分是韌體及程式編譯的方式,造成各種程式語言執行上的速度差異。就一般的應用來說,執行速度的快慢並不會有太大的影響。當然還是有人喜愛追求快速反應。


通常學校教授程式語言都只能在電腦上運行,屬於虛擬世界的運作。

NXT樂高機器人為這些程式語言提供動手操作的經驗,回歸到實體世界,可以觀察,可以建構,大大地增加學習程式語言的樂趣。

最後,還是要回到老生常談:

不論是圖控式還是文字型程式語言,每一種語言的設計都有其獨特性及方便性,

找到你喜歡的、好用的、容易理解及習慣上手的,就是好的程式語言。