Lego Mindstorm with Linux Mini-HOWTO Luis Villa
luge@users.sourceforge.net
浩一 野本 日本語翻訳
hng@ps.ksky.ne.jp
1.1 October 29th, 2000 Lego グループの Mindstorm の Robotics Invention System (RIS) は、たぶん、一番合理的な値段で入手できるロボット工学キットです。 しかし、標準ソフトウェアは (驚くことではありませんが) MS Windows 上のものです。ここであきらめてはいけません - Mindstorm シリーズ を Linux から使うための方法があります。この Mini-HOWTO は、そ うした方法について簡単に紹介するとともに、より詳しい情報をどこ で入手できるかについてまとめたものです。
はじめに かっこいい Lego の Mindstorm シリーズのキットを見かけた時、横に貼っ てある大きな "Windows 必須" のステッカーにがっかりさせられたとして も、あきらめることはありません - まだ希望があります。GNU/Linux で 動く C, Perl, Java, Forth の言語それぞれに RCX をプログラムするソ フトウェアが存在していて、どれも入手可能です。この文書は、これらの すべてを解説しようとするものではありません。むしろ、そうした Linux 上での様々な選択肢について、それら各々の概要と情報源とを提供しよう とするものです。したがって、この文書は、ひとつの出発点、すなわち Mindstorm シリーズのキット購入を考えている Linux ユーザや、既に Mindstorm を持っていて Linux への移行を考えているのだけれど Linux 上でも手持ちの高価なおもちゃで遊ぶことができるかどうか疑問を持って いる人たちの、役に立つものです。 次の点は、特に注意してください。私は、Mindstorms のオンラインコ ミュニティの動きをよく知るよう努めてはいますが、すべてを理解して いるわけではないので、この文書のリストにはきっと抜けている事柄が あるかと思います。Linux から Mindstorm を動かす他の方法を御存知 でしたら、luge@users.sourceforge.net の著者まで知らせてください。 その方法をこの文書に追加して、Mindstorms を購入して GNU/Linux コ ンピュータ上で使おうと考えている他の人たちとそれを共有できるよう にします。 謝辞 私は、私たち皆のためにプログラムを書き、この文書の初期のバージョ ンにザッと目を通してくれた、プログラムの作者に感謝したい。 さらに、書籍 Extreme Mindstorms を一緒に書かな いかと誘ってくれた Dave Baum にも感謝します。この本の執筆にあ たって、私は多くの時間を Mindstorm に割くことになりましたが、 それに費やした時間は、そうした機会に恵まれなければ割くことはな かったものであり、この HOWTO を書こうと思ったのもそうした時間 が取れたからでした。RCX の power programming の 探求に興味があるなら、わたしはこの本を強くお薦めします。他にも いくつか良い本 (特に O'Reilly 本) が出版されてはいますが、この 本は (他の本と比べて) かなり新しい情報に基づいていて、さらによ り重要な点として、記載されているほとんどすべてのプログラムコー ドが (私の知る限り) Linux 上で動作します。自分の本の宣伝をする のはおこがましいことであるのは分かっていますが、私はこの本をと ても誇りにしているのです :) ここ で、この本を購入できます。 また、Steve Baker と Matthew Miller と Lugnet の多くの方々には、 この文書の初期バージョンからたくさんの役立つ提案をいただきまし た。彼らの見解は、文書の全体に渡り、たくさんの場所にあり、この文 書は、そのおかげで、成り立っています :) 最後に、この文書と直接に関係はしませんが、以前は Duke University に、現在は AT&T に籍を置く Michael Littman、彼はこの夏、実際 に私と LEGO で遊んでくれました。彼が私に与えてくれた機会無くして、 Mindstorm のオンラインコミュニティに熱中し精通した、今の私は無かっ たでしょう。 免責 The LEGO Company (http://www.lego.com/) is very, very protective of their trademarks. This document is not in any way authorized by or associated with The LEGO Company, nor do I as the author claim to have any relationship with The LEGO Company. To see more about their policy on legal usage of their trademark, check out http://www.lego.com/info/fair.asp, particularly the part (about halfway down) titled "How LEGO(r) Enthusiasts May Refer to LEGO Products on The Internet." I have attempted to abide by those guidelines faithfully; like everything else in this document, though, if you spot a violation of the guidelines, please let me know by writing me.
参考訳: LEGO 社 (http://www.lego.com/) は、 とても、とても積極的に自社の商標を保護しています。この文書は、 決して、LEGO 社の公認もしくは関連するものではなく、そしてまた、 私が著者として、LEGO 社に関係するいかなる権利を持つものでもあ りません。LEGO 社の商標の用法の法律上のポリシーについて、もっ と知りたいなら、http://www.lego.com/info/fair.asp の、特に (真中の下 の方にある) タイトル How LEGO(r) Enthusiasts May Refer to LEGO Products on The Internet の部分を確認してくだ さい。この文書全般において、これらの指針に正確に従ったつもりで すが、指針に違反する箇所があれば、著者 まで、知らせ てください。
Copyright This document is distributed under the LDP Copyright. You can find a copy of it here.
参考訳: この文書は、LDP Copyright の下で、配布されます。ここ で参照で きます。
Mindstorm のアーキテクチャ 基本ハードウェア ご存知ない方のために書きますが、Lego の Mindstorm のキットは、 ロボット工学のキットで、Lego グループから約 200 US ドルで発売 されています。キットの中身は、Lego のたくさんのブロックと,RCX というもの (CPU と LCD といくつかのコネクタが付いた大きなブロッ ク) と、二つのモータと、(外界との交信用の) 光センサと二つのタッ チセンサです。 RCX キットの現在のリリースは、バージョン 1.5 で、2001 年の春、 RCX 2.0 に置き換わる予定です。今のところ、この文書内で RCX と言った時は、RCX 1.x を意味 します。1.0 と 1.5 の違いは、些細ですが、1.5 から 2.0 への変更 はかなり大きなものです - 厳密な変更の範囲は、まだ、わかりません。 もっとハードウェアの詳細を学びたいなら (とはいえ、それらは RCX のプログラムの一語一語が何を意味しているのかを見るために、逐語 的にディスアセンブルしている人たちからの報告なので、読むのがイ ヤになるくらい詳しかったりするのですが)、二つの重要なウェブサ イトがあります - Russell Nelson's Lego Mindstorms InternalsKekoa Proudfoot's RCX Internals を訪れてください。 標準の RCX プログラミング Linux から Mindstorm を動作させるためのいろいろな方法を理解する ための手がかりは、はじめに、Mindstorm キットが MS Windows で正常 に動作している時の仕組を理解することです。 簡単に言うと、Lego から提供される MS Windows 上のソフトウェアツー ルを使えば、誰でも (あるいはたぶん、12-14 才くらいの子供が) ちょ うど積木を組み立てるような感覚で、グラフィックを操作して Mindstorm 用のプログラムを作成できます。この方法でプログラ ムが 組み立て られると、そのソフトウェアは、プ ログラムを byte-code にコンパイルします。次に、この byte-code は、ロボットにダウンロードされ、そしてそこで、RCX のファームウェ アが byte-code を処理し、byte-code の命令に基づきマシンを制御 します。byte-code の構文解析に加え、RCX ファームウェアは、OS に似た多くの機能を持っています - ハードウェアの制御、スレッド、 そして、特にロボットとの通信に使われる IR ポートの制御の機能で す。IR ポートからの (完全なプログラムに比して) 特別なコマンド、 もしくは、特別なリモート制御コマンドを受付ける能力もあり、それ らのコマンドに基づきロボットを動かします。 標準のファームウェアは、現在 (RIS バージョン 1.5 を購入したとし ても) バージョン 1.0 です。これは、とても深刻な制限があります - たとえば、それぞれの変数は、RAM ではなく、レジスタに格納されるの で、たった 32 の変数しか持てません。しかし、それでもかなりかっこ いいことができ、ファームウェアのバージョン 2.0 (このベータバー ジョンが LEGO から入手できます。) では、これらの制限がかなり緩和 され、1.x ハードウェアに対する下位互換性も保たれるはずです。 Linux ツールが適合するところ Linux 上での Mindstorms プログラムは、前の章で述べたソフトウェ アのセットの一部をそれぞれ独自のソフトウェアに置き換えるかたち で機能するようになっています。あるプログラムは、標準の Lego ファームウェアを独自の OS ライクなシステムや言語インタープリタ へと完全に置き換えてしまいます。それ以外のプログラムは、標準の Lego byte-code に一致した byte-code を生成するので、そうした byte-code さえ生成されれば、その解釈(インタープリト)には標準の ファームウェアを使います。最後に、ロボット上で実際に何かを実行 するためのものを与えることなく、ホスト PC からロボットを制御す るためのリモート制御用コードだけを生成するプログラムもあります。 そうしたプログラムの場合も、標準の Lego ファームウェアを使います。 Linux ホスト用ハードウェアの必須条件 ツールの大部分はコマンド形式なので、ハードウェアの必須条件は最 低限で、基本的にどんな Linux システムでも動作するはずです。 例外が一つだけあって、シリアルポートはどうしても必要です (最新 のレガシーフリーなマシンには無いかもしれません)。RCX との通信 は、マシンのシリアルポートにつながった IR tower を経由します。 つまり、シリアルポートがないマシンではアダプタを買わないかぎり RCX を使えません。さらに、IRQ やシリアルポートが競合してきちん と動かないことになるかもしれません。これは、特に、モデムが /dev/ttyS0 を使っている場合です。対処は3つあります - 一つは、 2番目のシリアルポートを IR tower 用に使用します。ほとんどの場 合、これで動作するはずです。これでダメなら、モデムと RCX の同 時使用を止めます。これが受け入れられないなら、次に、 (extended dumb serial driver options の下の) support for sharing serial interrupts のカーネ ルコンパイルオプションを調べ、それをオンにし、再コンパイルして ください。 Mac は標準的なシリアルポートが付いていないので、LinuxPPC ユーザ はアダプタを入手し、ツールを使うためにいくつかの変更をしなけれ ばならないかもしれません。NQC の作者で Mac ユーザである Dave Baum は、このための方法を 説明で書いています。 CyberMaster と Scout RIS に加え、Lego は他に2つのロボット工学システムを作りました - (ヨーロッパだけで入手可能な) CyberMaster と Scout です。残念 ながら、これらが他のツールと動作するのは、一つ ( で述べる NQC) だけのようです。大ざっぱな言い方 をすれば、Scout の購入を考えていて、あまり小遣いに困っていなけれ ば、思い切って RCX を購入しなさい - 追加で払った以上の価値があり ます。 Mindstorm の Vision Command Vision Command kit は、新しく追加された Mindstorm シ リーズの一つで、USB カメラを使って何かかっこいいことができます。 残念ながら、USB カメラサポート (特に USB Quickcam サポート) は、 まだ、Linux 下では不安定で、このためこの製品は Linux 下ではまだ サポートされません。それをハックしたいなら、このページを見てください。ここには、よく似た Quickcam 向けのドライバもあります。 MS Windows CD についての重要な注意 下記のたくさんのプログラムが公式の Lego ファームウェアを使って いるので、MS Windows CD が必要かもしれません。MS Windows をブー トする必要はありません - 時間を途切れさせずにすみますね :) し かし、(とりわけ NQC か RCX.pm を実行するなら) 電池切れの時に、 ファームウェアを得るために CD をマウントする必要があるかもしれま せん。なるべくマウントしたくないなら、CD 上のファイル firm0309.lgo を探し、Linux パーティション上 の安全な場所にコピーしてください。 LegOS ホームページ http://legOS.sourceforge.net 作者 Markus L. Noga 種別 ファームウェアの置きかえ 言語 C, C++ プラットフォーム x86 GNU/Linux 上で開発され、PPC Linux 上でテストされました。MS Windows 上の Cygwin と DJGPP にも移植されています。Solaris と Irix への移植は試みられていますが、一部のツールしか動いていませ ん。 概要 LegOS は、プリエンティブなマルチタスクの POSIX な RIS 用 OS で す。プログラムは、標準の C か C++ で書かれ、(クロスコンパイラ として構築された) gcc を用い PC 上でコンパイルされ、次に RCX にダウンロードされ、そして、実行されます。基本的に、C か C++ で、そして LegOS でどんなことも (もちろん 32k のRAM に) 書くこ とができます。面白いことに、random(), 浮動小数点エミュレーショ ン、POSIX セマフォでのスレッド、複数のプログラムの格納能力の機 能があります。Linux および MS Windows の PC から、データの送受 信を行う機能もあります。この力 (legOS は、ほとんど確実に、RCX の代替ソフトウェアの中で一番強力です。) は、わずかな手間で手に 入ります - gcc を使うからです。legOS は、様々な Linux の代替の 中で設定が一番複雑なシステムで、大量のツールのダウンロードが必 要です。 Lego::RCX.pm ホームページ http://members.home.com/quillan/lego/rcx.pm.html 作者 John C. Quillan 種別 リモート制御ライブラリ 言語 Perl プラットフォーム GNU/Linux, MS Windows, Solaris 概要 Lego::RCX.pm は、簡単に言えば、IR tower を経た RCX のリモー ト制御用の perl ライブラリです。IR tower が受け取り、標準のファー ムウェアが解釈し、それに従って行動させることができるコマンドを送 ります。すでに perl がインストールされていれば (インストールされ てないのは誰?)、これは非常に早く簡単にロボットを制御する方法で す。インストールは必要ありません - 単に、ファイルを正しいライブ ラリのディレクトリにコピーし、perl スクリプトの先頭に use RCX.pm を追加します。まだ、使ったことがないので、自信が ありませんが、CGI スクリプトでロボットと会話するための、おかし いほど簡単な方法となるでしょう。 Not Quite C (NQC) ホームページ http://www.enteract.com/~dbaum/nqc/index.html mattdm.org にある NQC の Linux ページ - NQC のRPM のホスト 作者 Dave Baum 種別 ネイティブな byte-code コンパイラ 言語 C に似た言語で (もちろん) 本当の C ではない を 意味する Not Quite C (NQC) と呼んでいます。最低限のコーディン グの経験があれば、誰でも、とても簡単に学べるはずです。 プラットフォーム GNU/Linux, MS Windows, Macintosh 概要 NQC は C に似た構文で書かれたプログラムを理解する byte-code コ ンパイラで、標準の Lego ファームウェアが理解できる byte-code にプログラムを (PC 上で) コンパイルします。このアプローチは、 長所と短所があります - 例えば、標準のファームウェアは 32 個の 変数しか扱えないので、NQC は同様に制限されます。しかし、これら の制限の中でもおどろくほどたくさんのことができます。設定は、とて も簡単で、プロジェクトのすべては、とても良く文書化されています。 また、たぶん一番、一般的な代替プログラミングシステムなので、 NQC を使い始めるなら、たくさんの人々が喜んで、手伝ってくれる状 態にあります。 すでに述べたように、NQC は、Linux 下で Cybermaster と Scout の 製品をサポートする (現状では) 唯一の選択肢です。さらに、その ベータバージョンは、ファームウェアのバージョン 2.0 で動作し、 代替プログラミングシステムの中で、新しいファームウェアの追加さ れた機能をサポートする最初のものです。 pbForth ホームページ http://www.hempeldesigngroup.com/lego/pbFORTH/ 作者 Ralph Hempel 種別 ファームウェアの置きかえ 言語 Forth、一般的なスクリプトに似た言語で、普通、組み込みシステム 用に使われます。 プラットフォーム GNU/Linux, MS Windows 概要 pbForth は、簡単に言えば、完全な Forth インタープリタで、これは、 標準のファームウェアを置きかえます。これを入れれば、ロボットに Forth スクリプトをダウンロードし、次に、インタープリタはスクリプ トを解釈し、それを実行します。それには、変数の数の制限はなく、会 話型デバッグに似た機能を提供するいくつかのライブラリがあります。 これは、たぶん、ツール設定の簡単さからはもっとも遠いものです - すべてのバイナリをダウンロードし、次にプログラムコードを書き、そ れをダウンロードしなければなりません。他のツール、コンパイラ、イ ンタプリタは、PC 上にありません。とは言っても、スクリプトをダウ ンロードし、PC との会話を簡単にするクロスプラットフォームな TCL GUI は入手できます。 TinyVM と leJOS ホームページ http://tinyvm.sourceforge.net http://sourceforge.net/projects/leJOS/ 作者 Jose Solorzano 種別 ファームウェアの置きかえ 言語 Java プラットフォーム GNU/Linux, Win32 概要 名前が意味するように、TinyVM は本当に小さな Java Virtual Machine で、RCX にダウンロードされ、標準のファームウェアを置き かえます。そして、Java プログラムを書き、PC 上で byte コンパイ ルし、RCX にダウンロードします。TinyVM プログラムは、いくつか の標準的な Java ライブラリを使うことができ、Mindstorm 上のセンサ、 モータなどの制御用ライブラリが提供されます。TinyVM は、すでに、 機能している Java コンパイラが必要です。 leJOS は同じ作者による似たようなプロジェクトです (実際に、コー ドの流用です)。かなりメモリ消費は大きくなります (TinyVM よりサイ ズで約 5k ほど) が、浮動小数点と文字列定数のサポートを含む、大幅 な機能の追加がされています。他の将来の計画は、ガーベージコレクショ ンと複数プログラムのロードがあります。 リモート Java API ホームページ RCX Java API RCXPort Java Interface 種別 リモート制御ライブラリ 言語 Java プラットフォーム GNU/Linux(?) 概要 この両方のライブラリは、(理論上) クロスプラットフォームな Java ライブラリで、本来のファームウェアを用いた RCX をリモートで制 御するために使うことができる信号を送ります。Linux でテストされ たこともなく、さらに、Linux での開発も行われていませんが、ソース は誰かのために役立つかもしれないので、この文書に含めました。 TCL RCX ホームページ http://www.autobahn.org/~peterp/rcx/ http://www.demailly.com/tcl/rcx/ 作者 Laurent Demailly と Peter Pletcher 種別 ネイティブな byte-code コンパイラとリモート制御ライブラリ 言語 TCL プラットフォーム GNU/Linux, Win32 概要 TCL RCX コンパイラには、2つの主要な機能があります - TCL スク リプトを RCX byte-code にコンパイルすることも、スクリプトと会話型 TCL シェルのどちらからロボットをリモート制御することもできます。 TCL が選択した言語なら、これは最良のソリューションです。入手可 能なバージョンは2つあります - (demailly.com の) Laurent のそ れは、2つのオリジナルがあるようです。しかし、1998 年から更新 されていないようです。 Pylnp ホームページ http://www.hare.demon.co.uk/lego/pylnp.html 作者 Les Smithson 種別 リモート制御ライブラリ 言語 Python プラットフォーム GNU/Linux 概要 Pylnp は、独特な作りのリモート制御ライブラリで、その理由は Python を使うだけでなく、標準のファームウェアと話すことの代わ りに legOS と話します。この理由は、他のリモート制御ライブラリ ではできない、非常に多くのカスタマイズ性を提供するためで、ロボッ トの legOS 側のカスタム機能の呼び出しが使用されています。この 力の不利な面は、もちろん、この優れた機能性にアクセスするために、 legOS を学び、C のプログラムを書かなければならないことです。 他の Linux ツール この章のプログラムは、厳密に言えば、Mindstorm に関連していません が、Linux/Lego ファンは興味を持つでしょう。 LeoCAD LeoCAD は、(名前が意味するように) Lego モデルの組み立てと完成 予想図のための CAD プログラムです。使用可能な GTK の移植があり、 http://leocad.gerf.org/linux.htm で見つけられます。完 全な機能性を持っていないと、作者はほのめかしていますので、これ は誰かにとって楽しいプロジェクトとなるかもしれません。 POVRAY Lego ピースのセットは、一般的な POVRAY 3-D レンダリングプログラ ムを使い、作成されています。http://www.kawo1.rwth-aachen.de/~witte/projekte/lego/lego.html でそのピースが、http://www.povray.org で POVRAY が探せます。 他の情報源 あなたは、今、この文書を読み終えましたが、Mindstorm をさらに探求 するためのウェブ上の場所が他にいくつかあります。これらの大部分は Linux 特有ではありませんが、そのほとんどにはディスカッションフォー ラムがあるので、たぶん、少なくともいく人かの Linux ユーザがいます。 あなたがもっと探求するために、私は十分に刺激を与えたと、期待して います。楽しみましょう! LUGNET LEGO User Group NETwork のサイト http://www.lugnet.com/ は、 長い間、オンラインの Lego に関するセンターです。たくさんの参加 者と素晴らしいニュースグループがあります。特に、ロボット工学フォーラムは、たいへん知識の豊富な読者と投 稿者のいる熱心なグループです。さらに、前述したいくつかの方法は、 この階層の中の robotics/rcx/ ニュースグループの成果です。 公式の Mindstorm のサイト 公式の Mindstorm のサイトは http://www.legomindstorms.com/ で、たくさん素晴らしい アイデアがあり、さらに、NQC ソースを公開配布しています。しかし、 Linux の十分な情報は期待しないでください。 ハードウェアのサイト これらもすでに述べましたが、あまり気にしないでください。これらは、 Lego 技術者ではない人たち向けに、RCX ハードウェアをもっとも総合 的に、詳細に渡って考察しています。オリジナルサイトは http://www.crynwr.com/lego-robotics/ で、セカンドサイ トは http://graphics.stanford.edu/~kekoa/rcx です。 Historic Lego Bots and Construction Guide ご存知かもしれませんが、RIS は部分的に、MIT の見事な成果です。 MIT の有名な創作者 Lego class は、ホームページを開設しています。ここには、クラス (真剣 に素晴らしい資料があります!) や、ロボット構築ガイド (Robot Builder's Guide) へのリンクがあります。ロボット構築ガイドには、 初心者がプログラムを動作させ、実際にロボットを構築することにつ いての、素晴らしい提案がたくさんあります。 日本語訳について disk!japanese 日本語訳は Linux Japanese FAQ Project が行いました。 翻訳に関するご意見は JF プロジェクト <JF@linux.or.jp> 宛に連絡 してください。 本書で紹介されているリンクは、日本語サイトではありません。訳者は 最近 Lego を始めたばかりなので、日本における Lego オンラインコミュ ニティの状況を知りません。各リンクにおいて、日本ではここだよとい うサイトがありましたら、訳者 <hng@ps.ksky.ne.jp> 宛にご連 絡ください。本文書に追加したいと思っています。 1.1j 翻訳: 野本 浩一 hng@ps.ksky.ne.jp 校正: 二之宮 祐樹さん gm@debian.or.jp 武井 伸光さん takei@webmasters.gr.jp 溝江 智徳さん mizoe@yk.rim.or.jp 佐野 武俊さん kgh12351@nifty.ne.jp Seiji Kanekoさん skaneko@a2.mbn.or.jp 神尾 聡一郎さん ataca@fsinet.or.jp 中谷 千絵さん jeanne@mbox.kyoto-inet.or.jp 千旦 裕司さん ysenda@pop01.odn.ne.jp Satoshi I.Nozawaさん snozawa@env.sci.ibaraki.ac.jp