cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

ArUco 3.0.4を試す

OpenCVのChArUcoを試して、とても便利だということがわかりました。
十分速いのですが、ArUco3.0は速さを追求しているとのことなので気になります。
#そもそもOpenCVに搭載されているArUcoのバージョンはいくつなんでしょうか???(あとでちゃんと調べる)
本家のArUcoには2017年12月のタイムスタンプのArUco3.0.4がありますので、これを試してみたいと思います。
https://sourceforge.net/projects/aruco/files/3.0.0/

build

は、Linuxの場合はcmakeで行います。READMEにも雑な説明があります。

> cd aruco304
> mkdir build
> cd build
> cmake ..
> make

キャリブレーション utils_calibration/aruco_calibration

まずキャリブレーションボードを印刷します。ソースコードのあるaruco304/utils_calibrationの下に
aruco_calibration_grid_board_a4.pdf を紙に印刷してマーカーの一辺の長さを正確に測ります。ここでは38mmでしたので、メートル単位に直して0.038をメモしておきます。

キャリブレーションの実行はこんな感じ。

./aruco_calibration live:2 camera.yaml -size=0.038

live:0がカメラID0番の指定でdefaultになっています。EuclidのRGBカメラはid2番なので2を指定します。
camera.yamlキャリブレーション結果の出力ファイル名です.
size引数はomittedとのことなので、なくても良いようです。

ターミナルにはマーカーを検出できたフレームのスケール係数が表示されています。

#/markerdetector.cpp:519:detect#Scale factor=0.555556
#/markerdetector.cpp:519:detect#Scale factor=0.625
#/markerdetector.cpp:519:detect#Scale factor=0.689655

f:id:cvl-robot:20180130151127p:plain

ライブ検出 utils_gl/aruco_test_gl

キャリブレーション結果を利用して他のアプリケーションを試してみたいと思います。姿勢推定の結果を元に3次元モデルを表示するというのが本来の使い方でしょうから、それを試します。

./aruco_test_gl live ../utils_calibration/camera.yaml 0.038

ターミナルにはよくわからないメッセージが出ています。

CameraParameters::glGetProjectionMatrix :: The camera has distortion coefficients /home/euclid/workspace/aruco304/src/cameraparameters.cpp 232

f:id:cvl-robot:20180130153959p:plain
マーカー上にBOXが表示されています。

utils_svm/aruco_test_svm

どこかの論文に提案した手法の実装だそうですが、READMEには論文名が出ていないので詳細は不明です。
動きはしますが、遅くて、よくわかりません。

./aruco_test_svm live:2 cv3_rbf_c32_g0.0078125.yml ../utils_calib/camera.yaml 0.038

7=(499.654,450.606) (466.379,391.651) (527,387) (565.802,443.24) Txyz=0.106469 0.0942053 0.309971 Rxyz=1.56111 -1.79578 1.15099
10=(461,382) (437,334) (491,330) (521,376) Txyz=0.102224 0.0726061 0.363513 Rxyz=1.57883 -1.84073 1.05387
19=(486.564,454.166) (414.222,460.742) (390,400) (453,394) Txyz=0.0650964 0.0976071 0.306626 Rxyz=-0.209112 -2.96865 1.5924
Time detection=120.453 milliseconds nmarkers=1
6=(296,243) (291,246) (264,231) (295,238) Txyz=-0.0340864 0.0075678 0.940605 Rxyz=0.568615 3.08087 2.04889

f:id:cvl-robot:20180130154446p:plain

まとめ

aruco3.0.4を試してみました。よく動くことが確認できました。OpenCV版との違いはよくわかりませんでした。これは、こちらの実験環境の問題で、おそらくIntel Euclidが動体を見るにはシャッタースピードが速くない、ので、ちょっと早く動かすとブレてしまうことが問題なのだと思います。ハイスピードカメラで試したいところです。

openFrameworksに取り込むために、cmakeに頼らないビルドの例

aruco_calibration.cppだけをビルドしてa.outを得るためのコマンド例。openFrameworksで動かすためには、これらのInclude PathとSrcの追加をしてやる必要があります。

g++ aruco_calibration.cpp calibrator.cpp -I../src -I../3rdparty/eigen3 -std=c++11 -lpthread ../src/*.cpp ../src/markerlabelers/*.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`

aruco_test_gl.cppだけをビルドしてa.outを得るためのコマンド例。

g++ aruco_test_gl.cpp -I../src -I../3rdparty/eigen3 -std=c++11 ../src/*.cpp ../src/markerlabelers/*.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv` `pkg-config --static --libs gl` -lglut