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


はじめに

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

  1. 完成までの手順
  2. 好きなCADソフトを使ってSTLファイルを作る
  3. 好きなソフトを使ってCOLLADAファイルを作る ←今ココ
  4. URDFファイルを作る
  5. GazeboとROSの連携
  6. ros_controlについて
  7. 実際にlaunchしてみる

COLLADAについて

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

  • Blender
    無料のレンダリングソフト。いろんなところで使っているのを目にされると思います。
    なんと言っても無料なのに高機能なのが売りです。本記事では、このソフトを使ったCOLLADAファイルの作り方を紹介します。
  • Open COLLADA
    こちらも無料のソフト。PR2のCOLLADAファイルの編集で使用されているようです。私は使ったことがありませんので使い方は割愛しますが、ちょっと調べれば、インストールから丁寧に教えてくれる動画もあるようです。

Blenderのインストール

Ubuntu14.04においては、PPAを追加した後、aptで手に入ります。イージー過ぎますね。

$ 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が入るので注意が必要です。
バージョンは

$ blender --version

で確認できます。

STLにテクスチャをつけてCOLLADAで出力する

流れはタイトルの通りですが、結構いろんなノウハウがあるので参考にしていただけるとありがたいです。

1. 新規Editの始め方と初期設定

まずは、Blenderを立ち上げます。

$ blender

すると、こんな感じの画面が出てきたと思います。

出なかったら失敗です。最初からやり直してください。
続いて、初期設定を行っていきます。
といっても、やることは、COLLADAファイルに記載されるAuthorを設定するだけです。
日本語化については、出力されるデータに日本語がついたりする(テクスチャデータが日本語だった時などは特に)のが嫌なので行いません。
ですが、日本語に設定しても同じことができますし、テクスチャデータが日本語でもROSで動きます。これについては好みです。
ちなみに、日本語化する方法は、参考4のサイトに載っています。
というわけで、Blenderを開いたら、

  1. Cntl + Alt + U もしくは、画面左上のFile->User Preference より、Blender User Preferenceを開いてください。

  2. Fileタブの一番下にあるAuthorの項目に、希望の名前を書く(英語で書くのがおすすめ)。

  3. ウィンドウの左下のSave User Settingsを押して、設定を保存する。

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

2. STLのインポート

インポートの前に、デフォルトで出ている立方体をDeleteキーを押して消去します。
その後、FileメニューのImportより、編集を希望するSTLファイルをインポートします。
インポート画面は以下のとおりです。普通にGUI操作を行い、編集したいSTLデータを選んで、インポートしてください。



こんな感じでインポートできたと思います。
本記事ではスイッチボックスを作ってみたいと思います。

3. COLLADAファイルを作ってエクスポートする

COLLADAファイルを作るにはいくつか手順があります。

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

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

1. メートル単位系にする


これにより、メートル単位で編集を行うことができるようになります。
また、この時に、インポートしたSTLのサイズが適正かどうか確認してください。Nを押すと、モデルの大きさ情報が出てくるのでそれを使って確認するか、表示されているグリッド(1m/1マス)と見比べて大体の大きさを確認する方法があります。
ここでよくあるミスは、モデルが、想定の1000倍になっているというものです。これは、STLデータの単位系がミリメートルになっているのが原因です。

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




Intensitは、色の強度を0.0〜1.0の間で、Emitは、発光強度を0.0〜1.0の間で設定できます。COLLADAでは、発光する物体を定義できませんが、これが0.0のままだと、真っ黒な物体を出力してしまうので、0.45ぐらいの値を設定しておきます。因みに1.0に設定すると、真っ白になります。

3. UV展開を行う

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

Blender入門講座

上の動画では、

  • UV展開のやり方
    1. Seam(展開するときの切り口)を指定 (辺選択でやるとやりやすい)
    2. UV展開を行う
  • UV展開図の頂点位置の変更方法(もちろん、変更しなくても良い)

    1. 頂点を選択
      • 右クリック:一点ずつの選択
      • Cntl + 左クリック:自由選択
      • A:全選択 Cntl + 左クリック:自由選択
    2. Gを押して頂点の位置を移動
    3. 左クリックで決定
  • テクスチャファイルの選択方法

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

  1. UV展開図のエクスポート

    後は、好きな場所に展開図を保存してください。これを元にGimp等のソフトでテクスチャを作るとやりやすいです。
    Gimpの使い方については割愛します。

  2. スマートUV展開のやり方

    これだけです。めっちゃ楽です。普通のUnwrapとは異なり、ある程度綺麗に展開してくれます。
    またその際に、Seamを適用していなくてもいい感じで展開してくれます。なれると重宝します。

未だ検証していませんが、バンプマッピングというのもできるかもしれません。
バンプマッピング

検証頂いた方はご一報をお願いいたします。

4. テクスチャの編集を行う

テクスチャの編集は、好きなソフトでどうぞ。というのが正直なところです。
ロボットの表面に独自のお絵かきをしたいのなら、ペイントソフト(Inkscapeとか)でやるのがお勧めですし、
色を塗るだけだったり、ロゴを貼り付けるだけなら、画像編集ソフト(Gimpとか)がお勧めです。
それぞれの使い方については割愛します。
本記事では、スイッチボックスを例にしており、色を塗ってロゴを貼るだけだったので、Gimpを使いました。
因みに、出来上がったテクスチャはこんな感じです。

このテクスチャもGimpの保存データもGitHubにアップしておりますので、
もし気になる方は、
https://github.com/CIR-KIT/4th_Robot_CAD/blob/master/DAE/RAW/body/switch_box/
までどうぞ。

5. テクスチャを適用する

テクスチャの作成が完了したら、これを適用する作業に移ります。
すでに動画をご覧頂いた方ならお分かりいただけるかと思いますが、一応やっておきます。













以上です。絵ばっかですが、こっちの方がわかりやすいですね。
何より、紹介した動画をご覧いただくことを強くおすすめします。

6. COLLADAファイルのエクスポート

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

  1. File -> Export -> COLLADA の順にクリックし、エクスポートウィンドウを出す。
  2. ウィンドウ左のTexture Optionにあるチェックマークを下図の通りにしてください。
    デフォルトではココにチェックマークが入っていません。
    これが入っていないと、せっかく作ったテクスチャが適用されないままエクスポートされることになります
    要注意です。必ず、上図のようにチェックマークを入れてください。大事なことなので2回言いました。

7. COLLADAファイルを組み合わせてエクスポートする(発展)

これまでの手順で、基本的なCOLLADAファイルの作り方はお分かりいただけたと思います。
しかし、UV展開だけでは、下図のようなロボットを作ることは不可能です!

このロボットは、タイヤx2 + 胴体 + 各種センサという作りになっているので、
胴体の部分については、テクスチャだけでは色の塗り分けができません。
そこで胴体部分は、
各パーツのCOLLADAファイルを一度作成し、改めて組み合わせたCOLLADAファイルを出力するという方法をとっています。
どういうことかわかりづらいかと思いますので、簡単な例をご紹介します。
例えば、先ほど作成したスイッチボックスと黒いアルミフレームを合体させるとします。つまり、

こんな感じのパーツを作りたいとします。
その際には、

  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