教育用マイコンボードへのJava KVM の実装と移動 - JSK

1P1-3F-G3
教育用マイコンボード への Java KVM の実装と
移動ロボット の行動プログラミング演習
— 東京大学戦略ソフト ウェア創造人材養成プログラムでの実践—
Building Java KVM Mobile Robots and its Behavior Programming Course
— Professional Programme for Strategic Software at The University of Tokyo —
○ 水内 郁夫
正 高野 太刀雄
(東大)
(東大)
岡田 慧
正 小林 肇
(東大)
(東大)
正 西脇 光一
正 斉藤 正光
(東大)
(東大)
正 原田 達也
正 稲葉 雅幸
(東大)
(東大)
Ikuo MIZUUCHI
Kei OKADA
Koichi NISHIWAKI
Tatsuya HARADA
Tachio TAKANO
Hajime KOBAYASHI
Masamitsu SAITO
Masayuki INABA
Dept. of Mechano-Informatics, Graduate School of Information Science and Technology,
The University of Tokyo. 7-3-1, Hongo, Bunkyo-ku, Tokyo
This paper describes a cource of building a Java virtual machine for mobile robots and its behavior programming.
The cource also includes building the cross-developing environment for the mechatronics board developed in our
department, and practicing the parallel object-oriented programming. The cource has been done in Professional
Programme for Strategic Software at the University of Tokyo.
Key Word: embedded system, JAVA, KVM, Professional Programme for Strategic Software
はじめに
1
東京大学大学院情報理工学系研究科では,平成 13 年度か
ら 5 年間戦略ソフトウェア創造人材養成プログラム1を実施
している.本プ ログ ラムいおいて,実世界で外界情報を認
識し行動するためのソフトウェアの教育として,機械系学部
教育等に利用可能な Java を搭載した移動ロボットを構成し,
並列行動プログラミング演習を実践した.本稿ではその実装
系と行動プログラム環境を紹介する.
以下に本演習のねらいを挙げる.
組み込みシステムのソフト ウェア 実世界で認識・行動する
システムに不可欠な要素である組み込みシステムのソ
フトウェアを,開発環境の構築から応用実践プログラミ
ングまでを通して学ぶ.
開発環境の構築方法 組み込みシステムソフトウェアのクロ
ス開発環境の構築法を学ぶ.GNU のツールを利用した
クロスコンパイラの開発を,Windows や Linux 上で行
う方法を実践から学ぶ.
図 1: ボード コンピュータと車輪型ロボット
JAVA 言語による行動プログラミング イベント駆動型の認
識行動ソフトウェアを始め様々な並列ソフトウェアの構
築を,Java でオブジェクト指向を学びつつ演習する.
コーダと左右前方に 2 個ずつの衝突センサ・赤外線距離セン
サを備え,センサベーストな行動実験が可能になっている.
マイコンボード を搭載した車輪型ロボットを図 1 に示す.
応用実践 迷路脱出課題や自主プロジェクト [1] という形で,
実際に移動ロボットの行動プログラミングを行う.
2.2
演習環境の整備
2
2.1
教育用マイコンボード と車輪ロボット
KVM (kilo byte Java VM) の移植
並列行動プログラミングの演習に利用するために OS の搭
載や様々な JavaVM の移植など の可能性を探り,最終的に
Sun の提供する CLDC(Connected Limited Device Configuration; Java2ME(Micro Edition) の最小セット ) の reference
実装である KVM を MC68336 に移植した.KVM は,
本演習で利用するマイコンボードは東大機械系で開発され
たもので,モトローラ MC68336(CPU32, 20.97MHz, 7.5kB
SRAM,タイマ・AD・シリアル通信等内蔵) と,256kB RAM,
512kB EPROM が接続され,シリアル通信・4 行 ×6 列キー
ボード・16 桁 ×2 行液晶ディスプレ イ・圧電スピーカ・モー
タド ライバ・赤外線リモコン入出力・LED・汎用 IO/AD 等
と周辺回路を搭載している.
車輪型ロボットも同機械系で開発されたもので,後方に独
立駆動の 2 輪と前方にフリーベアリングを 1 個有する.エン
1 http://www.i.u-tokyo.ac.jp/ss/
• 浮動小数点を使うバイトコード のサポート無し .
• ユーザ定義のクラスロード のサポート無し .
• スレッドはサポート.スレッドグループはサポート無し.
• ファイナライザ無し .例外はサポート (制限有り).
• 非同期通知・ファイルローダ・ネットワーク等は CLDC
非標準.
• Solaris, Windows, Linux 等の Sun による実装がソース
コード 付きで公開.
日本機械学会 [No.03-4] ロボティクス・メカトロニクス講演会’03 講演論文集
1P1-3F-G3(1)
2003.5.23∼25 函館市
といった特徴がある.
移植に際し ,警告用関数 (AlertUser),メモリ関連の関数
(allocateHeap,freeHeap),ターゲット固有の初期化・終了処
理 (InitializeNativeCode,FinalizeNativeCode),時間の関数
(CurrentTime md) 等を実装する必要があった.さらに,標
準出力を LCD,標準入力を 24 キーと定義し,標準ライブラ
リ関数 (strcpy,printf,longjmp 等) を実装し移植を行った.
2.3
000000
user program
RAM(256kB)
040000
ネイティブコード 実行と移動ロボットの API
.text
libraries
JavaVM
880000
という配置にすることにした.MC68336 は RAM・ROM・
内蔵 SRAM のメモリアドレスは変更可能であるので,割り
込みハンド ラを RAM に置きたいなどの制約から,図 2 に示
すようなメモリマップとした.
ROM には JavaVM の実行コードと標準クラスライブラリ
が置かれ,RAM には*.java をコンパイルしてできた*.class
を束ねた*.jar ファイルを転送する.KVM(JavaVM) が Jar
の実行をサポートしているので,RAM に転送した*.jar ファ
イルの番地をボタンでセットして,Java 実行ボタンを押す
ことにより実行する.なお,ダウンロードボタン,C プログ
ラム実行ボタン等が他に設定してある.
演習の内容
3
3.1
FFD000
stack
クロス開発環境と KVM のインスト ール
各自が 自宅の Windows マシンで演習の内容を復習する
ことができるように,Cygwin2の環境をベースに,GNU3 の
ツールにより,次のようにクロス開発環境の構築を演習した.
1. http://www.cygwin.com/setup.exe により Cygwin を
インストール.
2. Cygwin 利用のための Windows 環境変数の設定.
3. Meadow(Windows 上で動く GNU Emacs エディタ) 4 の
インストール.
SRAM(4kB)
図 2: メモリマップ
4. binutils をビルドし インストール.
5. gcc (GNU compiler collection) をビルドしインストール
C 言語プログラムと Java プログラムの共存
RAM: C プログラム.Java バイトコード (jar 形式)
ROM: モニタ.C ライブラリ.JavaVM(KVM).サンプル.
内蔵 SRAM: スタック
ROM(512kB)
Sample.java
etc.
• 車輪の制御 (速度制御のソフトウエアサーボを Java ス
レッド として実装)
• シリアル入出力 (InputStream, OutputStream を継承)
• キー入力 (スキャン,ブロック入力,数値入力)
• 時刻取得,LED 制御,衝突センサ・距離センサ読み取
り,AD 入力,メモリーアクセス
本演習で利用するマイコンボード は,他の演習では C 言
語でも利用するので,C 言語と Java のプログラムをど ちら
も起動できるようにした.また,C や Java で書かれたプロ
グラムはシリアル通信で RAM に転送するが,JavaVM や標
準クラスライブラリ・C 言語のライブラリ関数等は ROM に
置き,RAM のプログラムサイズを小さくしたい.そこで,
.bss
800000
KVM では JNI はサポートされず,VM に直接リンクする
ことによりネイティブコードを実行可能であるが,実行中は
スケジューリングされない.ネイティブコード を利用するメ
ソッド の引数,結果はスタックにより授受できる.
ネ イ ティブ コ ード を 利 用 し た 車 輪 型 ロ ボット 用 の
API(utmech.mechanomcu. ∼) を次のように用意した.
2.4
.data
ただし ,configure は --target=m68k-coff として行った.
Sun から取得した KVM のソースとあわせて,演習環境用
に移植した KVM をビルドする環境を CVS の形で用意し,そ
れを各自の手元に checkout してビルド・インストールを行っ
た.KVM の標準クラスライブラリ作成に必要な JDK1.3.1
も,Sun より取得して各自でインストールした.
3.2
行動プログラミング
LEGO MindStorms5のコントローラ (RCX) 用の Java と
して LeJos6が開発されているが,そのサンプルとして Subsumption Architecture[2] の簡単な実装例がある.これを本
演習の環境に移植し参考サンプルとして配布した.センサ入
力がない場合は前進し,バンパーの入力に応じて,通常行動
を抑制し回避行動を発現するというものである.
Java で車輪型ロボットや自主プロジェクト [1] のためのプ
ログラミングを通して,オブジェクト指向の概念や,スレッ
ドを利用した並列プログラミング,イベント駆動型のプログ
ラミング等を習得する.
4
おわりに
一人一台の 68 系プロセサと車輪型ロボットを題材に,組
み込みシステムのソフトウェアとその開発環境,Java によ
る行動プログラミング,応用実践を通して,実世界認識行動
ソフトウェアの教育を行う環境を紹介し,それに伴い行った
Java KVM の移植に関し述べた.
参考文献
[1] 稲葉雅幸. 東京大学機械情報工学科自主プロジェクト型学生実
験. 日本機械学会ロボティクスメカトロニクス講演会 ’93 予稿
集, pp. 644–649, 1993.
[2] Rodney A. Brooks. A Robust Layered Control System For A
Mobile Robot. IEEE Journal of Robotics and Automation,
Vol. RA-2, No. 1, pp. 14–23, 1986.
2 http://www.cygwin.com/
3 http://www.gnu.org/
4 http://www.meadowy.org/meadow/
5 http://mindstorms.lego.com/
6 http://lejos.sourceforge.net
1P1-3F-G3(2)