MacからleJOS NXJを使ってNXTでJavaを走らせる

NXT with MAC OSX

ハマったことはウェブに発信せよ

昨年に引き続き,ETロボコンへ出場することになったので環境構築.
大会は昨年までRCXを使っていたけど,今年からNXTが導入されることになったので新たに.
もうThinkpadCygwinを走らせるのが面倒なので,常用しているMacBookAirでの構築を試みたがハマりまくってしまったのでメモ.

NXTは世界中で使われているけど,国内ではMacから利用しようとする人はあまり居ないようだ.
USBからもBluetoothからもNXTをハンドル出来ないところで2日ハマったので,大人しく英語サイトを読むのが正解だった.読んでみると結構すんなり理解出来るもので,最近の英語に対する努力が実を結びつつあるのかな.

ハマっていた原因はleJOSのバージョン.

NOTE: What follows should work for 0.8. Could any Mac users that have switched to 0.8 please confirm?

Mac users Please help us.... - leJOS

ということで,動作報告をしている人の多い0.7を使用したらうまくいった.
fantomが対応出来てないのかな.

僕の環境

[hmsk@] # java -version                                                                                                
java version "1.5.0_16"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-284)
Java HotSpot(TM) Client VM (build 1.5.0_16-133, mixed mode, sharing)

手順

1.LEGO公式のNXTのドライバとOSX用のファームfixを入れる

インストール後再起動を忘れずに.自動で促されない.

2.leJOS NXJを落とす
3.leJOSを展開
4.leJOSにパスを通す
  • 僕の.zshrcだと
export PATH=~/utilities:/opt/local/bin:/opt/local/sbin:/opt/local/share:/usr/bin/ghc/bin:/usr/local/bin:/Applications/MAMP/Library/bin:/Users/hmsk/Codes/lejos_nxj:/Users/hmsk/Codes/lejos_nxj/bin:$PATH
  • NXJ_HOMEも設定
NXJ_HOME=/Users/hmsk/Codes/lejos_nxj:$NXJ_HOME

ちゃんと再読み込みさせる.

% source ~/.zshrc
5.libusbを入れる
% sudo port install libusb

macportsがなくても,落として来てビルドすれば可.

6.FantomDriverを入れる

ちゃんと把握していないのだけどNXTをlibusbから操作出来るようにするためだったはず.

この中身のlibjfantom.jnilibをlibjfantom.dylibへ名前を変更し,lejos_nxjのbin/へ.
また同ディレクトリで

NXTCommUSB=lejos.pc.comm.NXTCommFantom

と書いたnxj.propertiesというファイルを作る.
ついでにこのディレクトリの中のものに全部実行権限を付加.

% chmod +x *

binディレクトリのパーミッションが755であることを確認.

7.NXTへleJOSのファームを書き込む

USBケーブルをNXTと接続して,NXTの電源を入れた状態で,nxtflashを実行する.

[hmsk@] # nxjflash
VM file: /Users/hmsk/Codes/lejos_nxj/bin/lejos_nxt_rom.bin
Menu file: /Users/hmsk/Codes/lejos_nxj/bin/StartUpText.bin
VM size: 48096 bytes.
Menu size: 32527 bytes.
Total image size 80655/81920 bytes.
jfantom_find built from 1.5:
 nFANTOM100_createNXTIterator  : -142017
Found nxt name %%NXT-SAMBA%% address 1
Connected to SAM-BA v1.4 
NXT now open in firmware update mode.
Unlocking pages.
Writing memory image...
Starting new image.

これでleJOSがデフォルトのファームとして扱われる.

8.NXTへブラウジングを試みる

ファーム書き込み時同様,NXTと接続して電源を入れ,nxtbrowseを実行.

[hmsk@] # nxjbrowse -u
2009-06-11 19:29:57.344 java[904:c1b] Can't open input server /Library/InputManagers/MultiClutchInputManager.bundle
jfantom_find built from 1.5:
 nFANTOM100_createNXTIterator  : 0

 nFANTOM100_iNXTIterator_getName  : 0
Found nxt name NXT address 001653055DEF

このメッセージの後に,新たなウィンドウが表示され接続出来るNXTのリストを見る事ができる.
ここで接続したいNXTを選択してConnectとすれば,中に書き込まれた動作するバイナリの一覧を確認出来る.
ここから,deleteやrenameが可能.
ただ,なんだか重い.

ちなみにuオプションはusb.-bとすればbluetoothでの捕捉が可能.
leJOSのbluetoothのパスキーは"1234"となっている.OSXbluetoothマネージャーで接続を確立しておけばok.

9.sampleのjavaコンパイルして書き込んでNXTを動かしてみる

サンプルは

NXJ_HOME/projects/samples

に置いてあるので,試しにコンパイルをしてみる.
例えば,beep音でメロディを奏でるTune.

NXJ_HOME/projects/samples/Tune

にて

nxjc Tune.java

としてコンパイルしてnxjを使って書き込みを行う.

[hmsk@] # nxj Tune -u
leJOS NXJ> Linking...
leJOS NXJ> Uploading...
jfantom_find built from 1.5:
 nFANTOM100_createNXTIterator  : 0

 nFANTOM100_iNXTIterator_getName  : 0
Found nxt name NXT address 001653055DEF
leJOS NXJ> Upload successful in 682 milliseconds

これで,NXTの

Files -> Tune.nxj

を選択すると,メロディが奏でられる.

ということで,やっと開発が始められる

ちなみにEclipseを使うつもりはない.Win環境で構築している人を真似してインストールをしたものの,このソフトの上でコードを書く気にはなれなさそう.やっぱりvimでなくちゃね.