SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaでレゴロボットを動かしてみよう!(AD)

Javaでレゴロボットを動かしてみよう! 1-おためし編

Javaによるレゴロボットの制御

  • このエントリーをはてなブックマークに追加

皆さんは、Javaでも組込み機器のソフトウェア開発ができることをご存知でしょうか? Javaを搭載したデジタル機器・家電製品には、コピーやFAXなどの複合機、携帯電話、カーナビなどがあります。本稿では、レゴロボット「教育用レゴ マインドストームRCX」を使って、組込みソフト開発を一緒に体験してみたいと思います。ディスプレイ上ではなく、実物をプログラムで制御する感動をぜひ味わってみてください。

  • このエントリーをはてなブックマークに追加

はじめに

 皆さん、こんにちは! 突然ですが、組込み機器におけるソフトウェア開発(以下、組込みソフト開発)には、どんな開発言語を使用していると思いますか? そうです、一番多いのがC言語です。その他、C++やアセンブリ言語なども使用されています。

 ところで、Javaでも組込みソフトの開発ができることをご存知でしょうか? Javaを搭載したデジタル機器・家電製品には、コピーやFAXなどの複合機、携帯電話、カーナビなどがあります。Javaの開発と言うとWebアプリケーションが多いですが、組込みソフトはどのように開発していくのでしょうか……。

 ここではレゴロボット「教育用レゴ マインドストームRCX」を使って、組込みソフト開発の入り口を一緒に体験してみましょう!

レゴロボットについて

 今回はこのレゴロボットを使用します。

図1 レゴロボット
図1 レゴロボット

 ここがレゴロボットの頭脳にあたる部分で、RCXと言います。

図2 RCX
図2 RCX

 RCXには8ビットのマイコンが内蔵されています。メモリは16KbyteのROMと32KbyteのRAMを搭載していて、実際にユーザープログラムが使用できるのは、11Kbyteです。組込み機器はメモリが少ないです。入力ポートや出力ポートもあり、入力ポートには外部から情報を受け取る光センサーやタッチセンサーなどを接続し、出力ポートにはモーターやランプなどを接続します。

 レゴロボットの制御プログラムは、「LeJOS」というプログラミング環境を使用し、PC上で開発します。コンパイルしてできあがったクラスファイルは、PCに接続しているIRタワーから赤外線通信でRCXに転送します(RCXは前面の黒い部分が赤外線ポートになっています)。組込みソフト開発では、このように開発環境と実行環境が異なる「クロス開発」が一般的です。

図3 赤外線ポートの図
図3 赤外線ポートの図

簡単なプログラムでコンパイルから実行まで体験してみる!

 まずは簡単なプログラムで、一通りの流れを体験してみましょう。

 2秒前進し、2秒後退するプログラムです。

 1:  import josx.platform.rcx.*;  ←(1)
 2:  
 3:  /**
4: * ForwardBack.java
5: *
6: * 2秒前進し、2秒後退する
7: *
8: */
9: 10: public class ForwardBack { 11: public static void main(String[] args) { 12: 13: //前進 14: Motor.A.forward(); ←(2) 15: Motor.C.forward(); 16: 17: try { ←(3) 18: Thread.sleep(2000); 19: } catch(InterruptedException e) { 20: } 21: 22: //後退 23: Motor.A.backward(); ←(4) 24: Motor.C.backward(); 25: 26: try { ←(5) 27: Thread.sleep(2000); 28: } catch(InterruptedException e) { 29: } 30: 31: //止まる 32: Motor.A.stop(); ←(6) 33: Motor.C.stop(); 34: 35: } 36: }
  1. 1行目
  2. LeJOSのクラスライブラリをインポートしています。
     
  3. 14~15行目
  4. Motor.A.forward()で左のタイヤを動かすモーターを順回転させ、Motor.C.forward()で右のタイヤを動かすモーターを順回転させます。結果として前進します。
     
  5. 17~20行目
  6. モーターを回転させたまま、2000ミリ秒処理を待たせます。sleep()は、InterruputedExceptionの例外がスローされる可能性があるので、try~catch文を記述します。
     
  7. 23~24行目
  8. 左右のモーターをbackward()で逆回転させる事で後退します。
     
  9. 26~29行目
  10. 18~21行目と同様、2000ミリ秒処理を待たせます。
     
  11. 32~33行目
  12. 左右のモーターをstop()させることにより止まります。

プログラムの実行

 では、コンパイルしてみましょう。「lejosc」というコマンドでコンパイルします。

C:\>lejosc ForwardBack.java

 無事にコンパイルが終わったら、クラスファイルをRCXに転送します。赤いボタンを押して電源を入れ、RCXの赤外線ポートとIRタワーを向かい合わせ、「lejos」コマンドで転送します。

C:\>lejos ForwardBack
100%

 100%と表示されて、RCXからBeep音が聞こえたら転送完了です。

 いよいよ実行です! 思い通りに動くのかドキドキします。緑のボタンを押して実行してみましょう。

図4 動作の様子(動画でお伝えできないのが残念です)
図4 動作の様子(動画でお伝えできないのが残念です)

 おぉ、動きましたーーーっ!!

 筆者は初めてレゴロボットが思い通りに動いた時、おもわず顔がニヤけてしまいました……。

 次回は光センサーを使ったプログラムを作ります。

参考リンク

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2312 2009/04/02 17:30

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング