92話で紹介したLeJOSのことを覚えている人はいるだろうか。LeJOSはMindStromsの黄色い本体RCX向けのJavaVM(バーチャル・マシン)であり,プログラム開発環境である。92話に書いたようにhttp://lejos.sourceforge.net/download.htmlからWin32 leJOSをダウンロードして,解凍してできたlejosフォルダをc:\などに移動し,pathに設定すれば利用可能になる。もちろんJ2SDKがインストール済みであることが前提だ。

 コマンドプロンプトにlejosfirmdl --tty=usbと打ち込み,RCXのファームウエアを書き換えれば,Javaで作ったプログラムを転送できるようになる。RIS2.0のIRタワーはUSB接続なので--tty=usbというオプションを付けてファームウエアをダウンロードする。

 そして例えば,次のようなプログラムをエディタを使ってHelloWorld.javaという名前で作成したら,

----------------------------------------------------------

import josx.platform.rcx.*;
public class HelloWorld
{
 public static void main (String[] aArg)
 throws Exception
 {
  LCD.clear();
  TextLCD.print ("hello");
  Thread.sleep(2000);
  TextLCD.print ("world");
  Thread.sleep(2000);
 }
}

----------------------------------------------------------
 コマンドプロンプトで,lejosc HelloWorld.javaのように入力してコンパイルする。コンパイル・エラーがなければ,set RCXTTY=usbと環境変数を設定後,lejos --tty=usb HelloWorldとしてRCXにプログラムを転送する。

 暗黒のコマンド・プロンプト画面でコンパイル,転送を行うのはやはり億劫である。C言語に似たNQCをコンパイラとして使うRcxCCやBrickCCなどの統合開発環境のほうが便利だ(NQCについては「中学生のためのNQC入門」を参照)。こうしろうのLeJOSによるプログラミングも長続きはしなかった。

 JavaでMindStormsのプログラムを作りたいときはどうすればよいだろう。ロボットを目に見えるオブジェクトとしてJavaでオブジェクト指向を学ぶことはできないかとNetBeansやEclipseでLeJOSを使えないか海外のサイトを調べてみた。MacでNetBeansでLeJOSという例を一件見つけ,まねてみたがうまくいかなかった。

 EclipseとLeJOSで検索すると,LDT(leJOS Development Toolset)というプラグインが見つかった。LDTをダウンロード(http://lejos.sourceforge.net/tools/eclipse/ldt/),解凍して出来たfeaturesフォルダとpluginsフォルダをeclipseをインストールしたフォルダに上書きする(J2SDKに加え,Eclipse3.Xがインストール済みであることが前提となる。筆者の使っているEclipseはバージョン3.1.1である)。これだけで,EclipseでMindStormsのプログラミングが可能になるのだ。何の設定もいらない。Eclipseプラグインの仕組みに脱帽である。

 メニューにファームウエアのインストールが追加されている。ファームウエアをインストールしてみると,最後に以下のメッセージが出力される。

 しかし,RCXからは準備OKと言いたげな音がするので,構わずプロジェクトの作成に進む。

 ウィザードでleJOS RCX projectを選択しプロジェクトを作ったら,次に新規クラスを作成する。
----------------------------------------------------------

import josx.platform.rcx.*;
public class Targe
{
 public static void main (String[] aArg)
  throws Exception
 {
  LCD.clear();
  TextLCD.print ("boa");
  Thread.sleep(2000);
  TextLCD.print ("targe");
  Thread.sleep(2000);
 }
}

----------------------------------------------------------
 こんな風にコードを入力した。Hello worldがboa targe(ポルトガル語でこんにちは)に変わっただけだ。

 さて,ここで困った。RCXにこのプログラムをアップロードする方法がわからない。ファームウエアのインストール以外にメニューには何も追加されていない。

 「実行しかないわな。他に考えられんもんな」とパッケージ・エクスプローラーでTarge.javaを右クリックして,実行-leJOSを選ぶと次のようなエラーメッセージが出力される。

 "起動中" 中に内部エラーが発生しました。
----------------------------------------------------------

java.lang.IllegalArgumentException: Path must include project and resource name: /BoaTarge
 at org.eclipse.core.internal.utils.Assert.isLegal(Assert.java:60)
 at org.eclipse.core.internal.resources.Workspace.newResource(Workspace.java:1560)
 at org.eclipse.core.internal.resources.Container.getFile(Container.java:125)
 at org.lejos.tools.eclipse.plugin.launch.RunDelegate.launch(RunDelegate.java:63)
 at org.eclipse.debug.internal.core.LaunchConfiguration
    .launch(LaunchConfiguration.java:590)
 at org.eclipse.debug.internal.core.LaunchConfiguration
    .launch(LaunchConfiguration.java:515)
 at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:733)
 at org.eclipse.debug.internal.ui.DebugUIPlugin$6.run(DebugUIPlugin.java:931)
 at org.eclipse.core.internal.jobs.Worker.run(Worker.java:76)

----------------------------------------------------------
 エラーメッセージを手がかりにググると,

 You must set in your project properties your “Default output folder” as yourProject/bin

という解説がみつかったので,デフォルト出力フォルダー(T):にbinサブフォルダを追記した。  これでTarge.javaを右クリックして,実行-leJOSでプログラムが転送できるようになった。

  緑のRUNボタンを押すと,boaに続いてtargeと表示する。Thread.sleepの引数はミリ秒(1/1000秒)である。

 もし,転送がうまくいかなかったら,ウィドウ-設定-leJOSでTowerのポートを確認すると良いだろう。