RCX1.0 logo
Update History
目指すモノ
RCX hack Info
my RCX
追加parts
links
 

LEGO®   MindStorms Rising

FreeBSD, Linux など 非Windows環境でも プログラムが作成可能となることを目指してるものです。 IR tower とつなぐため Serial が使える OS で、 GNU tools がコンパイルできる環境なら、 簡単に応用できると思います。
この情報は lego-robotics Mailing List および web page から 得た情報を元に試したものをまとめたものです。
FreeBSD 2.2.7-RELEASE上でテストしてます。 各ツールのバージョンは、以下の例で挙げたモノ以外でも 動く可能性はありますが未確認です。



Firmware のダウンロードの方法

ここで ダウンロードとは、RCXへ送りこむことを指します。 LEGO謹製の firmware Firm0309.lgo のダウンロードを例にします。
  1. kekoaさんのweb から send.c firmdl.c を入手
    (firmdl.c は、ほぼ同じものが legOS-0.1.2.tgz の中に入ってます。)
  2. それぞれ
    % gcc -o send send.c
    % gcc -o firmdl firmdl.c
    でコンパイル
    FreeBSD で COM1に相当するポートを使うため、 ソース中の DEFAULTTTY を /dev/cuaa0 に設定。 環境変数 RCXTTY をみてるので、ソースコードを変更せずに、
    % setenv RCXTTY /dev/cuaa0   (csh系の場合)
    としてもよい。
  3. どこか適当なところにインストール
    (僕は /usr/local/lego/bin にインストールし、path を通しました)

  4. % chmod o+rw /dev/cuaa0
    とし、一般ユーザー権限で serial port を読み書きできるようにした。 場合によってはセキュリティ上問題になるかもしれないので注意
  5. Windows用のソフトがインストールされたディレクトリのどこかに Firm0309.lgo というファイルがあるはずなので、 アクセス可能なところにコピーする。 (これが LEGO謹製の firmware である。)
  6. serialポートに IR tower を接続。
  7. RCXの電源を入れる

  8. % send 10
    と入力して
    0000: ef
    と返ってくれば O.K. (ただし、firmwareが消去された初期状態では、反応なしで正常です) send の使い方等の詳細は、 ココ を参照のこと

  9. % firmdl Firm0309.lgo
    と入力して RCX がbeep音を発した後、カウントアップしていき、 しばらく待つと beep音がしてダウンロード完了。

Firm0309.lgo のダウンロードは、Windows環境でもできます。 手順は
  1. Mindstorms付属 Windowsソフト Robotics invention system を起動
  2. Getting started を選択
  3. Set Up Options を選択
  4. Download RCX firmware の選択
注意
お手製 firmware をダウンロードしたり、 RCX上でプログラムが暴走するなどして、 send 10(ping) や firmdl に反応しなくなった場合、 電池を抜くことで firmwareを消し初期状態(工場出荷状態)に 戻すことが可能です。 これにより、firmdl が実行可能となります。
単に電池を抜くだけではダメで、電池を抜いてから on/offボタンを 一度押し完全放電しないとメモリに残っているので注意。

tclRCX byte compiler でプログラミング

標準の firmware LEGO謹製 Firm0309.lgo環境で、 Windows用付属ソフトを使わずに RCXのプログラミングを する方法です。
  1. Tcl 8.x がインストールされていることを確認
    namespace を使っているので、Tcl 7.x ではダメだと思われます。 なければ pkg_add もしくは ports を使ってインストール (FreeBSDの場合)
    Tcl/Tk が使えるならば、その他の Linux, Windows といったOSでも 動作可能なはずです。
  2. ココ から、メインのtclスクリプト rcx.tcl と、サンプルプログラム torbot.tcl を入手。
    ついでにドキュメント rcx-docs.html も保存しておくとよい。
  3. tclsh を起動する。
    > tclsh8.1
  4. byte code compiler を読み込む
    % source rcx.tcl
  5. 通信デバイスの open
    % connect /dev/cuaa0
    connect の後に、IR towerと通信するのに使用する serial portのデバイス名を指定できます。 省略した場合、
    UNIX系:   /dev/ttyS1   (linux用)
    Windows:  COM1
    がデフォルトになります。 よって FreeBSD では、/dev/cuaa? を指定してやる必要があります。 (もしくは、デフォルトを書き換える)
  6. ping
    % ping
    % OK
    が返ってくれば大丈夫。
    注意1 IR tower の接続、RCXの電源ON をお忘れなく
    注意2 あらかじめ Firm0309.lgo を RCXにダウンロードしておくこと
  7. サンプルコードの読み込み
    % source torbot.tcl
  8. 読み込んだ RCXコードを転送
    % beam 1
    これで、task 0 ,task 1が RCXに「転送」されます。
    (ここでのtask とは、いわゆる thread みたいなものかと)
  9. RCXの 「Run」ボタン(緑色)を押すと実行が始まります。
各コマンドや、サンプルコードの詳細については、 rcx-docs.html を参照して下さい。

legOS で firmwareを作る

    クロスコンパイル環境の構築
  1. クロスコンパイル環境用 binutils のコンパイル (as や ld などの構築)
    1. binutils-2.9.1.tar.gz を入手、展開
    2. ./configure i386-freebsd --target=h8300-hitachi-hms --prefix=/usr/local/lego
      注1) FreeBSD-2.2.7-RELEASE では オプション i386-freebsd が必要。default ではOS タイプを正しく認識しないため)
      注2) --prefix オプションは趣味の問題
    3. make
    4. make install
      (いうまでもなく root権限で)
    5. 独自のディレクトリにインストールした場合 PATH を設定 上記の例では /usr/local/lego/bin/ に h8300-hitachi-hms-* としてコマンドがインストールされる)
  2. クロスコンパイル環境用 gcc のコンパイル
    1. gcc-2.8.1.tar.gz を入手、展開
    2. ./configure i386-freebsd --target=h8300-hitachi-hms --prefix=/usr/local/lego
      オプションは binutils と同じ
    3. make LANGUAGES=c
      注1) FreeBSDでは、コンパイルの途中で /usr/include 以下の include ファイルが みつからないと error でコンパイルが止まるので、 -I/usr/include をつけてごまかす。 configure の問題であると思われる。
    4. make LANGUAGES=c install
  3. legOS のコンパイル
    1. legOS-0.1.2.tgz を入手、展開
      注) バージョンが上がっている可能性があります。
    2. gmake (GNU make)で make (Makefile が gmake でないと受け付けません)
    3. demo ディレクトリに simple-rover.srec ができているはずなので、
      firmdl simple-rover.srec
      としてダウンロードする。
      Firm0309.lgo があれば、もとに戻せるので心配なく。
      ただし、RCXが壊れても知りません。 At own risk で。
補足 legOS の demo プログラムは、firmware の自己消去機能が 組み込まれました。「On-Off ボタン」 + 「Prgmボタン」を 押すと firmwareが消え、電池を抜いた時と同じ状態になります。 Firm0309.lgo に戻したり、新しく作った firmware に書き換える際、 いちいち電池を抜く必要はありません。

クロスデバッガの使用方法

  1. クロスデバッグ用 gdb のコンパイル
    1. gdb-4.17.tar.gz を入手、展開
    2. このパッチ をあてる
      注1) Solaris2 では このパッチ も あてるといいらしい(未確認)
    3. ./configure i386-freebsd --target=h8300-hitachi-hms --prefix=/usr/local/lego
      オプションは binutils と同じ
    4. make
    5. make install
  • テスト中


Firmwareの逆アセンブル

  1. テスト中



    E-mail: aizu@jaist.ac.jp
    Last modified: Tue Dec 1 23:15:03 MST 1998