在樂高機器人上執行Java程式(一)

在樂高機器人上執行Java程式(一)
文∕趙英傑

Lego Java作業系統(簡稱LeJOS),支援部分的標準Java API,並擁有自訂的API,負責執行RCX相關的功能,例如:控制馬達、檢測感測器和按鈕、在LCD螢幕輸出字串、透過揚聲器發出聲音…等等。這些與RCX相關功能的API都位於leJOS的josx.platform.rcx套件中。本文將簡單介紹安裝leJOS與編譯Lego Java程式的方式。基本的安裝設定包含底下幾個步驟:

1. 下載與安裝JDK(Java程式開發工具套件)
2. 下載leJOS
3. 設定電腦系統的環境變數
4. 把leJOS的韌體傳入RCX

下載與安裝JDK
首先請到Sun Microsystems(昇陽電腦)公司的Java網站下載JDK(http://java.sun.com/javase/downloads/index.jsp),筆者下載的是不包含NetBeans(昇陽公司的Java視覺開發工具)的JDK 5.0版(或者說JDK 1.5版,這兩個是一樣的東西,改名成5.0版大概只是為了讓它聽起來比較「先進」)。下載完畢後,雙按可執行檔並照著畫面的中文說明步驟安裝即可。

下載leJOS
請先到http://lejos.sourceforge.net/網站下載leJOS,筆者採用的是用於Windows的2.1版。下載完畢後,為了便於操作,請將它解壓縮存放到C磁碟機的lejos資料夾。下圖是解壓縮後,放在lejos資料夾的內容。

lejos資料夾

設定系統環境變數
設定「環境變數」是為了方便程式編譯工具能順利地找到磁碟中的相關資源。我們需要設定底下五個環境變數(等號左邊是環境變數名稱,等號右邊則是環境變數值),底下的設定適用於JDK 5.0版(註:Windows系統不會區分環境變數的大小寫,因此Path和PATH是同一個變數):

  • 設定JDK的家目錄
    JAVA_HOME=C:\Program Files\Java\jdk1.5.0_06
  • 設定leJOS的家目錄
    LEJOS_HOME=C:\lejos
  • 設定相關程式的路徑,不同的數值之間用‘;’區隔。
    PATH=%PATH%;%JAVA_HOME%\bin;%LEJOS_HOME%\bin
  • 設定RCX紅外線傳輸器與電腦的連結方式,如果是串列埠,要設定COM1或COM2等埠號,如果是USB,就直接寫USB即可。
    RCXTTY=USB
  • 設定類別檔的路徑,’.’代表目前所在的路徑。
    CLASSPATH=C:\lejos\classes\;.

設定Windows環境變數的方式:在桌面「我的電腦」圖示上按滑鼠右鍵,從快捷選單選擇「內容」指令。接著點選「系統內容」設定視窗中的「進階」設定頁,再按下底下的「環境變數」鈕。

系統內容

按下「環境變數」面版底下的「新增」按鈕,準備新增JAVA_HOME變數。

環境變數

在「新增系統變數」方塊中,輸入JAVA_HOME和路徑:

新增系統變數

請重複上面的步驟,新增其他環境變數。如果某些環境變數名稱已經存在於電腦系統,就不需要另外再新增,而是編輯它們,在既有變數值的後面加上分號,再加上新的數值。

例如,筆者的電腦系統已經具有名叫CLASSPATH的環境變數,因此筆者選擇編輯它,在原有的變數值後面加上“;C:\lejos\classes\;.”。

編輯系統變數

傳送RCX韌體
開發環境設定完畢後,我們得先把leJOS的韌體傳入樂高的RCX可程式積木,才能讓它執行Java程式(Java bytecode)。

按下Windows工具列的「開始」按鈕,選擇「執行」指令,然後在「開啟」欄位中輸入“cmd”,打開Windows的「命令提示字元」視窗。

命令提示字元

  1. 在「命令提示字元」視窗中,輸入 " cd \lejos\bin",再按下Enter鍵,進入lejos的工具程式所在目錄。
  2. 輸入"lejosfirmdl -f",再按下Enter鍵,即可將韌體傳給RCX。"-f"參數的意思是「快速(fast)」模式,約比一般的傳輸模式快四倍;如果您的傳輸器無法使用快速傳輸模式,那就不要輸入 "-f"。

「命令提示字元」視窗

除非您曾經取下RCX的電池而導致韌體消失,傳送韌體的步驟只需要做一次就好。每次傳輸韌體時,RCX之前儲存的程式資料將會被清空。

編譯與傳輸Hello World範例程式
最後,我們可以用leJOS提供的範例來測試它,所有的範例檔案都放在leJOS安裝路徑底下的examples資料夾裡面。筆者將採用其中最簡單的HelloWorld.java來示範(位於examples\hworld路徑內)。

如果此程式編譯成功並且上傳到RCX執行,RCX的液晶面版將顯示如下圖的文字(RCX的LCD只能顯示數字和近似的字母):

文字 hello

文字 world

回到「命令提示字元」視窗,切換到lejos資料夾裡的examples\hworld路徑(筆者的電腦目前位於C:\lejos\bin路徑,因此要輸入cd ..\examples\hworld)。

編譯leJOS的Java原始檔,並不是用編譯一般Java程式的javac指令,而是lejosc,例如,底下的指令將能編譯目前路徑底下的所有.java程式碼:

lejosc *.java

然而,這個leJOS版本的lejosc編譯指令,預設無法搭配JDK 5.0(或者說JDK 1.5)使用,所以「命令提示字元」視窗將回報一個錯誤訊息:javac: target release 1.1 conflicts with default source release 1.5。

「命令提示字元」視窗

還好這個問題的解決方式很簡單,只要在lejosc指令中加上一個-source 1.2的參數即可:

lejosc -source 1.2 *.java

程式編譯完畢後,hworld資料夾當中,將出現一個HelloWorld.class檔,這就是要傳入RCX執行的Java類別檔。最後一個指令叫做lejos,它將會幫我們連結程式所需的bytecode,打包成一個執行檔並傳送給RCX。此範例類別叫做HelloWorld.class,因此請在「命令提示字元」視窗中輸入:

lejos HelloWorld

如下圖所示。上傳完畢後,RCX會「嗶嗶」叫兩聲,這時,按下RCX上的綠色Run(執行)鈕,就能看到Hello World訊息了。

「命令提示字元」視窗

Posts created 468

12 thoughts on “在樂高機器人上執行Java程式(一)

  1. 想問一下~這樣意思就是把NXT的韌體給改掉嗎??

    會不會造成本身NXT的效能等等…?

  2. 嗯,可以想像成換一種作業系統。對NXT本身的效能沒有影響,通常自訂的韌體可以發揮的功能更多。

  3. 您好:

    我的版本是
    lejos_win32_2_1_0。

    所以和你的情況有點不一樣。

    所以如果
    CLASSPATH 指到目錄,會有問題,
    CLASSPATH因java 認証的考試也有考,基本上要指向一個jar檔,或是一個明確的.class檔(編譯過的)。

    所以 教學裏
    http://lejos.sourceforge.net/rcx/tutorial/getstarted/firstbrick/win32.html

    已寫成
    # Add the leJOS classes to your CLASSPATH environment variable:
    set CLASSPATH=%CLASSPATH%;.;%LEJOS_HOME%/lib/classes.jar;%LEJOS_HOME%/lib/pcrcxcomm.jar

    但是編譯時仍然會發生一樣的錯誤。
    javac: target release 1.1 conflicts with default source release 1.5。

    我本來以為是我的jdk版本是1.6.0_18

    本來從移除,重裝,

    但看到你的blog,有寫,
    E:\lejos_win32_2_1_0\lejos\check>lejosjc.bat -source 1.2 *.java DistributionSmok
    eTest.java

    試了,可以編譯成功耶。接著往下一步前進。

    我的機型是
    rcx 1.0, IR TOWER 要裝9v電池,且是rs232,com1 port可work。

    最新的lejos 3.0 RC2 版,不work,也許rc2並不是正式版吧。只是2008年就rc2版,好久沒升級成正式版。

    我目前run lejos 網站上的正式版,2.1.0

  4. 你的rcx 貼圖看不到版本號了,我的有寫rcx 1.0

    有1○年以上的歷史了。

    但這10年來,我不知道他的firmware 一直有人幫它改寫出來。

    10年,rcx 幾乎在我的生命中不曾出現過。虧我當初花了不少錢。
    買回來就生灰塵。

    離你首次貼文也有4年多了。

    4年真是好久!!

  5. E:\lejos_win32_2_1_0\lejos\check>lejos DistributionSmokeTest
    Fatal: %CLASSPATH% is not a directory.

    編譯好了,download上去,確出現這個問題!!

    傷腦筋!! %CLASSPATH%是指到檔案啊!!

  6. 還要把目前的路徑,”.”,加上classpath, 才能上傳成功。

    和你一樣,我也是2.1.0, 不在2006年,在2010年才玩到。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top