Up:[[Tutorial]]    Previous:[[物体を持つ動作]]     Next: [[ロボット・ダイナミクス(単純モデル)]]  
#contents

*BVHファイルの読み込み [#x19ad21f]
ここではBVH形式のモーションデータをSIGVerseで読み込むサンプルを紹介します。(※このサンプルはバージョン110223以降で正常に動作します。)
**サンプルコードの取得 [#r8a2a8f0]
まずSIGVerseがインストールされたディレクトリに移動します。
 
 $ cd ~/sigverse-<version>/bin

次に以下のディレクトリからサンプルコードを取得し、展開します。

 $ cp /home/SIGVerse/samples/readBVH.tar.gz .
 $ tar zxvf readBVH.tar.gz
 $ cd readBVH

このパッケージの中には以下のファイルが含まれています。
-サンプルコード
#ref(BVH.cpp)
#ref(BVH.h)
#ref(BVHController.cpp)
#ref(BVHController.h)
-世界ファイル
#ref(BVHWorld.xml)
-エージェント設定ファイル
#ref(Man-bvh.xml)
-bvhファイル読み込み用人間型サンプルモデル
#ref(bvh_man.x3d)
-Makefile
#ref(Makefile)

**コンパイル [#dc0eecc8]
それでは早速コンパイルをしてみましょう。
***Makefile修正 [#d1d66155]
Makefileを自分の環境に合わせて修正します。
 $ emacs Makefile

Makefile
 #SIGVerseソースの場所指定
 SIG_SRC  = /home/<user-name>/sigverse-<version>/include/sigverse
 
 #オブジェクトファイルの指定
 OBJS     =  BVH.o BVHController.so BVHController.o 
 
 all: $(OBJS) 
 
 #コンパイルを行います。
 BVHController.o: BVHController.cpp
         g++ -DCONTROLLER -DNDEBUG -DUSE_ODE -DdDOUBLE -I$(SIG_SRC) - I$(SIG_SRC)/comm/controller -fPIC -c -o $@   $<
 
 BVH.o: BVH.cpp
         g++ -DCONTROLLER -DNDEBUG -DUSE_ODE -DdDOUBLE -I$(SIG_SRC) - I$(SIG_SRC)/comm/controller -fPIC -c -o $@ $<
 
 BVHController.so: BVHController.o BVH.o
         g++ -shared -o BVHController.so BVHController.o BVH.o

SIG_SRC  = /home/&color(red){<user-name>};/sigverse-&color(red){<version>};/include/sigverse

の部分の<user-name>, <version>をそれぞれ自分のユーザ名、バージョン番号に置き換えます。
 
***make [#e9428e36]
コンパイルします。
 $ make
BVHController.soが作成されたらコンパイルは成功です。

**設定 [#fe62edb4]
***ファイルの移動 [#fb87d967]
次にbvhファイル読み込み用のサンプル形状モデルをパスが通ったshapeディレクトリに置きます。

 $ cp bvh_man.x3d ../../share/sigverse/data/shape/
''クライアント側のSIGViewerのインストール場所''
(デフォルトでは
C:\Program Files\SIGViewer_<vesion>\SIGViewer\release)
''にも同様のファイルを置きます。''

次に世界ファイルとエージェント設定ファイルをxmlディレクトリに置きます。

 $ cp BVHWorld.xml ../xml/ 
 $ cp Man-bvh.xml ../xml/  
 (※コピー先 ../../share/sigverse/data/xml/)

***bvhファイルの取得 [#v7e3fd25]
読み込ませたいbvhファイルを取得してカレントディレクトリ(~/sigverse-<version>/bin/readBVH)に置きます。本ページのサンプルでは[[PV STUDIO>http://www.privatestudio.co.jp/down.htm]]から取得したbvhのサンプルデータAction_Kick_bvh.bvhを読み込ませます。

***世界ファイルの設定 [#w8dc6fa2]
次に読み込ませたいbvhのファイル名を世界ファイルに記述します。
 $ cd ..
 $ emacs BVHWorld.xml

BVHWorld.xml
#highlight(xml:firstline[19]){{
 <!--BVHファイル名の指定-->
        <set-attr-value name="BvhFile" value="./readBVH/filename.bvh"/>
}}
    ↓

#highlight(xml:firstline[19]){{
 <!--BVHファイル名の指定-->
        <set-attr-value name="BvhFile" value="./readBVH/Action_Kick_bvh.bvh"/>
}}
bvhファイルはSIGVerseを実行するディレクトリからのパスを指定します。


BVHWorld.xml

#highlight(xml){{
<?xml version="1.0" encoding="UTF-8"?>
 <world name="newworld">
 
 <!--重力の設定-->
   <gravity x="0.0" y="-9.8" z="0.0"/> 
 
 <!--エージェントMan-niiの設定-->
   <instanciate class="Man-bvh.xml"> 
 
 <!--エージェント名--> 
         <set-attr-value name="name" value="man_000"/> 
 
 <!--C++言語の指定-->
         <set-attr-value name="language" value="c++"/> 
 
 <!--オブジェクトファイルBVHController.soの指定-->
         <set-attr-value name="implementation" value="./readBVH/BVHController.so"/>
 
 <!--BVHファイル名の指定-->
         <set-attr-value name="BvhFile" value="./readBVH/Action_Kick_bvh.bvh"/> 
 
 <!--動力学演算をfalseに設定-->
         <set-attr-value name="dynamics" value="false"/> 
 
 <!--エージェントの位置(x,y,z)-->
        <set-attr-value name="x" value="0.0"/>
        <set-attr-value name="y" value="50.0"/>
        <set-attr-value name="z" value="0.0"/> 
 
  </instanciate>
</world>
}}
**実行 [#l9a95abd]

これで準備は整いました。それでは実行してみましょう。

 $ ./sigserver.sh -p 9001 -w BVHWorld.xml

SIGViewerでサーバに接続するとエージェントが手を広げて立っているのが見えます。
Sendボタンを押してシミュレーションを開始するとbvhファイルの読み込みが開始され、エージェントが動き始めます。

#ref(motion_1.jpg)
エージェントがキックします。
**サンプルモデル [#f5ec3378]
bvh読み込みサンプルモデル(bvh_man.x3d)で定義された関節名は以下のようになっています。すべての関節がローカル座標系におけるx,y,z軸を中心に回転するように定義されいています。
#ref(joint_name.jpg)

**参考ページ [#a4b2f90f]
-[[Real animation software PV STUDIO>http://www.privatestudio.co.jp/down.htm]]
-[[尾下研究室 BVH モーションファイル 読み込み&表示 プログラム>http://www.oshita-lab.org/software/bvh/index-j.html]]

#highlight(end)

Up:[[Tutorial]]    Previous:[[物体を持つ動作]]     Next: [[ロボット・ダイナミクス(単純モデル)]] 


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