2010-04-19

關於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




9. nxtOSEK


官網副標題是ANSI C/C++ with OSEK/μITRON RTOS for LEGO MINDSTORMS NXT


有興趣的同好可以參考官網的介紹(也有簡體中文版),或是探奇舊文章曾經發表過的介紹。

探奇關於nxtOSEK的舊文章連結

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

以上的程式語言都可以經過撰寫、編譯、傳輸下載到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樂高機器人為這些程式語言提供動手操作的經驗,回歸到實體世界,可以觀察,可以建構,大大地增加學習程式語言的樂趣。


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


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


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











 


 


1 則留言:

  1. 何大爺10:58 上午

    可以請問一下樂高機器人能不能支援 object-c語言嗎

    [版主回覆05/13/2011 12:22:32]你好:

    樂高官方所提供的程式語言只有NXT-G,其他程式語言都是由樂高玩家所發展出來的。

    透過藍牙遙控NXT樂高機器人有兩種方式:

    1. 使用Fantom Driver的函式。

    2. 直接以Direct Command進行通訊。

    目前看到有人用Objective c寫出控制NXT的程式。

    請參考:legonxtremote

    作者的部落格:Lego NXT Remote

    這裡好像有其他感應器討論:Lego Mindstorm NXT, Cocoa, and HiTechnic Sensors


    如果Objective c可以接受C的函式庫,那麼或許可以用NXC或RobotC的Driver。

    祝你成功也歡迎分享心得。

    回覆刪除

探奇歡迎大家留言討論!謝謝分享你的意見。