[[SIGVerse Web]]

[[SIGVerse.org:http://sigverse.org]] | [[SIGVerse Forum:http://sigverse.org/sigverse/forum/]] | [[SIGVerse Wiki (JP):http://www.sociointelligenesis.org/SIGVerse/]] | [[SIGVerse Web:http://web.iir.nii.ac.jp/sigverse/web/]]

----
If you need English information, please see [[SIGVerse Web]] (English Verseion).
%%%''&size(24){このページは2012-09-02に行われる創発システムシンポジウムワークショップ専用の情報です.それ以外の方は参照されても意味が無いので,[[SIGVerse Web]]をご覧下さい.};''%%%

%%%''&size(24){SIGVerse Web};''%%%

#contents

----

* SIGVerse Web とは? [#v827625f]
SIGVerse Web は''SIGVerseアプリケーションを構築するためのウェブインタフェースシステム''です. SIGViewerと一緒に使う事で,Cygwinのようなターミナルコンソール経由でのコマンドラインでの開発環境を用いることなく開発を進めることができます.プログラムはウェブベースでの簡易テキストエディタで作成することになります.コンパイルや設定ファイルの配置,プログラム実行などがクリックするだけで実行できます.ブラウザがあれば,開発環境が整っていないPCからでも簡単に開発を進めることができるわけです.

SIGVerse Web の主な特徴は以下の通りです:
- ウェブベースでのプログラムエディタとコンパイラ
- SIGServerの遠隔操作(実行・停止・設定ファイルの整備など)
- クラウド上でのプログラム開発環境の提供

----

* セットアップ [#vd852cbc]
** Webuser アカウントの登録 [#z9349b00]
- http://192.168.1.17/web/login/index.php にアクセスして下さい.
- トップパネルで SIGVerse Web の利用登録を行い,ログインして下さい.(以下の図の一番右側のエリアで利用登録をします)
- 1つのチームで1つのアカウントをteam1, team2 という名前で作って下さい.
- 登録を行うとパスワードが表示されます.このパスワードをメモして紛失しないようにして下さい.紛失してしまうと再発行できませんのでご注意下さい(本日の特別の設定条件に起因しています)

&ref(SIGVerse Web/Register&Login.png,alt-title-Register & Login on Top Panel,80%);

** SIGVerse のインストール/アンインストール [#f18f6cb3]
- 上記の中央のエリアの"Member login"からログインして下さい.ログインの後,あなたのワークスペースにSIGVerseサーバをインストールします.このSIGVerseサーバを修正・変更していくことで,あなたの実行したい実験の世界を作ることになります.別の言い方をすると,他人が作ったSIGVerseの世界を用いる場合には,このインストールは必要無い,という事になります.
- メインページの, '''Connect to Socio''' の所に localhost が記載されている事を確認し,Connect ボタンを押します.また,Username : webuser は変更しないで下さい.(以下の画像では socio2.iir.nii.ac.jp というホスト名が記載されていますが,本日は特別な接続なのでこの点は無視して下さい.)
- 次に Install という項目にあるフィールドにインストールしたいSIGVerseバージョンを記入します.通所は最新版のバージョンが既に記載されているので,何もしなくて結構です.Install ボタンを押すことで,あなたのワークスペース上にSIGVerseサーバがインストールされます.
- ''*重要*'' '''Install''' ボタンをクリックした後,作業完了まで5分程度かかることがあります.ログが出力され,インストールが完了したことが確認できるまで,他のボタンを押さないでください.
- インストールの完了後,'''Go''' ボタンをクリックして, '''Workspace''' にアクセスして下さい.

&ref(SIGVerse Web (創発システムシンポジウム専用情報)/sigverse_web_mobile.jpg,alt-title-Setup Page,90%);

** '''* NIIで運用するSIGVerseサーバー上のアカウント''' [#wb2d5aa3]
- 国立情報学研究所(NII)で運用しているSIGVerseサーバに接続するためには,サーバでのユーザアカウントが必要になります.
-- ※だたし創発システムシンポジウムにご参加の方はワークショップ当日に限り,アカウントをこちらで用意致します
- NIIで運用するサーバ上のアカウント発行には制約条件がありますので,稲邑(inamura@nii.ac.jp)までご連絡をお願い致します.


----

* 基本的な開発ガイド [#u57f6de6]
** ワークスペースの概要 [#w170fd18]

&ref(SIGVerse Web/Workspace.png,alt-title-Workspace,80%);

- プロジェクトディレクトリ
-- 左側のパネルでプロジェクトディレクトリに含まれているファイルを管理します.新しいプロジェクトディレクトリの作成や新しいファイルの作成,ファイルのアップロード,プロジェクトのインポートなどができます.(インポートについては '''Import''' を参照して下さい).

- 編集エリア
-- 中央の編集エリアでソースコードや設定ファイルを作成・修正します.検索や置換などの機能が使えます.プログラムの種類に応じたカラーハイライト機能も備えています.

- コントロールパネル
-- 下部のパネルはコントロールパネルと呼ばれ,ソースコードのコンパイルや実行を行います.
-- ''Make'' を押すことでいわゆるmakeコマンドを実行することになり,Makefileの内容に沿ってコントローラがコンパイルされます.なお,仕様によりMakefileには拡張子.txtが付くことになります.Makefile.txt のサンプルを下記に示しておきます.

Makefile.txt

#highlight(xml){{
#SIGVerseソースの場所指定
SIG_SRC  = ../sigverse-120330/include/sigverse

#オブジェクトファイルの指定
OBJS     = Controller.so

all: $(OBJS)

#コンパイルを行います。
./%.so: ./%.cpp
	g++ -DCONTROLLER -DNDEBUG -DUSE_ODE -DdDOUBLE -I$(SIG_SRC) -I$(SIG_SRC)/comm/controller  -fPIC -shared -o $@   $<
}}

-- ''Build'' で,コンパイルしたバイナリや編集した世界ファイルなどを実行するための環境の準備を行います.具体的には各種ファイルを適切なディレクトリにコピーする作業が行われます.使用するSIGVerseのバージョンはコントロールパネルの右側で確認できます.
-- ''Import (.zip)'' で,zip ファイルで圧縮されているプロジェクト全体のデータをインポートすることができます.プロジェクトのインポートを行うには,まず,zipファイルをインポートしたいプロジェクトディレクトリにアップロードし,'''Import'''ボタンを押します.refreshをすることで,インポートしたファイルが見られるようになります.
-- ''Export'' で,現在のプロジェクトをzipファイルにエキスポートします.
-- ''Delete'' で,現在のプロジェクトを削除します.
-- [Admin] は管理者専用のボタンになります.

** SIGServer の実行 [#t214e637]
- ''Run'' で,SIGServer (./sigverse.sh) を実行します.
- ''Check'' で,実行に伴うログを表示します.
- ''Kill'' で,SIGServerを停止させます.



----

* チュートリアル [#j1dec720]
** 最初のテスト (Tutorial01) [#x282fbcb]
- To simulate a falling object due to gravitational and external forces.
- ① 新しいプロジェクトの作成
-- 左側のプロジェクトディレクトリエリアの上部にある'''Add Folder'''アイコンをクリックします
-- "Tutorial01"と入力し,'''SAVE'''します.
-- "Tutorial01"という新しいディレクトリが表示されます.

- ② エージェントコントローラの作成
-- エージェントの動作を定義するエージェントコントローラを作成します
-- "Tutorial01"を移動してディレクトリの中に居る状態で,'''Add File'''をクリックします.
-- "MoveController"と入力し,拡張子"cpp"を選択します.
-- 編集エリア(Editor Area)に以下の内容を記入(コピー)し,'''SAVE'''をクリックします.

MoveController.cpp
 
#highlight(cpp){{
 #include "Controller.h"
 #include "Logger.h"
 
 //ControllerのサブクラスMoveControllerの宣言します。
 class MoveController : public Controller {
 public:
 
   //定期的な処理を行うonActionの利用を宣言します。
   double onAction(ActionEvent&);
 };
 
 
 double MoveController::onAction(ActionEvent &evt) {
   return 5.0;      //次にonActionが呼ばれるまでの時間を返します。
 }
 
 //自身のインスタンスをSIGVerseに返します。
 extern "C" Controller * createController() {
      return new MoveController;
 }
}}

-- The above controller codes do nothing except execute "onAction" on every 5 s.

- ③ コントローラー·コードのコンパイル
-- 上記と同様の操作で,"Makefile"というファイル名,拡張子"txt"で新しいファイルを追加して下さい.
-- 編集エリア(Editor Area)に以下の内容を記入(コピー)し,'''SAVE'''をクリックします.

Makefile.txt

#highlight(xml){{
#SIGVerseソースの場所指定
SIG_SRC  = ../sigverse-120330/include/sigverse

#オブジェクトファイルの指定
OBJS     = MoveController.so

all: $(OBJS)

#コンパイルを行います。
./%.so: ./%.cpp
	g++ -DCONTROLLER -DNDEBUG -DUSE_ODE -DdDOUBLE -I$(SIG_SRC) -I$(SIG_SRC)/comm/controller  -fPIC -shared -o $@   $<
}}

-- コントロールパネルの'''work/'''の部分にプロジェクト名"Tutorial01"を入力し,'''Make'''をクリックします."MoveController.so"ファイルが作成されたかどうかを確認するため,プロジェクトディレクトリをRefreshアイコンで再表示して下さい.もし,"MoveController.so"が作成されていなければ,コンパイル時にエラーが出たことを意味しますので,ソースコードを確認・編集して下さい.また,Makefile.txtでタブ記号の部分がスペースになっていないかの確認もして下さい.

- ④ エージェントと仮想世界の作成
-- 上記と同様の操作で,"NewWorld"というファイル名,拡張子"xml"で新しいファイルを追加して下さい.
-- 編集エリア(Editor Area)に以下の内容を記入(コピー)し,'''SAVE'''をクリックします.

NewWorld.xml

#highlight(xml){{

<?xml version="1.0" encoding="utf8"?>
 <world name="myworld">
 
 <!--重力の設定-->
   <gravity x="0.0" y="-9.8" z="0.0"/>  
  
 <!--エージェントToy_Dのインスタンス作成-->
   <instanciate class="seToy_D.xml">
 
 <!--エージェント名-->
         <set-attr-value name="name" value="Toy_D"/>  
 
 <!--C++言語の指定-->
         <set-attr-value name="language" value="c++"/> 
 
 <!--作成したコントローラの指定-->
         <set-attr-value name="implementation" value="./MoveController.so"/>
 
 <!--動力学演算フラグ-->
         <set-attr-value name="dynamics" value="true"/>
  
 <!--エージェントの最初の位置(x,y,z)-->
         <set-attr-value name="x" value="0.0"/>
         <set-attr-value name="y" value="18.0"/>
         <set-attr-value name="z" value="5.0"/>
 
 <!--エージェントの質量設定-->
         <set-attr-value name="mass" value="1.0"/>
 
  </instanciate>
</world>
}}

-- 上記のファイルでは,新しい仮想世界ファイル"myworld"を定義しています.
-- この世界では,"Toy_D"という名前のエージェントが"seToy_D.xml"という定義ファイルに従って生成されます.
-- "implementation"属性で,このエージェントに"MoveController.so"というコントローラが割り当てられる事が定義されます.
-- "dynamics"属性の値を"true"とすることで,このエージェントはODEに基づく物理シミュレーションが適用されます.
-- 初期状態は,position (x,y,z) やmassで設定されます.

- ⑤ シミュレーションの実行
-- コントロールパネル(Control Panel)の'''Build'''を押して,設定したファイルやコンパイルしたコントローラを実行する準備を行います.
-- "Port"に適切な値(例えば9100),"World" に "NewWorld.xml"と入力します.
-- '''Run'''をクリックし,SIGVerseを実行させます.
-- '''Check'''をクリックするとサーバのログが表示されます,最終行に" Java VM start ok" と表示されていれば,無事に動作ができていることが確認できます.
-- もし,"cannot bind socket: Address already in use"という表示が出た場合には,別のポート番号を使って再接続して下さい.
-- SIGViewerを立ち上げて,host name に192.168.1.17,ポート番号に自分のチームが用いるポート番号を入力して下さい
-- '''Connect to SimServer'''をクリックすると,以下の図のようなエージェントが表示されます.
-- SIGViewer上にて視点を変えるには以下のコマンドを使います
--- Turn around - Right click
--- Zoom - Ctrl + Right click
--- Pan - Shift + Right click

#ref(動力学シミュレーションのサンプル/toy_1.jpg)

-- SIM_CTRL_CMD (START)の下にある'''Send'''をクリックするとシミュレーションが開始されます.
-- エージェントが下に自由落下する様子が見えたら成功です.
-- SIGViewer で'''Disconnect SimServer'''をクリックし,SIGVerse web のコントロールパネルで'''Kill'''をクリックすれば,シミュレーションが終了します.

- ⑥ 外力の加える
-- ここでは,コントローラのソースコード改変して,エージェントに外力を与えてみます.
-- 以下のように,コントローラのソースコードを編集します

MoveController.cpp

#highlight(cpp:firstline[13]){{
 double MoveController::onAction(ActionEvent &evt) {
   return 5.0;      //次にonActionが呼ばれるまでの時間を返します。
 }
}}

                 ↓

#highlight(cpp:firstline[13]){{
 double MoveController::onAction(ActionEvent &evt) {
   SimObj *obj = getObj(myname());  //自分自身の取得
   obj->setForce(0,0,300);         //z軸方向に300[N]の力を加える
   return 5.0;      //次にonActionが呼ばれるまでの時間を返します。
 }
}}

-- '''Make''', '''Build''','''Run'''の順序でシミュレーションを開始します.
-- エージェントが前方に向かって進んで行くのが見えれば成功です.

#ref(動力学シミュレーションのサンプル/toy_3.jpg)

** チュートリアルプロジェクトファイル [#u6078d14]
上記のファイルをウェブブラウザからコピペしても良いですし,以下のファイルをダウンロードして,SIGVerse web にアップロードする形でもソースコードや設定ファイルを作成できます.
- Tutorial01 - &ref(SIGVerse Web/Tutorial01.zip);


** SIGVerse Web と一般的な開発の違い [#r45b397b]

SIGVerse Web はLinux環境によるプログラム開発に慣れていない人のための簡易開発環境であるため,通常のLinux開発環境によるアプリケーション開発と大きく異なる点がいくつか存在します.特に,このwikiの[[Tutorial]]に記載されている内容と異なる点がありますのでご注意下さい.

- SIGVerse Web でのファイルシステムは,"Project"という概念で整理されています.あるアプリケーションに必要なファイル (.cpp, .so, .xml, .wrl, .x3d, など)は,同じプロジェクトディレクトリの下で管理されます."Build"を用いることで,SIGVerse Webは自動的にこれらの必要なファイルをSIGVerseのバージョン番号などに従って,実際に必要なディレクトリに自動的に転送(コピー)します. これによって,"Import"や"Export"がより簡単にできるようになっています.

- ''*違い*'' SIGVerse Web では,仮想世界を記述するファイル (.xml)の文法として,以下に示す通り,エージェントコントローラの置き場所は通常カレントディレクトリをも用います.しかし,通常の開発環境(例えば[[Tutorial]])では,プロジェクトディレクトリの下に置くような文法になっています.この点を注意して,Tutorial に記載されている表記をSIGVerse Web の表記に直して使って下さい.
-- SIGVerse Web での記法
#highlight(xml){{
<set-attr-value name="implementation" value="./MoveController.so"/>
}}
-- [[Tutorial]]で説明されている開発環境での記法
#highlight(xml){{
<set-attr-value name="implementation" value="./NewWorld/MoveController.so"/>
}}

- SIGVerse Webでは,SIGVerse サーバのバージョンに依存せず,同じ設定ファイルを共有することができます.

- ''*違い*'' Makefile の作成時には,SIGVerse バージョン番号を以下のように指定する必要があります.もしSIGVerseのバージョンがアップデートされた場合などには,以下の部分を書き換えて使う必要がありますので,ご注意下さい.

#highlight(xml){{
SIG_SRC  = ../sigverse-$(sigversion)/include/sigverse
}}

----

* ライブラリー [#rc33b193]
- Object Gallery

- World Gallery
-- Living Room (Small)
-- Living Room (Big)
-- Kitchen

- Controller Collection
-- Mobile Robot
-- Humanoid

- User Interface Systems
-- Kinect
-- Webcam

----

SIGVerse Web システムは国立情報学研究所のJeffrey TAN が担当しています.もしご質問等があれば,[jeffrey@nii.ac.jp]までご連絡下さい.

#highlight(end)


Front page   New List of pages Search Recent changes   Help   RSS of recent changes