一般的樂高模型完成之後是『靜』態模型,玩家可以自由想像,沈浸於觀賞之中。
將模型加上馬達等動力元件,就可以進化為『動』態模型,有了動作,玩家可以有更多的玩法。
可是馬達也只會像電風扇一樣正轉或反轉,配合機構設計,模型也只能重複動作。
有了NXT主機及感應器,NXT樂高機器人模型就能夠具備『互動』的效果,針對周遭環境的變化,產生不同的對應動作。
控制程式就像是賦予樂高機器人『靈魂』一般,讓NXT機器人更加生動有趣。
簡單的來說,控制NXT樂高機器人有兩種不同的方式:
1. 機器人內心自主行動
程式儲存在NXT主機,所有動作由NXT主機發號施令。
2. 外部命令控制機器人
程式儲存在遙控電腦,機器人的所有動作由遙控電腦(或手機等)發號施令。有點像是遙控汽車或是遙控飛機。
當然也有綜合兩者的方式,特別是需要大量運算的工作,例如影像處理。
用下面兩張圖片說明控制NXT樂高機器人的方法,左邊的小恩是機器人,右邊的BetaRex是媽媽。
在電腦世界中有許多不同的程式語言,控制NXT當然也可以使用各種不同語言。例如:
1. NXT-G
樂高官方的NXT程式語言,G表示Graphic圖形化語言,為樂高與NI合作開發,適合入門者快速學習,實際上就是簡化版的LabVIEW。(打個廣告,歡迎購買探奇的書籍一起研究。NXT樂高機器人:創意樂趣,隨心所欲!)
NXC是一種類似C語言的程式(語法並非完全依照ANSI C的標準),由John Hansen先生開發。
撰寫NXC程式可以搭配BricxCC(Bricx Command Center)整合式開發環境,從程式編排、編譯、下載、執行,一次搞定。還有許多有用的公用程式。完全免費使用,想多瞭解的人也可以參考CAVE的書籍。
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,
請參考探奇舊文章:
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樂高機器人為這些程式語言提供動手操作的經驗,回歸到實體世界,可以觀察,可以建構,大大地增加學習程式語言的樂趣。
最後,還是要回到老生常談:
不論是圖控式還是文字型程式語言,每一種語言的設計都有其獨特性及方便性,
找到你喜歡的、好用的、容易理解及習慣上手的,就是好的程式語言。
可以請問一下樂高機器人能不能支援 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。
祝你成功也歡迎分享心得。