NXT Controller in Lisp (alpha version)
Scheme版はこちら.
これは何?
LEGO社の
MINDSTORMS NXT
をLispで操作するためのバックエンドです.Lispを使って対話的にNXTプログラミングができるようになります.
LEGO社が公開している
fantom SDK
を利用して開発しています.
XS
(RCX用)とは異なり,あくまでPC上で動くLispによる外部コントローラであるため,PCとNXTの間の通信は頻繁に発生することになります(特にイベント待ちの時).そのかわり,強力なCommon Lispの機能をフルに利用してメモリの制約もほとんど気にすることなくプログラミングが可能です.
XSにほぼ準拠した高水準なNXT操作用Lisp関数・マクロも実装しています.
動作要件
-
Microsoft Windows:XPおよびVistaで動作確認しています.要管理者権限.
-
Allegro Common Lisp
または
GNU CLISP
(
Cygwin
版)
または
Steel Bank Common Lisp (SBCL)
:Foreign Function Interface (FFI)やマルチスレッディングなどの処理系固有の機能を使っているため.Allegroは無料の
Express Edition
でも可.CLISPおよびSBCLのWindows版はマルチスレッド機能がないため,いくつか
制限
があります.
-
MINDSTORMS NXT本体:これがないと話になりません.
-
NXT firmware:買ったときに入っているファームウェアで問題ないと思いますが,
ここ
に最新版が置いていあります.ファームウェアのダウンロードはNXT Softwareか,無料の
BricxCC (Bricx Command Center)
を使ってください.
Robolabを使ってNXTとの通信を確立しようとすると,ちょっと違うファームウェアをダウンロードしてしまい,その状態だと使えなくなってしまうようです.
-
fantom.dll:%windir%/system32 のフォルダにインストールされている必要があります.本体付属のCDをインストールするとついてくるようです.
CLISPおよびSBCL版の制限事項
-
イベントハンドラ
with-wathcher-1
および
with-watcher
が使えない
-
play
関数を実行した際,演奏が終了するまで制御が戻らない
Download
nxt-lsp.zip (2014/06/09)
History
-
2014/06/09: Added license information (MIT License)
-
2007/08/27: Steel Bank Common Lisp (SBCL)に部分的に対応
-
2007/08/24: GNU CLISPに部分的に対応
-
2007/06/04: distance-on関数が距離センサーの準備ができるのを待つように修正.および,distance-on実行前にdistance関数を実行した場合,無限ループに陥いることがあったのを修正.
-
2007/06/02: 距離センサー
(distance-on, distance関数)
の実装がおかしかったのを修正.
-
2007/05/08: 初版公開.
導入手順
-
Lisp処理系のインストール
-
Allegro Common Lispの場合
-
ここ
の
“Download Allegro CL 8.1 Free Express Now!”
のリンクからAllegro Common Lisp Express Editionをダウンロードします.
(名前やメールアドレスなどを入力する必要があります)
-
ダウンロードしたプログラムをインストールして,さきほど入力したメールアドレス宛に送られてくるライセンスファイルをインストール先のフォルダに置きます.
-
Cygwin版CLISPの場合
-
ここ
からCygwinのセットアッププログラムをダウンロードして実行します.インストールするパッケージの選択画面でclispを選択することに注意すれば,あとは普通のインストールでOKです.細かい手順はネット上に親切なページがたくさんありますので,わからなければ適当に調べてください.
-
SBCLの場合
-
ここ
のページの
“Downloading/ platform support”
のリンク先のにある,SBCLのWin32版をダウンロードしてインストールします.
-
fantom.dllのインストール
-
Robolab2.9またはNXT SoftwareのCDから普通にインストールすればOKです.
-
ファームウェアのダウンロード
-
必要な場合
(Robolabのファームウェアをダウンロードしてしまったり,
leJOS
を使っていた場合)
は上記の場所から最新のstandard firmwareとBricxCC(NXT Softwareが手元にない場合)をダウンロードしてNXTにファームウェアをダウンロードしてください.
(Vistaでは,BricxCCを「管理者として実行」する必要があるようです.)
-
実行
-
PC本体とNXTをUSBケーブルかBluetoothで接続します.Bluetoothの接続は今のところかなり不安定ですのでうまくいかなければUSBを試してください.
Bluetoothに関する追記 (2008/08/20)
-
BluetoothデバイスとNXTの相性がけっこうあるようです.私の環境では,ThinkPad X60内蔵のデバイスでは全然うまくいきませんでしたが,
Abe UB22S
を使うとあっさり成功しました.
ここ
を参考に,対応するデバイスを使用するとよさそうです.
-
「Bluetoothで接続」
とは,パスコードを送ってシェイクハンドした状態まで持っていくことを指します.本体メニューの
“Bluetooth”
→
“My contacts”
の画面でPCの名前が表示される状態ならOKと思われます.
(同一PCであれば二度目以降は必要ない?)
-
本ページのnxt-lsp.zipをダウンロードして適当な場所に解凍します.
-
Lisp処理系を起動します.
-
Allegro Common Lispの場合
-
Windowsのスタートメニューから
「Allegro CL」
→
「ANSI ACL Images」
→
「Allegro CL 8.0 (ANSI)」
を
(Vistaの場合は管理者として)
実行します.
-
プロンプトが表示されるので
:cd
〈ディレクトリ名〉
で,
“nxt-lsp.zip”
を解凍したディレクトリ
(
“nxt.lsp”
があるディレクトリ)
に移動します.
(打ち間違いなどでエラーがでたら,
:pop
と入力すれば元に戻ります.また,作業ディレクトリをこのディレクトリに設定したショートカットを作成しておけば,この作業は不要になります.)
-
Cygwin版CLISPの場合
-
Cygwinのプロンプトを
(Vistaの場合は管理者として)
起動します.
-
cdコマンドで,
“nxt-lsp.zip”
を解凍したディレクトリ
(
“nxt.lsp”
があるディレクトリ)
に移動します.
-
“clisp”
コマンドによりCLISPを起動します.
-
SBCLの場合
-
Windowsのスタートメニューから
「SBCL x.x.x」
を
(Vistaの場合は管理者として)
実行します.
-
プロンプトが表示されるので
(require :sb-aclrepl)
として,ACL風のRead Eval Print Loopを使えるようにします.
-
:cd
〈ディレクトリ名〉
で,
“nxt-lsp.zip”
を解凍したディレクトリ
(
“nxt.lsp”
があるディレクトリ)
に移動します.
(打ち間違いなどでエラーがでたら,
:cont 0
と入力すれば元に戻ります.また,作業ディレクトリをこのディレクトリに設定したショートカットを作成しておけば,以上の作業は不要になります.)
-
(load "nxt.lsp")
(setup-nxt)
(Bluetooth接続の場合は
(setup-nxt t)
)
として,
t
が返ってくれば接続成功です.
-
(play "CDEFGAB")
として音が鳴るか試してみてください.
マニュアル
ここ
に置きました
参考にしたもの
-
NXT関連
-
Allegro CL関連
-
GNU CLISP関連