\newpage

\section{\label{MARS} MARS: マルチ自律ロボットシミュレータ}
\markright{\arabic{section}. MARS}
\hfill {\Large \em (予告)}

\hfill {\em 著者: 国吉 康夫,電総研}

{\bf MARS}は、平面空間内における
マルチ自律移動ロボットのためのシミュレーション環境である。
このプログラムは、Euslispで記述されている。

{\bf 開発状況:}
1995年1月、MARSの発表直前バージョンが電総研内で用いられている。
システムの改善を活発に行い、1995年の上期内に最初のバージョンを
発表する計画である。
その後も、システムの向上をはかり、1996年3月までに安定した状態を
達成したいと望んでいる。
発表の告示はEuslispのメーリングリストや他のインターネットサービス
を通じて行われる予定である。
恐らくライセンスの条件をEuslispから分けるであろう。

{\bf 目的:}
MARSは、単一あるいは複数の移動ロボットで知的ロボットの研究に使用することを
意図してつくられている。たとえば、行動学習やマップ構築や知能収集や
複数ロボット協調や協調学習などである。


\subsection{始め方}
MARSプログラムは、{\bf robot/MARS/ver.XXX}にある。
最初に、".eusrc"ファイルを自分のホームディレクトリにコピーする。
必要があれば変更すること。
(MARSがインストールされているディレクトリのパス名など)

このディレクトリから{\bf eusx}を呼び出す。
すべてのファイルが自動的にロードされ、シミュレータが動作し始める。
windowがオープンされ、初期メッセージが下部windowに現れるまで待つこと。

例:
\begin{verbatim}
Try "SYSTEM"->"Load" menu.
Load "example.bbs".
And "SCL"->"On" menu.
\end{verbatim}

注意:\\
SCL$\rightarrow$"Off" シミュレーションは一時停止するが、GUI処理は続行される。\\
SYSTEM$\rightarrow$"Quit" 最上位のループから抜ける。(mars-loop)により再開できる。\\
SYSTEM$\rightarrow$"Save" 現在の状態をファイルにセーブする。\\
SYSTEM$\rightarrow$"All-Clear" すべてを消し、システムを初期化する。\\
SYSTEM$\rightarrow$"Reset" ロボットの内部状態をリセットするために使用する(特殊目的)。\\

\subsection{システム概要}

\begin{figure}[h]
\begin{center}
%\begin{tabular}{c@\extracolsep{1em}c}
\begin{tabular}{c c}
%%% change 2004.12.14 \epsfile{file=fig/mars.eps,scale=0.3} & % I=;f$HF1$83($KJQ99$7$F!#
%%% change 2004.12.14 \epsfile{file=fig/simst.ps,hscale=0.42,vscale=0.45} \\
\includegraphics[width=0.4\columnwidth]{fig/mars.eps} &
%\epsfile{file=fig/mars.eps,width=0.4\columnwidth} & % I=;f$HF1$83($KJQ99$7$F!#
\includegraphics[width=0.6\columnwidth]{fig/simst.ps} \\
%\epsfile{file=fig/simst.ps,width=0.6\columnwidth} \\
\end{tabular}
\caption{\label{MARSOverview} MARS windowの表示例（左）と
プログラムの構造（右）}
\end{center}
\end{figure}

MARSを始めたとき、図~\ref{MARSOverview}(左)に示されるような
メインwindowを見ることができる。MARSは、図~\ref{MARSOverview}(右)
のようなモジュールアーキテクチャを採用している。
それは、物理シミュレーションモジュールとロボット制御モジュールと
ユーザーインターフェースモジュールとユーザーが定義したグローバル
制御ループにより構成されている。

{\bf 物理シミュレーション:}
現在の物理シミュレーションモジュールは、4つのタイプのオブジェクトを
処理している。
{\bf wall} (固定障害物), {\bf block} (移動障害物), {\bf
robot-body} (活動オブジェクト)と{\bf magic-block} (経験学習するための
特別な報酬を与えるオブジェクト)である。

\begin{figure}
\begin{center}
%\begin{tabular}{c@\extracolsep{1em}c}
\begin{tabular}{c c}
%%% change 2004.12.14 \epsfile{file=fig/robot-ui2.ps,hscale=0.5,vscale=0.5} &
%%% change 2004.12.14 \epsfile{file=fig/robot-st2.ps,scale=0.4} \\
\includegraphics[width=0.5\columnwidth]{fig/robot-ui2.ps} &
%\epsfile{file=fig/robot-ui2.ps,width=0.5\columnwidth} &
\includegraphics[width=0.5\columnwidth]{fig/robot-st2.ps} \\
%\epsfile{file=fig/robot-st2.ps,width=0.5\columnwidth} \\
\end{tabular}
\end{center}
\caption{\label{fig:robotst}ロボットの内部構造（左）と
ビヘービアベーストロボットの構成例（右）}
\end{figure}

{\bf ロボットモデル:}
物理的シミュレーションモジュールとロボット制御モジュールとの
間のインターフェースである。
いくつもの{\bf robot}モデルを生成することができ、
擬似並列でシミュレートできる。
{\bf robot}はそれぞれ、{\bf robot-body}と{\bf robot-brain}の
のモジュールの組みで構成される。
{\bf robot-body}は、ロボットの物理的な性質を定義し、
{\bf robot-brain}はロボットの行動を定義する。

{\bf センサモデル:}
ユーザーは、{\bf robot-body}のどこにでもいくつものセンサを
選択して取り付けることができる。
現在、実現されているセンサモデルは、以下のものである。
{\bf 距離センサ} (走行距離), {\bf 角度センサ} (回転角),
{\bf 接触センサ}, {\bf 赤外線センサ}, {\bf レーザセンサ} (超音波), 
{\bf 視覚センサ} (object-name-sensor)。
現在のバージョンでは、ノイズや不確定要素について考えていない。

{\bf ロボット知能:}
{\bf robot-brain}は、シミュレートしたセンサデータを処理したり
行動命令を生成するためにユーザーで定義されたモジュールである。
センサデータを受け、行動命令を出力しなければならない。
付け加えて、リエントラントプログラムとして書かれていて、
グローバル制御ループによって送られる{\bf :step}メッセージ
によって時間分割されなければならない。
これらの拘束に合う限り、ユーザーはどんな認識アーキテクチャも
採用することができる。
システムは、デフォルトとしてビヘービアベースト型のアーキテクチャ
の例を備えている。

{\bf GUI:}
{\bf MARS}のメインwindowは、システムを制御するためにいくつかのボタンを
持つメニューバーを持っている。
また、システムは物理環境を生成／変更するための内部グラフィックエディタ
を持っている。
ファイルに対してエージェント定義と一緒に物理環境を読み書きできる。

{\bf ネットワーク拡張:}
{\bf robot-brain}は、非同期ソケット通信を通して外部プロセス
との接続を構築することができる。
この場合、ユーザーは{\bf remote-brain}を記述するために任意の言語(C,
Prolog, Scheme, Perl, etc...)を使用することができる。
非同期接続のおかげで、ユーザーは時間分割について少しも気にする必要が無い。

{\bf 経験学習機能:}
{\bf MARS}は、ロボットが経験学習するための幾つかの特殊機能を備えている。
報酬を与えるオブジェクトや報酬センサ（報酬値をロボットに送るもの）
や報酬ログ（システム全体の報酬の統計を計算するもの）である。
