このブログについて

2006年10月5日発売予定の「教育用レゴ マインドストーム NXT」を発売前から体験しちゃうブログ。

書いてる人: ooba

Powered by TypePad

ついに leJOS が NXT に対応!

LEGO MINDSTORMS の開発環境のうち、私が好きなモノの一つである「leJOS」が、ついに NXT に対応しました。

leJOS

leJOS NXJ is ready for download. leJOS NXJ is a full firmware replacement and works for Windows and Linux. This is a technology preview of things to come. At the moment there is no Bluetooth, I2C (Ultrasonic sensor), or sound support and we do not have a basic menu system. You can write Java programs and upload them to the NXT brick via USB. (see readme for more information)

まだαバージョンのため Bluetooth や I2C 通信などには対応していませんが、オリジナルファームウェアを使った基本的な動きはできるようです。昨年末には NQC の後継である「NBC/NXC」もリリースされ、以前よく使っていた環境が整いつつあります。なかなか面白くなってきました。

早速あとで試してみたいと思います。

NXT のファームウェアのソースが公開されました

レゴマインドストーム NXT は発表当初からオープンソースにすることを公言していましたが、当分公開されないだろうと思っていたファームウェアのソースがついに公開されました!

LEGO.com MINDSTORMS Overview.

You can now start developing your own LEGO MINDSTORMS NXT firmware version. By acception the "LEGO Open Source License Agreement" below, you will be able to look over the shoulders of our firmware developers. This will enable you to change the functionality from the very lowest hardware abstration level to the user ineration level within the LEGO MINDSTORMS NXT. The Open Source files include all the source files needed for the ARM7 ATMEL microcontroller and the 8-bit AVR ATMEL microcontroller.

ちょっと中身を見てみましたが、アイコンやフォント、起動画像のリソース画像が入っていたりして、プログラマじゃなくて楽しめる内容になっています。もちろん組み込み系プログラマやマイコン好きな人には、たまらない情報であることは間違いないです。IAR Embedded Workbenchでビルドできる模様。まずは画像を差し替えたファームウェアを作って遊ぼうかしら。わくわく。

この公開をきっかけに brickOS や leJOS などの開発が加速するといいですね。

ついでに最新ファームウェア v1.04 も公開されているので、アップデートしておきましょう。今回公開されたソースが最新ファームウェアのものかはわかりません。

NXT のオープンソース化の状況

マインドストーム NXT 発表当時より、LEGO 社は「オープンソース化」を公言していました。実際、NXT の公式サイトでは8月上旬にはいくつかの仕様書が公開されていました。

LEGO.com MINDSTORMS Overview

現在公開されているのは、実行ファイル形式の仕様、Bluetooth 通信の仕様、回路図を含むハードウェア仕様などです。NXT とコミュニケーションするためのドライバの SDK もあります。「オープンソース」というので LEGO 社謹製の標準ファームウェアのソースが公開されるのだと思っていたのですが、それはまだないようです。

これらの情報や独自で解析した結果などを元に、すでにサードバーティからツールやプログラミング環境、拡張パーツなどがリリースされています。上記ページにいくつかリンクがありますのでたどってみて下さい。リンクにはないですが、プログラミング環境として「Robot C」や「NXT# - Mindstorms for .NET」なんてのもあります。

個人的には、標準ファームウェア上で動くプログラムをアセンブリ言語ライクにプログラミングできる「NBC - NeXT Byte Codes」と、コンパスセンサーやモーター並列制御ユニットなどの拡張パーツをリリースしている「Mindsensors.com」がオススメです。同時に、RCX 時代に愛用していた NQCleJOS が早く NXT 対応しないかと心待ちにしています。

標準ファームウェアのソースコードが公開されたら、サードバーティによるファームウェア&開発環境の開発が一気に加速すると思うのですが、今後公開されるのかどうかはよくわかっていません。上記 SDK もヘッダーファイルとライブラリファイルだけでソースは含まれていませんしねぇ。気長に待ちたいと思います。

モーターを動かしてみる プログラム編

さてプログラム編です。今回のプログラムも簡単なモノですが、「ロボットを動かしてみる プログラム編」で作ったモノと違って、プログラミングにおいて大事な要素の一つである「ループ」を活用しています。

まずはプログラム全体を見てみましょう。

Clock_program

「左回転で30度づつ12回動かし、その後右回転で90度づつ4回動かす」という動作からもっとたくさんのブロックが並んでいるのを想像した人もいると思いますが、実際にはたったこれだけで組めてしまいます。並んでいるブロックは4つだけですが、2個づつ矢印名のようなグラフィックで囲われていますね。これが「ループブロック」です。

Clock_loop

ループブロックはその名の通り「ブロックの中を繰り返す」ブロックです。同じ動作を何回も繰り返したいときに使います。今回の場合は「左回転で30度」を12回繰り返したり「右回転で90度」を4回繰り返すために使っています。ループを使わないと同じ動作を回数分組み合わせなくてはいけないため非常に長いプログラムになってしまいますが、このループブロックのおかげでこんなに短く書くことができます。繰り返したい内容を変えるときも、こうしておけば一箇所変えるだけで済むのでラクチンです。

今回はこのループブロックを回数指定で使っていますが、何秒間繰り返す、センサーが反応するまで繰り返す、ボタンが押されるまで繰り返す、といった指定もできるようになっています。また、永遠と繰り返すことも可能です。このようにループブロックは、ある条件を満たすまで同じ処理を繰り返すブロックです。地味なようで超重要なのでぜひ使いこなせるようになってください。

さて、肝心の繰り返す中身を見てみましょう。最初にあるのが「モーターブロック」です。

Clock_motor

このブロックには「ポートAのモーターを50%の力で30度だけ正転させる」という設定がしてあります。加えて「回転が終わるまで待つ」という設定もしてあります。このブロックが1回実行されると、今回の場合は画面で見て左回転で30度だけ棒が動くことになります。この角度指定を何回転と指定したり、何秒と指定したり、もちろん永遠に回しっぱなしという設定もできます。モーターの動きを止まる場合もこのブロックを使います。このようにモーターブロックは、指定した条件だけモーターを動かすブロックです。これまでのモーターには力と回転方向しか指定できなかったのに、ずいぶんと便利になったものです。

モーターが30度回ったあとに実行されるのが「ウェイトブロック」です。

Clock_wait

このブロックには「1秒間待つ」という設定がしてあります。モーターブロックの実行後は30度動いた状態で止まっているので、止まった状態で1秒何も実行しないことになります。これがムービーの「カクッ、カクッ」という動きになっているわけです。ループブロックと同じように、センサーが反応するまで待つ、ボタンが押されるまで待つ、といった指定もできるようになっています。このようにウェイトブロックは、指定した条件になるまで待つ=プログラムの進行を一時停止するブロックです。

そしてこのウェイトブロックの処理が終わる (1秒間待つ) と、ループブロックによってプログラムの進行が最初のモーターブロックに戻ります。これを12回繰り返してようやくループブロックから次のブロックに行くことができるのです。 続くループブロックも同じように逆回転を4回繰り返すように設定してあるので、ムービーのような動きになるわけです。


NXT のプログラムをマスターするにはまだまだ覚えなきゃいけないことがたくさんありますが、基本的にプログラムはこれまで出てきたような単機能のプログラムブロックの組み合わせで成り立っています。応用力が大事です。プログラムブロックの役割をひとつ覚えるごとにできることが広がっていきますので、少しづつマスターしていきましょう。

次回のプログラム編では、センサーによる入力とその値による分岐を説明したいと思います。

ロボットを動かしてみる プログラム編

ロボットを動かしてみるというエントリーで「簡単なプログラム」として、ロボットの動きを記録・再生するプログラムを紹介しました。が、プログラムをまったくやったことがない人にとっては全然簡単ではないかも知れません。そこで NXT ソフトウェアでどうやってプログラミングするかを、このプログラムを題材に説明したいと思います。

NXT ソフトウェアでは、このようなフィールドにブロックを並べていくことでプログラムを組むことができます。NXT マークをしているのがプログラムの起点です。プログラムはこの起点から右に順番に実行されていきます。

Program_base

左のパレットに並んでいるブロックを、このようにドラッグアンドドロップで並べていきます (クリックすると GIF アニメが開きます)。ブロックを持っていくと自動的に連結ビームが伸びるようになっています。

Program_block_add

すでに並んでいるブロックの間に挿入することもできます (クリックすると GIF アニメが開きます)。挿入時も自動的に連結ビームの長さが変化します。

Program_block_insert

もちろんコピーや貼付け、複数のブロックを選択して操作することもできます。また、パレットにはモーターを動かしたりセンサー値を読み取ったりといった基本的なブロックはもちろんのこと、条件分岐やループ処理、変数処理、演算処理など、本格的にプログラミングできるだけのブロックがそろっています。プログラミングに慣れている人はテキストで書いたほうが早いと思いますが、初心者でもこうやって気軽にポコポコとプログラミングできるのはなかなかよいです。

ここで、今回のプログラムで使った3つのブロックを紹介してみたいと思います。

続きを読む "ロボットを動かしてみる プログラム編" »

ロボットを動かしてみる

情報ばかり書いていても面白くないので、教育用に使われるホッケーロボットを組み立てて、簡単に動かしてみました。

100_0705 100_0708

顔が超音波センサー、左手がサウンドセンサーになっており、機体の前部に下向きに光センサーが、後部にバンパーとしてタッチセンサーが取り付けられています。モーターは駆動用に左右1つずつと、右手のホッケー回転用に1つ使われています。モーターが非常に大きくなったためか、機体のデザインがモーターにかなり引きずられているのがわかります。

前から見るとなかなか愛くるしい(?)ですが、後ろ姿はケーブルだらけで不気味ですね。NXT では太くてコシのあるケーブルが使われているため、取り回しがなかなかきれいにまとまりません。

NXT ソフトウェアにはこのロボットの性能をフルに活用するチュートリアルが豊富に入っています。が、ここでは簡単なプログラムで動かしてみたいと思います。モーターの動きを記録して再生するプログラムです。NXT ソフトウェアを使うと、以下の画面のような感じで簡単にプログラミングできます。

Rec_and_play_prog

アイコンを見れば大体想像がつくと思いますが、音声再生、動作記録&動作再生、ボタン操作待ち、の3種類のプログラムブロックからできています。こうやってブロックをポコポコ並べていくだけで、フローチャートライクにプログラミングできるようになっています。

このプログラムを USB か Bluetooth でロボットにダウンロードすれば準備完了です。早速動かしてみましょう。下の写真を押すと Quicktime ムービーが再生されます。

Rec_and_play

手で動かした動きをそれなりに再生できているのがわかるでしょうか? また、音声で「Record」とか「Good Job!」としゃべっているのが聞こえますか? こんな簡単なプログラムで自分で作ったロボットを自在に動かせるのが、マインドストーム NXT の魅力のひとつですねー。