Gazebo + ROS で自分だけのロボットをつくる 3.COLLADAファイルをつくる

# はじめに
今回は、手順3.についてです。

0. [完成までの手順](http://qiita.com/RyodoTanaka/items/c3014fd6d0f06d12814f)
1. [好きなCADソフトを使ってSTLファイルを作る](http://qiita.com/RyodoTanaka/items/cad2cf100dd916d56717)
2. [好きなソフトを使ってCOLLADAファイルを作る](http://qiita.com/RyodoTanaka/items/b1ebd48da81669db7409)    **←今ココ**
3. [URDFファイルを作る](http://qiita.com/RyodoTanaka/items/174e82f06b10f9885265)
4. [GazeboとROSの連携](http://qiita.com/RyodoTanaka/items/6fa7e45f98b55376a95b)
5. [ros_controlについて](http://qiita.com/RyodoTanaka/items/e7feb74d0e29a8598f48)
6. [実際にlaunchしてみる](http://qiita.com/RyodoTanaka/items/af834ed767589a02e27a)

# COLLADAについて
COLLADAが何かについては、[前の投稿](http://qiita.com/RyodoTanaka/items/cad2cf100dd916d56717)で説明していますが、要は、テクスチャをつけて使いたいときに使うデータ形式です。
なんでCOLLADAを使うの？っていう疑問については、参考1をご覧いただけると良いかと思います。
この、COLLADAデータを作るには、レンダリングソフトを使って作成してゆきます。レンダリングソフトには、以下のものがあるようです。

- [Blender](https://blender.jp/)  
  **無料のレンダリングソフト**。いろんなところで使っているのを目にされると思います。  
  なんと言っても**無料なのに高機能**なのが売りです。本記事では、このソフトを使ったCOLLADAファイルの作り方を紹介します。
- [Open COLLADA](http://www.opencollada.org/)  
  こちらも**無料のソフト**。PR2のCOLLADAファイルの編集で使用されているようです。私は使ったことがありませんので使い方は割愛しますが、ちょっと調べれば、[インストールから丁寧に教えてくれる動画](https://www.youtube.com/watch?v=Yvo7aJCO42s)もあるようです。


# Blenderのインストール
Ubuntu14.04においては、PPAを追加した後、**apt**で手に入ります。~~イージー過ぎますね。~~

```bash
$ sudo add-apt-repository ppa:irie/blender
$ sudo apt-get update
$ sudo apt-get install blender
```
**ただし、Ver.2.7以上が必要**です。でないと、COLLADAファイルが扱えません...orz
ちなみに、**PPAを追加しないでaptすると、2016/03/24時点では、バージョン2.69が入るので注意が必要**です。
バージョンは

```bash
$ blender --version
```
で確認できます。

# STLにテクスチャをつけてCOLLADAで出力する
流れはタイトルの通りですが、結構いろんなノウハウがあるので参考にしていただけるとありがたいです。
### 1. 新規Editの始め方と初期設定
まずは、Blenderを立ち上げます。

```bash
$ blender
```

すると、こんな感じの画面が出てきたと思います。
![start.png](https://qiita-image-store.s3.amazonaws.com/0/110699/ca9e1205-aea2-9aee-6be6-5c321d361e4e.png)
出なかったら失敗です。最初からやり直してください。
続いて、初期設定を行っていきます。
といっても、やることは、COLLADAファイルに記載されるAuthorを設定するだけです。
日本語化については、出力されるデータに日本語がついたりする（テクスチャデータが日本語だった時などは特に）のが嫌なので行いません。
ですが、日本語に設定しても同じことができますし、テクスチャデータが日本語でもROSで動きます。これについては好みです。
ちなみに、日本語化する方法は、参考4のサイトに載っています。
というわけで、Blenderを開いたら、

1. **Cntl + Alt + U** もしくは、**画面左上のFile->User Preference** より、**Blender User Preference**を開いてください。
   ![Screenshot 2016-03-24 20:41:48.png](https://qiita-image-store.s3.amazonaws.com/0/110699/e08646b9-b461-6535-2c63-e7025907708b.png)  

2. **File**タブの一番下にある**Author**の項目に、希望の名前を書く（英語で書くのがおすすめ）。
   ![Screenshot 2016-03-24 20:48:52-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/e95879a9-1c62-90eb-6cac-06d332c15e56.png)

3. ウィンドウの左下の**Save User Settings**を押して、設定を保存する。
   ![Screenshot 2016-03-24 20:48:52-edit2.png](https://qiita-image-store.s3.amazonaws.com/0/110699/824c5b87-be81-c842-afe4-b981e48ada65.png)

以上で、初期設定は完了です。

### 2. STLのインポート
インポートの前に、デフォルトで出ている立方体を**Delete**キーを押して消去します。
その後、**File**メニューの**Import**より、編集を希望するSTLファイルをインポートします。
インポート画面は以下のとおりです。普通にGUI操作を行い、編集したいSTLデータを選んで、インポートしてください。
![Screenshot 2016-03-24 23:27:04.png](https://qiita-image-store.s3.amazonaws.com/0/110699/689c4f7d-5f7e-e149-fae7-99c35ff62f6a.png)  
![Screenshot 2016-03-24 23:26:13.png](https://qiita-image-store.s3.amazonaws.com/0/110699/74028b72-39ca-2a7b-5b5a-9fe12096fd87.png)
こんな感じでインポートできたと思います。
本記事ではスイッチボックスを作ってみたいと思います。

### 3. COLLADAファイルを作ってエクスポートする
COLLADAファイルを作るにはいくつか手順があります。

1. メートル単位系にする **←楽**
2. マテリアルを設定する **←楽**
3. UV展開を行う  **←大変**
4. テクスチャを編集する **←大変**
5. テクスチャを適用する **←楽**
6. COLLADAファイルとしてエクスポートする **←楽だけど要注意**
7. COLLADAファイルを組み合わせてエクスポートする（発展） **←覚えておくと神**

以上です。では、一つずつ見てゆきます。

#### 1. メートル単位系にする
![Screenshot 2016-03-24 23:32:55-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/4d91fd7a-23af-294d-2d9c-ee001c589e13.png)
これにより、メートル単位で編集を行うことができるようになります。
また、この時に、インポートしたSTLのサイズが適正かどうか確認してください。**N**を押すと、モデルの大きさ情報が出てくるのでそれを使って確認するか、表示されているグリッド（1m/１マス）と見比べて大体の大きさを確認する方法があります。
ここでよくあるミスは、モデルが、想定の1000倍になっているというものです。これは、STLデータの単位系がミリメートルになっているのが原因です。

#### 2. マテリアルを設定する

![Screenshot 2016-03-25 00:00:50-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/2934529c-6213-86b4-0960-efb58168fc20.png)  
![Screenshot 2016-03-25 00:07:50-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/2a3e5b0f-2be2-e72f-bc6c-292836a14761.png)
Intensitは、色の強度を0.0〜1.0の間で、Emitは、発光強度を0.0〜1.0の間で設定できます。COLLADAでは、発光する物体を定義できませんが、これが0.0のままだと、真っ黒な物体を出力してしまうので、0.45ぐらいの値を設定しておきます。因みに1.0に設定すると、真っ白になります。

#### 3. UV展開を行う
UV展開とは、テクスチャを貼るために、物体の展開図を作成することを指します。展開図にテクスチャ画像を取り付け、展開図の座標から立体のどの位置に当たるかを計算することで、画像をテクスチャとして立体に当てはめることができます。
というわけで具体的な方法ですが、まずは下の動画をご覧ください。めっちゃわかりやすいです。神動画です。
4分９秒しか無いので、是非全編をご覧ください。

[![Blender入門講座](http://img.youtube.com/vi/IXXN3p8aCIM/0.jpg)](https://www.youtube.com/watch?v=IXXN3p8aCIM)

上の動画では、

- UV展開のやり方
  1. Seam(展開するときの切り口)を指定 （辺選択でやるとやりやすい）
  2. UV展開を行う
- UV展開図の頂点位置の変更方法（もちろん、変更しなくても良い）
  1. 頂点を選択
     - **右クリック**：一点ずつの選択
     - **Cntl + 左クリック**：自由選択
     - **A**：全選択 Cntl + 左クリック：自由選択
  2. **G**を押して頂点の位置を移動
  3. 左クリックで決定

- テクスチャファイルの選択方法

が説明されています。
これに加えて、以下の要素を知っておくほうが編集を行い易いので、ご紹介しておきます。

1. UV展開図のエクスポート
  ![Screenshot 2016-03-28 15:00:14-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/5fea9732-28a8-61c7-6d08-acd5d8e8b1d1.png)
  後は、好きな場所に展開図を保存してください。これを元にGimp等のソフトでテクスチャを作るとやりやすいです。
  Gimpの使い方については割愛します。

2. スマートUV展開のやり方
   ![Screenshot 2016-03-28 15:07:43-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/129aa102-00f1-7a18-d4c6-16f45e28edab.png)
  これだけです。めっちゃ楽です。普通の**Unwrap**とは異なり、ある程度綺麗に展開してくれます。
  またその際に、**Seam**を適用していなくてもいい感じで展開してくれます。なれると重宝します。

未だ検証していませんが、バンプマッピングというのもできるかもしれません。
[![バンプマッピング](http://img.youtube.com/vi/8d3OtRust4Y/0.jpg)](https://www.youtube.com/watch?v=8d3OtRust4Y)

検証頂いた方はご一報をお願いいたします。
#### 4. テクスチャの編集を行う
テクスチャの編集は、好きなソフトでどうぞ。というのが正直なところです。
ロボットの表面に独自のお絵かきをしたいのなら、ペイントソフト（[Inkscape](https://inkscape.org/ja/)とか）でやるのがお勧めですし、
色を塗るだけだったり、ロゴを貼り付けるだけなら、画像編集ソフト（[Gimp](https://www.gimp.org/)とか）がお勧めです。
それぞれの使い方については割愛します。
本記事では、スイッチボックスを例にしており、色を塗ってロゴを貼るだけだったので、Gimpを使いました。
因みに、出来上がったテクスチャはこんな感じです。
![switch_box_texture.png](https://qiita-image-store.s3.amazonaws.com/0/110699/ca0f8e46-0e5e-bbdd-9e63-725332159a80.png)
このテクスチャもGimpの保存データもGitHubにアップしておりますので、
もし気になる方は、
https://github.com/CIR-KIT/4th_Robot_CAD/blob/master/DAE/RAW/body/switch_box/
までどうぞ。

#### 5. テクスチャを適用する
テクスチャの作成が完了したら、これを適用する作業に移ります。
すでに動画をご覧頂いた方ならお分かりいただけるかと思いますが、一応やっておきます。
![Screenshot 2016-03-28 15:41:07-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/1ddcbd95-76e3-c98c-e361-aa294f5e9e5f.png)  
![Screenshot 2016-03-28 15:47:17-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/728f6c92-cdd9-4565-4776-d7e476a668a9.png)  
![Screenshot 2016-03-28 16:00:59-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/cb25520b-ae98-8dab-dc8f-f1b5b8b2fa02.png)  
![Screenshot 2016-03-28 16:01:39-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/a828edf4-5cca-9cc9-e958-f700ab773099.png)  
![Screenshot 2016-03-28 16:02:35-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/22be0085-45e4-ec0c-2ac2-fed55d3d7a41.png)  
![Screenshot 2016-03-28 16:03:02-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/b5a9eebc-8765-08a4-092e-ba4cb78ff6b5.png)  
![Screenshot 2016-03-28 16:03:46-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/0d29ed19-2dc0-6109-1546-8c1e983a3fda.png)
以上です。絵ばっかですが、こっちの方がわかりやすいですね。
何より、紹介した動画をご覧いただくことを強くおすすめします。

#### 6. COLLADAファイルのエクスポート
さて、最後にCOLLADAファイルのエクスポートですが、一見簡単そうで、**要注意ポイントが有り**ます。
私はこれに気づかず、1日を無駄にしてしまいました...orz

1. **File** -> **Export** -> **COLLADA** の順にクリックし、エクスポートウィンドウを出す。
2. ウィンドウ左の**Texture Option**にあるチェックマークを下図の通りにしてください。  
   デフォルトではココにチェックマークが入っていません。
   ![Screenshot 2016-03-28 16:24:56-edit.png](https://qiita-image-store.s3.amazonaws.com/0/110699/e5f89f12-5014-9132-c4ea-bc5391838172.png)  
   これが入っていないと、**せっかく作ったテクスチャが適用されないままエクスポートされることになります**。  
   要注意です。必ず、**上図のようにチェックマークを入れてください**。大事なことなので２回言いました。

#### 7. COLLADAファイルを組み合わせてエクスポートする（発展）
これまでの手順で、基本的なCOLLADAファイルの作り方はお分かりいただけたと思います。
しかし、**UV展開だけでは、下図のようなロボットを作ることは不可能**です！
![Screenshot 2016-03-25 01:23:54.png](https://qiita-image-store.s3.amazonaws.com/0/110699/7a3401c4-0520-edcc-ed20-b91b2354b488.png)
このロボットは、**タイヤx2 + 胴体 + 各種センサ**という作りになっているので、
胴体の部分については、テクスチャだけでは色の塗り分けができません。
そこで胴体部分は、
**各パーツのCOLLADAファイルを一度作成し、改めて組み合わせたCOLLADAファイルを出力する**という方法をとっています。
どういうことかわかりづらいかと思いますので、簡単な例をご紹介します。
例えば、先ほど作成したスイッチボックスと黒いアルミフレームを合体させるとします。つまり、
![Screenshot 2016-03-28 16:50:04.png](https://qiita-image-store.s3.amazonaws.com/0/110699/faa19a70-a60f-cbb0-fc32-9cb6d3688305.png)
こんな感じのパーツを作りたいとします。
その際には、

1. CADソフトで各パーツ（フレームとスイッチボックス）をアセンブリする（共通の原点座標をもたせる）
2. 各パーツ（フレームとスイッチボックス）をアセンブリした時の原点座標系でそれぞれSTLファイルに出力する
3. 各パーツについてそれぞれCOLLADAファイルを作成する
4. 各COLLADAファイルをすべてインポートする
5. すべてインポートしたら新たなCOLLADAファイルとしてエクスポートする

という手順で行います。
気づいてしまえばなんと言うこともない手順です。
因みに、アセンブリデータを作る際の原点座標は、後々URDFを作るときに便利なので、
ROSで使いたい座標系にしておく事をおすすめします。
例えば胴体なら、**base_link**の座標系にしておくということです。

# まとめ
ということで、少し長かったですが、Blenderを用いたCOLLADAファイルの作成について私のゲットしたノウハウを詰め込みました。
次はいよいよ、作成したCOLLADAファイルをROSで使うためのURDFの作成です！
ご指摘や質問などございましたら是非コメントをお願いいたします。m(_ _)m

# 参考
1. Diankov, Rosen, et al. "COLLADA: An Open Standard for Robot File Formats." Proceedings of the 29th Annual Conference of the Robotics Society of Japan, AC2Q1–5. http://www.jsk.t.u-tokyo.ac.jp/rsj2011/_downloads/2Q1-5.pdf as of 2016/03/24. 2011. 
2. https://blender.jp/
3. http://www.opencollada.org/
4. https://github.com/PR2/pr2_common/blob/indigo-devel/pr2_description/meshes/head_v0/head_tilt.dae
5. http://freefielder.jp/blog/2014/12/blender-ubuntu-settings.html
6. https://www.youtube.com/watch?v=BSG_JBLPLqQ
7. https://www.youtube.com/watch?v=8d3OtRust4Y

# **動作環境**
| | |
| :---: | :---: |
| **PC** | Lenovo ThinkPad X240 |
| **Prosessor** |  Intel Core i7-4600U (2.10GHz, 4MB, 1600MHz) |
| **RAM** | PC3-12800 DDR3L (8GB) |
| **OS** | Ubuntu 14.04 LTS 64bit |
| **Kernel** | 3.13.0-44-generic |

| | |
| :---: | :---: |
| **PC** | Desktop |
| **Prosessor** |  Intel® Core™ i5-4460 CPU @ 3.20GHz × 4  |
| **RAM** | DDR3 (24GB) |
| **OS** | Ubuntu 14.04 LTS 64bit |
| **Kernel** | 3.13.0-83-generic |