2008年3月アーカイブ

さて、現在ARToolKitのソースの公開に向けた準備を進めている最中ですが、
そこで避けては通れない問題があります。

GNU General Public License(以下GPL)の問題です。(wikipediaのGPL解説ページ



----- <GPLの大まかな説明> -----

ARToolKitのソースのライセンスは、このGPLになっています。
ここでは、GPLについて簡単な説明しかしないので、詳細については他のHPを参照ください。
また、"説明が間違っている"、とか"説明が足りない"部分もあるかもしれません。ご注意ください。

ということで、GPLを(誤解を恐れず簡単に)説明すると、以下のような内容になります。

「GPL付きのプログラムを変更し、再配布する場合は、必ず変更したソースコードも一緒に配布しなくていけない」



GPLでは、入手したプログラムを個人や社内"のみ"で使用している場合には、何の制限もありません。
また、プログラムを使用して書き出された出力結果についても、ほとんどの場合扱いは自由です。

しかし、その実行ファイルやソースを配布しようとした時には、いくつかの制限がつきます。
その1つが、改変したソースコードも必ず、全て公開しなくてはいけない、というものです。

もし、それらの制限が守れないのであれば、実行ファイルやソースの配布は絶対にできません。


ですが実際に、これらの制限をちゃんと守っている人がどれくらいいるのかは、ちょっと怪しいところです。
企業であれば、GPL違反は"ソースの公開又は配布の停止"という非常に重い罰則になるので、どこもGPLには気をつけているはずです。

しかし、個人で公開しているフリーウェア等の場合、"ソースの公開又は配布の停止だけ"という罰則は非常に軽いです。
しかも、ARToolKitのようなプログラムならまだしも、そのアプリがGPL違反かどうかなんて、実行ファイルだけでは普通分かりません。




という背景はありますが、僕自身は「規則だから」という問題は抜きにしても、GPLをちゃんと守ってソースを公開したいと思います。(まぁ理由は後で

さて長くなりましたが、では実際にARToolKitで作ったプログラムを公開する際に、注意すべきことを書いてみます。



----- <ARToolKitのGPLで、問題になるのは?> -----

・僕がARToolKitのプログラムをダウンロードし、プログラムを変更する 
→ ○問題ない
 公開しなければ、何も問題ありません。

・改変したプログラムを実行、その出力結果をWebに公開する 
→ △内容にもよるが、概ね問題ない
 実行結果で、ソース自体を出力しないのであれば、問題ありません。
 実行結果のみなら、動画を公開しても大丈夫です。

・もし、このプログラムの実行ファイルのみを、Webに公開したら 
→ ×GPL違反
 ソースの公開等の制限を実行するか、その旨の文章を入れないといけない。

・ARToolKitで使われている画像(マーカーパターンなど)を改変、公開 
→ △場合によりけり
 画像データ等がプログラムの一部として判断されるかは微妙です。
 しかしそうだとしても、僕の場合は改変した画像も既に公開されているので、問題はないと思います。(ソースも必ず完全公開しますし



----- <GPLに違反したら?> -----

上にも書いたように、少なくてもARToolKit(GNU GPL Ver2)の場合は、
ライセンスに書かれている制限(「ソースコードを公開する」又は「配布を停止する」、など)以外の罰則はないようです。



----- <実際に配布時に行わなければいけないこと> -----

これに関しては、GPLの日本語訳が分かりやすいです。
重要そうな所を一部、ARToolKitの例で説明しますと。

●ARToolKitを元に作られたプログラムを配布する時は、その変更箇所を全て公開しなくてはいけない。

●その時に、変更した旨とその変更日とを、そのファイル上に書かなくてはいけない。

●プログラム実行時に著作権等の注意事項を出力する。

●GPLのライセンスが書かれたテキスト(COPYING.txt)を、配布ファイルの中にも入れておくこと。
等々があります。詳しくは、上記リンクを参照してください。



----- <GPLはなんのためにあるのか?> -----

といったように、少し面倒なGPLですが、これにはちゃんと理由があります。

GPLの目的とは、「フリーウェアが誰かの手によって独占的に保持されるのを防ぎ、
ソースを共有することによって、フリーウェアを発展させていきましょう」というものです。

この考え方は、クリエイティブ・コモンズにも似ていますね。
コピーレフトというものらしいです。

ということで、僕はARToolKitがもっと発展してほしいと思っているので、GPLを推奨します。



----- <最後に> -----

何度も書かれているように、なにぶん僕も勉強不足な面があるので、間違ってたり、説明足らずな部分があると思います。
なのでGPLについては、ここを信用しないよう、ご自身でちゃんと調べてください。

また、そういった点があった場合、コメント等に指摘をいただけるとありがたいです。
GPLに関する質問については、答えられないかもしれないです。申し訳ないです。



BGM:エコテロニカ(sansuiさん)
他にもARToolKitを安定化させる要素はいくつかあります。

1.キャリブレーション
2.カメラの設定
3.撮影時の注意
4.その他


1.キャリブレーション
キャリブレーションはカメラの歪み補正値を計算するためのものなので、回数が多いほうが正しい結果が得られます。
また、キャリブレーションパターンの正面からの計測だけでなく、斜めや真横に近い位置からの計測を行ったほうが、安定する気がします。

2.カメラの設定
Webカメラなどでは、明るさやコントラストを調節できるものが多いです。この設定値はカメラ固有のものなので、これが良いという値はありません。
そこで、実際にプログラムを動かしながら、カメラの設定を変更してみてください。
オートフォーカスは切ったほうがいいです。

3.撮影時の注意
パターンの時にも説明しましたが、太陽光など強い光の場合はマーカーにハイライトがあたり、認識がうまくいかなくなるときがあります。蛍光灯の光だけでの撮影をオススメします。
また、カメラを早く動かしたり、手ブレなどにより、マーカーの認識率は極端に悪くなります。カメラはできるだけ固定するのが理想的です。
フレームレートは、やはり大きいほうがモデルの歪みが少ないようです。

4.その他
ARToolKitではマーカーの最大サイズ・最小サイズを決めることができます。ありえないサイズのマーカーは最初から除外する設定にすれば、誤認を防げます。
背景となるステージにはできるだけ物を置かず、白など明るい色の場所を選ぶようにしましょう。
最後に、お金はかかってしまいますが、やはりカメラはできるだけ良いものがいいです。
ちなみに私が使っているWebカメラは、logicoolのQcam Pro for Notebooksです。ノートブックタイプを選んだのは、固定しやすく、小さいので小回りが利くからです。

細かいことですが、マーカーの作成では、パターンの模様以外でも気をつけることがあります。

1.できるだけ大きいマーカーにする
2.カラーパターンを使うときには、プリンターも発色がいいものを使用する
3.厚紙に貼り付けるなど、絵が歪まないようにする
4.mk_patt.exeを実行し、パターンデータを作る際には、実際の撮影環境に近づける



1.できるだけ大きいマーカーにする
マーカーを大きくしたほうが、認識率が上がり、安定性も良くなります。
画面にちゃんと収まる範囲内なら、マーカーは大きいほうがいいです。

2.カラーパターンを使うときには、プリンターも発色がいいものを使用する
安いプリンターなどを使うと、3原色が正しくプリントされない場合があります。またプリンターを持っていない方もいると思います。
僕は、プリンタを持ってはいますが、発色が気になったので、ネットプリントを利用しました。これは、PCからデータをアップロードし、セブンイレブンなどで印刷ができるサービスです。ちょっと印刷代はかかりますが、コンビニのプリンタはそれなりに性能がいいので、時々利用しています。

3.厚紙に貼り付けるなど、絵が歪まないようにする
僕が使っているのは、1mmのイラストレーションボードです。200円ぐらいで東急ハンズなどに売っています。かなり硬く、歪むことはほぼないです。
紙をボードに貼り付けた直後は、本などを重しにして挟んでおきましょう。
ボードをくっつける時には、接がれやすい両面テープなどを使うと便利です。

4.mk_patt.exeを実行し、パターンデータを作る際には、実際の撮影環境に近づける
パターンは光の種類や加減などによって、映り方が変わってしまいます。
できるだけ実際の環境に近い状態でパターンデータを作成したほうが良いと思われます。
太陽光よりも蛍光灯など光のほうが光沢が出にくく、撮影には適しています。

ARToolKitをより安定的なものにするには、プログラムもそうですが、使う道具も考えなければいけません。
その道具の中で重要なものの1つが、マーカーのパターンです。

マーカーの数が少ない場合、その中のパターンはよりシンプルなものの方が認識率が良いです。
シンプルなマーカーは既存のサンプルにも入っています。

pattSample1.gifpattKanji.gif














しかし、マーカーの数が多い場合は、誤認識を避けるために、どうしてもパターンが複雑になってしまいます。
そこで、シンプルさを保ちながら、多くのマーカーを作成する方法として、パターンをカラーにしてみることにしました。
最初に作成したのは、次のようなパターンです。

PattColor02.gifPattColor05.gif














このパターンではマーカー内部を4つに分けて、それぞれの区画に3原色(赤、青、緑)を配置し、その組み合わせでマーカーを区別しています。右下に必ずある黒い区画は、マーカーの方向を決めるためのものです。これだと3×3×3で27通りのパターンを作成することができます。

これを実際に使用すると、以下のようなことがわかりました。
・右下の黒い区画をマーカーの黒枠だと誤認してしまう。
・青が黒に近いので、これもマーカーの黒枠だと間違われることがある。
つまり、マーカー内部に黒に近い四角形があると、誤認の確率が高くなることが判明しました。
この教訓により作成したのが、次のマーカーです。

PattColor12.gifPattColor15_B.gif















なんだか顔みたいですね。
まず、右下の黒い区画を白に変え、次に他の色が四角形にならないように、凹を入れました。あと余計な隙間も一応埋めました。
これで、だいぶ誤認しないようになりましたが、どうせ凹を入れるなら、色によって位置を分けたほうが、個体差が大きくなります。

PattColor22.gifPattColor25_B.gif














今回のパターンでは色によって凹の位置が違います。
というわけで、動画で使われているマーカーはこのパターンになりました。
次は凹をもう少し小さくして、試してみます。


※訂正
パターンの凹を小さくして実験しましたが、どうやらこの凹は要らないようです。
ARToolKitでは黒枠を認識するときに、画像を2値化してます。(パターン認識の時はもちろんカラー画像を使う)
そうなるともう色は関係なく、明るいか暗いかのみの違いになります。
つまり、色の領域が外枠と接してさえいれば、四角形と認識されることはなくなるのです。

PattColor4_10.jpg
PattColor4_12.jpg
















しかし、凹が黒枠の誤認識に効果がなくても、各パターンの誤認識には効果があるかもしれません。
とりあえず、この凹なしのパターンで実験を続けてみて、誤認識の割合を見てみることとします。
「ARToolKitの安定化 その②」は、関係計算時の動作についてです。




BGM:エコテロニカ(sansuiさん)

 今回のプログラムでは、3Dモデルの補完の際に用いる関係値を、事前に計算しなければなりません。
しかし、その計算はほぼ自動で行われます。

○計算時の動作は、大まかに言って以下のようになります。

1.モード切替
    プログラムのモードを、計算用に切り替える

2.マーカーの認識
    画面内のマーカーを認識して、各マーカー座標系からカメラ座標系への変換行列を求める(ここまでは今までと同じ)

3.マーカー間の関係を計算
    マーカーが複数見つかった場合は、それぞれの変換行列を用いて、
その関係行列(マーカーA → マーカーB という座標系変換行列)を計算する。

4.関係の平均値を計算
    これをフレーム毎に行っていき、関係行列の平均値を計算する。

5.計算情報を描画
    平均値のサンプル数や誤差も計算し、この情報を画面に描画して、計算の頃合をユーザーに知らせる。

6.他のマーカーに移る
    ユーザーはこの情報を見て計算が大体終わったことを知り、次のマーカーの処理に移ります。

7.全部終わったら、モードを戻す
    上記の処理を、「同時に表示できるすべてのマーカー」に対して行えば、基本計算は終了です。確認モードに戻して、ちゃんと計算できているかをチェックします。

8.全体の再計算
    全体的に上手くいっていない場合は、すべての数値をリセットして、再計算を行います。

9.個々のデータのみ再計算
    いくつかのマーカーのみが上手くいっていない場合は、該当のマーカーのみをリセットして、再計算することもできます。

10.データの保存
    最後に、このようにして作成したデータを保存し、再起動時や他のプログラムで使用できるようにします。


以上が、関係値計算時の大まかな処理です。


順番が逆になってしまいましたが、動画で紹介した内容を書きます。

最初に、ARToolKitについてまったく知らない方は、youtube等で作品を検索してみるのが一番早いかと思います。
AR(augmented reality)(拡張現実)とはVR(virtual reality)(仮想現実)に近い言葉です。
VRが現実に存在しない仮想空間をメインにするのに対し、ARは現実世界がメインで、そこに対して情報を付加したりします。

ARToolKitはそんなARの技術の1つを、なんとフリーで公開しています。なので、研究レベルのアプリを個人でも作成できてしまうというすばらしいツールなのです。

現在、ネット上の動画サイトで、このツールを使った作品が多数製作されています。

さらに、ARToolKitのプログラムに興味がある方がこちらをご覧ください。
工学ナビ:「攻殻機動隊」「電脳コイル」の世界を実現! - ARToolKitを使った拡張現実感プログラミング


さて、僕が作成したプログラムも、そんなARToolKitを使い、作成したものです。




BGM:エコテロニカ(sansuiさん)

このプログラムは、複数のマーカー間の関係を検出して、その関係を用いて3Dモデルの表示を安定化させるためのものです。

そんなすばらしいARToolKitですが、プログラムには欠点もあります。その1つが、「3Dモデルが消えやすい」というものです。モデルは以下の条件で、簡単に消えてしまいます。
    ・黒い枠を認識できなかったとき
    ・内部のマーカーを認識できないとき
    ・マーカーが画面の外に出たとき
    ・マーカーを裏返したとき
    ・カメラを少し早く動かしたとき

最後の、「カメラを早く動かしたとき」という問題は、カメラの性能やマシンスペックが原因の場合が多いので、ここでは無視しました。

この問題を解決する手段として、MultiMarkerというプログラムがARToolKitに入っています。
しかし、MultiMarkerではマーカー間の関係を自分で定義しなくてはいけません。また、復元できる座標系も1つだけです。

ちなみに、その関係をあらわすデータは以下のようなものです。

#the number of patterns to be recognized
3

#marker 1
Data/multi/patt.a
40.0
0.0 0.0
1.0000 0.0000 0.0000 0.0000
0.0000 1.0000 0.0000 0.0000
0.0000 0.0000 1.0000 0.0000

#marker 2
Data/multi/patt.b
40.0
0.0 0.0
1.0000 0.0000 0.0000  100.0000
0.0000 1.0000 0.0000    0.0000
0.0000 0.0000 1.0000    0.0000

#marker 3
Data/multi/patt.c
40.0
0.0 0.0
1.0000 0.0000 0.0000  200.0000
0.0000 1.0000 0.0000    0.0000
0.0000 0.0000 1.0000    0.0000

marker 1をベースとして、marker 2、marker 3にはmarker 1との関係(座標系の変換行列)が書かれています。
単純なマーカーの配置なら、このように簡単な数値になりますが、ちょっとでも配置をずらすと、数値は急に複雑になります。

そこで、僕の作ったプログラムでは、この数値を自動計算します。
そうすることにより、もっと自由に複数のマーカーを配置して、モデル表示の高い安定性が保てるようになる、という訳です。


ARToolKitの開発を始めました

|

最近、全然日記を更新しなかったんですが、せっせとARToolKitでの開発を行っていました。

とりあえずzoomeに投稿してみたので、興味がある方はどうぞ。

ARToolKitの安定化 その①

このアーカイブについて

このページには、2008年3月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2008年2月です。

次のアーカイブは2008年4月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01a