Comments
Description
Transcript
教育用マイコンボードへの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)