Up:[[Tutorial]]     Previous:[[自作の形状ファイルの読み込み]     Next:[[実世界の人・物の取り込み]]
Up:[[Tutorial]]     Previous:[[自作の形状ファイルの読み込み]]     Next:[[実世界の人・物の取り込み]]
----  
#contents

*Kinect Fusionを利用したロボットのスキャン [#k8f721ca]
**Kinect Fusionインストールと起動 [#zb309d6c]

Kinect for Windows SDK v1.7,Kinect for Windows Developer Toolkit v1.7.0を以下のURLからそれぞれインストールします.

http://www.microsoft.com/en-us/download/details.aspx?id=36996 (Kinect for Windows SDK v1.7)
http://www.microsoft.com/en-us/download/details.aspx?id=36998 (Kinect for Windows Developer Toolkit v1.7.0)

Kinect for Windows Developer Toolkitを起動すると図のようなウィンドウが開きます.

#ref(./3d_scan_01.jpg,75%)


**ロボットの3Dスキャン [#m2cd93b1]
Kinect Fusionを起動する前に,Kinectをパソコンに接続しておきます.

Kinect Fusion Explorer-WPFの[Run]を押して起動します.

#ref(./3d_scan_02.jpg,60%)

起動すると図のようなウィンドウが開きます.

#ref(./3d_scan_03.jpg,60%)

ロボットの大きさによってDepth Thresholdのパラメータを調節します.

ロボットが映っていることを確認して,[Reset Reconstruction]を押します.

ゆっくりとKinectを動かして,ロボットを全方向から撮ります.

一番大きいウィンドウにロボットのメッシュができあがっていきます.

#ref(./3d_scan_04.jpg,60%)

撮り終えたら,[OBJ]にチェックを入れて[Create Mesh]を押します. 

#ref(./3d_scan_05.jpg,60%)


*スキャンしたモデルデータの修正 [#h12bb2fb]
**Blenderのインストールと起動 [#y0827da9]

以下のURLの手順に従ってBlenderをダウロードして,起動します.

http://blender.jp/modules/xfsection/article.php?articleid=277 

Blenderを起動すると図のようなウィンドウが開きます.

#ref(./3d_scan_06.jpg,60%)


**不要なオブジェクトの削除 [#x92da131]
初期配置されている不要なオブジェクトを削除します.

オブジェクトを右クリックすると,選択されたオブジェクトがオレンジ色に縁取られます.

オブジェクトやポリゴンの選択は基本的にマウスの右クリックを利用します.

カメラ,ライト,立方体をそれぞれ選択します.

[x]を押すと図のようなポップアップが表示されるので[削除]を押して削除しておきます. 

#ref(./3d_scan_07.jpg,60%)


**モデルデータのインポート [#c8864b79]
インフォメーションウィンドウの[ファイル]から[インポート]をクリックします.
[Wavefront(.obj)]を選択し,ファイルを指定してインポートします.

#ref(./3d_scan_08.jpg,60%)

インポートすると,図のように3Dビューにオブジェクトが描画されます. 

#ref(./3d_scan_09.jpg,60%)

マウスのホイールクリックで回転,[Shift]を押しながらホイールクリックで上下左右の移動,[Ctrl]を押しながらホイールクリックでズームイン/ズームアウトの視点変更ができます.

視点変更はテンキーでも行うことができます.
[1]を押すとxz平面,[3]でyz平面,[7]でxy平面を見ることができます.[2],[8]で上下に15度ずつ回転,[4],[6]で左右に15度ずつ回転させることができます.


**頂点数の削減 [#wa536791]
***不要なメッシュの削除 [#fbc3925b]
右クリックでオブジェクトを選択し,[Tab]を押してエディットモードにします.

オブジェクトモードと同様に,選択された頂点はオレンジ色になります.はじめは図のように全選択になっています.

#ref(./3d_scan_10.jpg,60%)

ロボット以外の,床や壁などを削除します.[Ctrl]を押しながら左クリックで範囲選択をします.

[x]を押すと図のように削除メニューが出るので,[頂点]を押して頂点を削除します.

#ref(./3d_scan_11.jpg,60%)


***重複頂点の削除 [#xdc80fc4]
重なった頂点や距離の近い頂点は不要なので削除します.

エディットモードで[a]を押して全選択します.

頂点が選択された状態で[a]を押すと,選択解除されます.その時はもう一度[a]を押してください.

[w]を押すとスペシャルメニューが表示されます.[重複頂点を削除]を押してください.

#ref(./3d_scan_12.jpg,60%)


ウィンドウ左下に図のようなメニューが表示されます.適当な結合距離を決めて入力します.

#ref(./3d_scan_13.jpg,60%)

結合距離を変えると図のように距離の近い頂点同士が結合され,頂点が等間隔に並んだようなメッシュになります.

#ref(./3d_scan_14.jpg,60%)


***ポリゴン数の削減 [#w8e07676]
[Tab]を押してオブジェクトモードに切り替えます.

ウィンドウ右側のモディファイアに切り替え,[追加]を押し,[ポリゴン数削減]を押します.

#ref(./3d_scan_15.jpg,60%)

[平面]を選択します.

3Dビューのオブジェクトを見ながら角度制限を調節します.

[適用]を押すと平面に近い形状の細部が削減されます.

#ref(./3d_scan_16.jpg,60%)


**原点の移動 [#h6814107]
原点をオブジェクトの中心に移動させます.

オブジェクトの原点がオブジェクトを回転させる際の中心になります.

ショートカットキー[Shift]+[Ctrl]+[Alt]+[c]を押します.

図のようにポップアップが表示されるので[原点を重心に移動]をクリックします.

#ref(./3d_scan_17.jpg,60%)


**オブジェクトの回転 [#m57d7543]
オブジェクトモードでの回転はモデルデータの回転には反映されないので注意してください.

オブジェクトモードでの回転は固定しておくと勘違いが起きづらくなります.

固定するには,[n]を押してトランスフォームウィンドウ開いてください.

図の黄色い枠で囲まれた回転のそれぞれx,y,z軸の南京錠のアイコンを押してください.

#ref(./3d_scan_18.jpg,60%)


エディットモードで回転を行います.

[Tab]を押してエディットモードに変更します.

[a]を押して,頂点を全選択します.

[r]を押すとマウスカーソルが変わります.

マウスを動かすと回転させることができます.

#ref(./3d_scan_19.jpg,60%)

[r]を押した後に,[x],[y],[z]のいずれかを押すと軸を指定して回転させることができます.

[Shift]を押しながらマウスを動かすと,回転量が減ります.

テンキーで視点を変えながら,軸ごとに回転の調整をすると作業が単純化できます.


**オブジェクトの分割 [#mf977921]
オブジェクトをパーツごとに分割します.

分割するパーツの頂点を選択します.

[p]を押すと,別オブジェクトに分離というメニューが出てきます.

[選択物]を押すと,選択された部分が別のオブジェクトとして分割されます.

#ref(./3d_scan_20.jpg,60%)

オブジェクトが増えると,右上のアウトライナーの表示も随時更新されます.

オブジェクトの名前をダブルクリックして名前を変更することができます.

変更してそれぞれに名前をつけておくと編集がしやすくなります.

目のアイコンをクリックすると表示/非表示を変更することができます.

マウスカーソルのアイコンは選択可/不可,カメラのアイコンはカメラへの表示/非表示を操作できます.

#ref(./3d_scan_21.jpg,60%)


**パーツのモデリング [#a7147e04]
モデリングするパーツ以外は非表示にするとモデリングが簡単になります.


***頂点の移動 [#odbe6a49]
頂点を選択すると,マニピュレータが出てきます.

赤い矢印がx軸,緑がy軸,青がz軸方向を示しています.

マニピュレータをドラッグすると,軸上で頂点を移動させることができます.

回転や拡大縮小と同様に,[Shift]を押しながらドラッグすると細かい移動が可能になります.

#ref(./3d_scan_22.jpg,60%)

[Shift]を押しながら右クリックで,頂点を複数選択して辺や面を動かすこともできます.

***面(辺)の生成 [#r403ed61]
3点以上の頂点を選択し,[f]を押すと面が生成されます.

頂点を2点選択して[f]を押すと,辺が生成されます.


**UV展開 [#ida67c3d]
***UV/画像エディター [#c93bdfba]
3Dビューウィンドウの右上の斜線部分をドラッグし,画面を分割します.

#ref(./3d_scan_23.jpg,60%)

左のウィンドウをUV/画像エディターに変更する.

3Dビューウィンドウの左下にある,エディタータイプのボタンをクリックして、[UV/画像エディター]を押します.

#ref(./3d_scan_24.jpg,60%)

図のように左のウィンドウがUV/画像エディターに変更され,3DビューとUV/画像を同時に見ることができるようになります.

#ref(./3d_scan_25.jpg,60%)


***シームを付ける [#l8636e8e]
オブジェクトの色が変わる位置にシーム(縫い目)をつけます.

3Dビューウィンドウの左のタブを [シェーディング/UV]に切り替えます.

シームを付けたい頂点を選択し,[シームを付ける]を押します.

#ref(./3d_scan_26.jpg,60%)

シームがつくと,選択されている辺のオレンジのラインに,赤いラインが重なります.

シームが必要な箇所全てにシームをつけます.

***展開 [#wbae7845]
[a]を押して頂点を全選択し、左のタブにあるUVマッピングの[展開]を押して展開します.

展開図がUV/画像エディターに表示され,シームで切り離されているかどうかが確認できます.

#ref(./3d_scan_27.jpg,60%)

シームを付け忘れた場合は新たにシームを付けた後,もう一度頂点を全選択して[展開]を押すと展開図が更新されます.


**展開図の保存 [#rce72de1]
展開図を画像としてエクスポートします.
UV/画像エディターウィンドウの下にある[UV]から,[UV配置をエクスポート]を押します.

ファイル形式を選択し,画像を保存することができます.

#ref(./3d_scan_28.jpg,60%)

**オブジェクトのエクスポート [#l1802aa8]
エクスポートしたいオブジェクトを選択します.

インフォメーションウィンドウから[ファイル],[エクスポート],[X3D Extensible3D(.x3d)]を押します.

#ref(./3d_scan_29.jpg,60%)

[選択物のみ]にチェックをいれ,フォルダ,ファイル名を確認し,[X3Dをエクスポート]を押してエクスポートします.

#ref(./3d_scan_30.jpg,60%)


*x3dファイルの生成 [#q8fa1c64]
**x3dファイルの変換 [#q43f077f]
エクスポートしたx3dファイルをSIGVerse用のx3dファイルに変換する必要があります.

以下のURLを参考にして変換します.

▼一般的な形状ファイルのSIGVerse用X3D形式への変換

http://www.sigverse.org/wiki/jp/?%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AA%E5%BD%A2%E7%8A%B6%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AESIGVerse%E7%94%A8X3D%E5%BD%A2%E5%BC%8F%E3%81%B8%E3%81%AE%E5%A4%89%E6%8F%9B#b510dec7

**x3dファイルの記述 [#lf34bd36]
各パーツはそれぞれ別のオブジェクトとしてx3dファイルになっています.

バラバラになった各パーツを1つのx3dファイルに記述しなおす必要があります.

***ヘッダの記述 [#j0dc6d02]
x3dを記述するためのヘッダとPROTO宣言部を記述します.

PROTO宣言部はHumanoidノード,Jointノード,Segmentノードの定義でできた部分です.

詳しいソースコードはサンプルファイルを参照してください.

***関節の定義 [#ybe7b550]
モデルにHumanoidノードが一つだけ存在するようにします.

関節はJointノードを用いて定義します.

nameに関節の名前を指定します.translationに親ノードからの相対座標を指定します.

jointTypeに”free”,”rotate”,”slide”,”fixed”のいずれかを指定します.

jointAxisに 関節のベクトルを指定します.

1つの関節に,2自由度,3自由度与えたい場合は,JointノードにさらにJointノードを記述します.

jointAxisを変えることで,自由度が増えます.関節の親子関係も同様に,JointノードにさらにJointノードを記述します.

***オブジェクトの形状の記述 [#xf725675]
Jointノードに1つ以上のLinkノードを記述します.

Linkノードにオブジェクトの形状を記述します.

オブジェクトの形状はTransformノードに記述されています.

コンバートしたx3dファイルをテキストエディターで開きます.

コンバートしたx3dファイルの<Transform ~ </Transform>をコピーします.

作成したx3dファイルのリンクさせたい関節のLinkノードにペーストします.

詳しい記述箇所はサンプルファイルを参照してください.

***参考URL [#qfc24aa3]
▼ロボット・環境モデル記述形式
http://www.openrtp.jp/openhrp3/jp/create_model.html 

Front page   Edit Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes