OpenRTM-aistにはいくつかのサンプルコンポーネントが付属しており、簡単に使ってみれます。 (CameraViewer/OpenCVCameraコンポーネントにはOpenCVが必要です。) また、サンプルコンポーネントのソースコードも付属していますので、開発の参考にしてください。
本章では、OpenRTM-aistに付属のサンプルについて説明します。サンプルコンポーネントを使ってみる場合は、サンプルコンポーネントを起動する前にネーム・サービスを起動しておいてください。ネーム・サービス用のプログラムとしては以下のものが用意されています。
Windowsでネーム・サーバーを実行するには、該当するファイルをエクスプローラーで見つけダブルクリックしてください。インストーラーを用いてインストールした場合は、[スタートメニュー]>[OpenRTM-aist]>[Start Naming Service]としてもネームサービスを起動できます。 なお、本章ではRTSystemEditorがインストールされた環境であることを想定して説明しています。 RTSystemEditorのインストールについての詳細は、OpenRTPのインストールを参照してください。
このサンプルは、OpenRTM-aistのC++版、Python版、Java版に付属されています。
InPort、OutPortの使用方法のサンプルです.ConsoleInコンポーネントとConsoleOutコンポーネントを起動させます。 Port間を接続すると、ConsoleIn側で入力した数字が、ConsoleOut側に表示されます.Port間はRTSystemEditorを用いる以外にrtshellコマンドを実行することで接続できます。
SimpleIOのサンプルは、ConsoleInで入力された数字をデータポートからConsoleOutへ送って、ConsoleOut側にも同じ数字を表示させるサンプルです。 ConsoleInの画面から数字を入力してください。そうするとConsoleOutで入力した数字が出力されます。
Windowsの場合 | Linuxの場合 | |||
ConsoleInコンポーネント | ConsoleOutコンポーネント | ConsoleInコンポーネント | ConsoleOutコンポーネント | |
C++版 | ConsoleIn.bat | ConsoleOut.bat | ConsoleInComp | ConsoleOutComp |
Python版 | ConsoleIn.bat | ConsoleOut.bat | ConsoleIn.py | ConsoleOut.py |
Java版 | ConsoleIn.bat | ConsoleOut.bat | ConsoleIn.sh | ConsoleOut.sh |
InPort、OutPortの使用方法を示したサンプルです。SeqInコンポーネントとSeqOutコンポーネントを起動するとGUIまたはコンソール画面が表示されます。 SeqIn、SeqOutともに以下の型のDataPortを備えています。 TimedShort、TimedLong、TimedFLoat、TimedDouble、TimedShortSeq、TimedLongSeq、TimedFLoatSeq、TimedDoubleSeq、各Portの出力は乱数で決定しており、各Port間を接続するとSeqOut側の出力値、SeqIn側の入力値がそれぞれのGUIまたはコンソール画面に表示されます。(Port間の接続にはRTSystemEditorを利用ください。)
SeqIOのサンプルは、SeqOutから連続して出力される数値データをデータポートからSeqInへ送り、GUIまたはコンソール上に表示させるサンプルです。 SeqOutとSeqInの対応するポートをRTSystemEditor上で接続してください。両コンポーネントをアクティベートするとSeqOutだけでなくSeqInの出力される数値も連続的に変化し、データポートの入出力が観察できます。
Windowsの場合 | Linuxの場合 | |||
SeqInコンポーネント | SeqOutコンポーネント | SeqInコンポーネント | SeqOutコンポーネント | |
C++版 | SeqIn.bat | SeqOut.bat | SeqInComp | SeqOutComp |
Python版 | SeqIn.bat | SeqOut.bat | SeqIn.py | SeqOut.py |
Java版 | SeqIn.bat | SeqOut.bat | SeqIn.sh | SeqOut.sh |
InPortから入ったデータをある基準で判別してOutPortに別の形の出力をするコンポーネントです。SeqIn、SeqOutとともに使用できます。
各Port間を接続するとSeqOut側の出力値、SeqIn側の入力値がそれぞれのコンソール画面に表示されます。(Port間の接続にはRTSystemEditorを利用ください。)
Autocontrolのサンプルは、Sensから入力したデータの4番目の要素をConfigurationで設定できるパラメータdistance_to_envと比較して、その値以下ならvelポートより(turn_vel, - turn_vel)をその値より大きければ(velocity, velocity)の出力をするコンポーネントです。
Autocntrol, SeqOutとSeqInの対応するポートをRTSystemEditor上で接続してください。両コンポーネントをアクティベートするとSeqOutだけでなくSeqInの出力される数値も連続的に変化し、データポートの入出力が観察できます。
複合コンポーネントCompositeの使用方法を示したサンプルです。 複合コンポーネントをActivateする前に、複合コンポーネントを構成している子のコンポーネント間を接続する必要があります。
複合コンポーネント内を表示させるため、PeriodicECShareCompositeをダブルクリックすると、別のエディタに表示されますので、コンポーネント間を接続します。
ここではConsoleIn/ConsoleOutコンポーネントと接続した場合の動作例を示します。
ConsoleInで「111」と入力した場合、ConsoleOutで「888」と表示されれば正しい動作です。 複合コンポーネントを構成している子コンポーネントは、入力値(コンソール画面に表示されている値)を2倍して出力しています。
Compositeのサンプルは、入力データポートから受け取った値を、3つの子コンポーネントがそれぞれ2倍の値にして出力しているので、最終的にCompositeの出力データポートから8倍の値が出力されるサンプルです。
Windowsの場合 | Linuxの場合 | |
C++版 | Composite.bat | Composite |
Python版 | Composite.bat | Composite.py |
Java版 | Composite.bat | Composite.sh |
このサンプルは、OpenRTM-aistのC++版、Python版、Java版に付属しています。
ServicePortの使用方法を示したサンプルです。以下に示すIDLを使用してサービスを定義しています。
typedef sequence<string> EchoList; typedef sequence<float> ValueList; interface MyService { string echo(in string msg); EchoList get_echo_history(); void set_value(in float value); float get_value(); ValueList get_value_history(); };
SimpleServiceは、MyServiceConsumerからコマンドを送り、MyServiceProviderでそれを処理させるというサンプルです(※正確には、コマンドの解釈はConsumer側であり、Provider側の関数を呼び出す形で実装されています)。 MyServiceConsumerとMyServiceProviderの対応するポートをRTSystemEditor上で接続し、両コンポーネントをアクティベートします(ActivateするのはConsumer側コンポーネントだけでもよい)とConsumer側プロンプトにコマンド一覧が表示されるので、適当なコマンドを入力してください。Provider側の応答がプロンプト上で観察できます。
コンポーネントの起動はOSやOpenRTM-aistの言語によって異なりますので、以下の表を参考に起動します。
Windowsの場合 | Linuxの場合 | |||
MyServiceConsumerコンポーネント | MyServiceProviderコンポーネント | MyServiceConsumerコンポーネント | MyServiceProviderコンポーネント | |
C++版 | MyServiceConsumer.bat | MyServiceProvider.bat | MyServiceConsumerComp | MyServiceProviderComp |
Python版 | MyServiceConsumer.bat | MyServiceProvider.bat | MyServiceConsumer.py | MyServiceProvider.py |
Java版 | MyServiceConsumer.bat | MyServiceProvider.bat | MyServiceConsumer.sh | MyServiceProvider.sh |
Port間の接続が成功すると、ExtConnectorを実行したコンソールにどのコンポーネントの処理を進めるか選択するメニューが表示されます。 この入力値により、それぞれのコンポーネントは処理を1周期づつ進めていきます。
RTコンポーネントのコンフィギュレーションセットの使用方法を示したサンプルです。 ConfigSampleコンポーネントを起動します。コンポーネントが正常に起動されると、コンフィギュレーション・セットが予め設定された状態となっております。 RTSystemEditorを利用してコンフィギュレーション・セットを確認してみてください。
※コンポーネント起動時に「指定されたパスが見つかりません。」というエラーが発生してしまう場合は、
RTMExamples/ConfigSampleディレクトリ内にあるrtc.confファイル内の「example.ConfigSample.config_file」を次のように修正してください。
.\\RTMExamples\\ConfigSample\\configsample.conf (ディレクトリ名やファイル名の間の文字は'\'ではなく、'\\'とします)
RTSystemEditorのConfigrationViewで選択・設定したConfigrationSetに従ったデータセットをプロンプト上に表示し、絶えず表示更新をし続けます。
Windowsの場合 | Linuxの場合 | |
C++版 | ConfigSample.bat | ConfigSampleComp |
Python版 | ConfigSample.bat | ConfigSample.py |
Java版 | ConfigSample.bat | ConfigSample.sh |
このサンプルは、OpenRTM-aistのJava版のみに付属しています。C++版、Python版に付属していませんので注意ください。
GUI画面を持ったRTコンポーネントのサンプルです。Windowsの場合はGUIIn.bat、Linuxの場合はGUIIn.shを実行することでサンプル・コンポーネントが起動します。
各Portは該当するPort間を接続後、GUI要素横のチェックボックスをONにすることで、入力データを送信します。(Port間の接続にはRTSystemEditorをご利用ください。出力データの確認にはSeqInなどの他サンプルをご利用ください。)
GUIInコンポーネントのGUI画面でチェックを入れたコントロール(スライダー、スピナ)を操作すると、その値の変化にしたがってSeqInのコンソール画面上の値も変化します。
このサンプルは、Python版にのみ付属しています。
tkLRFViewerは、Laser Range Finderセンサーからの出力を表示するRTCの例です。レーザレンジファインダーから入力を扱うRTCを接続して使います。接続するRTCは各自接続するデバイスに合わせて入力してください。例えば、北陽電機株式会社 URGシリーズを参照してみてください。また、LRFセンサーはLaser距離計を回転させながら空間をスキャンし、測定した距離データを逐次送り出すようなセンサーです。データとして、回転角の初期値、終わり値、各距離データの測定を行う角度間隔、そして測定した距離データの列というような形でデータが出力されます。本コンポーネントは、そのスキャンしたデータがどのようになるかを見るためのコンポーネントです。
このコンポーネントを起動すると以下のGUI画面が表示されます。
このRTCを使うには、上記で述べたように、外部につなぐLaser Range Finderセンサーからセンサー出力を読みこみ、それを変換してRangeData型の出力としてOutPortより出力するRTCが必要です。上記のLaser Range Finderに関するリンクを参考にRTCを準備してください。
名前 | 機能 |
Scale Factor | 描画をするにあたって、その距離のベースを480m x 480mの空間のを基本として、スケール値による描画の拡大縮小を行う、一般的な数m X 数mぐらいの範囲の検出には0.01とかの値になるように設定した方が良い※ |
Reset Scale ボタン | Scale Factor 1.0にリセットするボタン |
Axisチェックボックス | このチェックボックスにチェックされているとX軸とY軸の軸が表示される |
Gridチェックボックス | このチェックボックスがチェックされていると目盛線が表示される |
Lineチェックボックス | このチェックボックスがチェックされていると測距データを曲線で描画 |
Fillチェックボックス | このチェックボックスがチェックされていると測距データを塗りつぶされた図形として描画 |
Thresholdチェックボックスとスライダー | チェックされているとパラメータが有効になり、下限値※の処理が行われる、その値より入力距離が小さい場合は、無効と見なし検出距離が1000mと見なす |
Fileter(Time}チェックボックスとスライダー | チェックされている時間軸方向の変化に対するフィルターが融合になり、スライダーで効果度合いを調整 |
Fileter(Spacial)チェックボックスとスライダー | チェックされていると回転方向のスキャンデータの変化に対してのフィルタが有効になり。スライダーで効果度合いを調整 |
※ 現状の表示スケールや、Thresholdの働き方は、あまり現実的に有効な設定となっていません。実際の使用においては、ユーザー環境にあわせてソースコードを書き換え調整することを推奨します。
GUIには以下の画面のような出力がでます。
このサンプルは、OpenRTM-aistのPython版に付属しています。 C++版、Java版には付属していませんのでご注意ください。
GUI画面を持ったRTコンポーネントのサンプルです。TkJoyStickComp.batを実行することでサンプル・コンポーネントが起動されます。 GUI上のジョイスティックをドラッグで移動した位置に応じた値(x, y)を出力します。
このサンプルは、OpenRTM-aistのPython版に付属しています。C++版、Java版には付属していませんのでご注意ください。
GUI画面を持ったRTコンポーネントのサンプルです。TkMobileRobotSimulator.batを実行することでサンプル・コンポーネントが起動されます。
実際にRTCとしてシステムが認識し、Name ServiceでRTCが見えるようにするためには、GUIの右側中央にある[Create]ボタンを押します。GUI上にモータで前後左右に動く物体を模した五角形のオブジェクトが表示されます。InPortへの入力値に応じて、画面上の5角形のオブジェクトが移動します。InPortへの入力はロボットを駆動する左側車輪用モータの回転速度と右側車輪のモータ回転速度になります。まっすぐ頂点方向に進むためには両方の車輪の速度が一緒である必要があります。
TkJoystick(入力デバイス)とTkMobileRobotSimulator接続し、GUI上でJoystickで移動速度を制御するくロボットのシミュレーションをします。
このサンプルは、OpenRTM-aistのPython版に付属しています。 C++版、Java版には付属していませんのでご注意ください。
GUI画面を持ったRTコンポーネントのサンプルです。TkMotorComp.batを実行することでサンプル・コンポーネントが起動します。
このサンプルは、OpenRTM-aistのPython版に付属しています。 C++版、Java版には付属していませんのでご注意ください。
GUI画面を持ったRTコンポーネントのサンプルです。SliderComp.batを実行することでサンプル・コンポーネントが起動します。(以下の画面は、Windowsで動作させた場合のものです。)
SliderCompとTkMotorCompでスライドノブでモータの回転の制御をする環境をGUI上でシミュレーションします。
このサンプルは、OpenRTM-aistのPython版に付属しています。 C++版、Java版には付属していませんのでご注意ください。
GUI画面を持ったRTコンポーネントのサンプルです。TkMotorPosComp.batを実行することでサンプル・コンポーネントが起動します。TkMotorCompがInPortへの入力で回転速度を制御するのに対して本コンポーネントは回転角をInPortへの入力で制御します。
このサンプルは、OpenRTM-aistのPython版に付属しています。 C++版、Java版には付属していませんのでご注意ください。
GUI画面を持ったRTコンポーネントのサンプルです。SliderComp.batを実行することでサンプル・コンポーネントが起動します。(以下の画面は、Windowsで動作させた場合のものです。)
SliderCompとTkMotorPosCompでスライドノブでモータの回転の制御をする環境をGUI上でシミュレーションします。
OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。また、Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。
OpenCVCamera、CameraViewerを起動することで、USBカメラの画像をモニターに表示します。OpenCV画像処理サンプルRTCコンポーネントを接続し、エフェクトをかけられます。
OpenCVCameraはUSBカメラの画像データを取得し、CameraViewerコンポーネントでモニター上に表示するサンプルです。 OpenCVのRTサンプルコンポーネントを間に接続し、画像データにエフェクトをかけることもできます。
起動コマンド | 機能 | configurationパラメータ |
Affine.bat | 入力画像のアフィン変換をします。 | Affine行列 |
BackgroundSubtractionSimple.bat | 入力画像においてKey入力があった時点の画像から変化分を出力します。 | 画像の変化検出の方法示すパラメータ |
Binarization.bat | 入力画像を二値化した白黒画像に変換します。 | 二値化の閾値 |
DialationErosion.bat | ダイアレーション/エロージョン処理を行います。 | 二値化の閾値 |
Edge.bat | X方向一次微分画像、Y方向一次微分画像、ラプラシアン画像(二次微分画像)を出力します | アパーチャーサイズ |
Findcontour.bat | 輪郭抽出をして、輪郭を画像中に表示します。 | 処理前の二値化の閾値、階層化のレベル、表示時の輪郭線のサイズ、輪郭の近似手法 |
Histgram.bat | 白黒化した画像の明度/コントラストの変更処理をしながら、ヒストグラムの変化を表示します。 | 明度、コントラスト |
Hough.bat | ハフ変換による直線抽出 | ハフ変換のパラメータや検出した直線の描画パラメータ |
Perspective.bat | 画像のパースペクティブ変換(斜め下から見たように変換します。 | 項目なし |
RockPaperScissors.bat | 画像でグーチョキパーを判定します。 | solidityに対するジャンケン判定用閾値と膨張縮小処理による欠損補完パラメータ |
Rotate.bat | 画像を回転と縮小拡大処理をします。 | 反時計周りの回転角と縮小拡大率 |
Scale.bat | 画像の縮小拡大処理をします。 | X方向Y方向の拡大縮小率 |
Sepia.bat | 画像のセピア化を行います。 | セピア化の色味 |
Translate.bat | 画像の2次元移動処理をします。 | 移動方向 |
Linuxにおいては一括インストールスクリプトの実行ではOpenCVサンプルコードはインストールされません。サンプルコードのインストールのためには、githubリポジトリよりソースコードを入手してビルドする必要があります。手順は以下のようになります。
$ sudo sh pkg_install_ubuntu.sh -l all --yes
$ sudo apt-get install git $ git clone https://github.com/OpenRTM/ImageProcessing.git $ cd ImageProcessing/opencv $ mkdir build $ cd build $ cmake .. $ make $ ./build_linux_package.sh $ sudo dpkg -i imageprocessing_1.2.1_amd64.deb
OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。また、Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。
Chromakeyは、2つの画面をクロマキー合成をするOpenCVコンポーネントのサンプルです。 OpenCVCamera、CameraViewerといっしょに使用します。
> cd "\Program Files\OpenRTM-aist\1.2.1\Components\C++\OpenCV\vc14" > notepad rtc.conf
manager.components.naming_policy: ns_unique
OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。また、Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。
ObjectTrackingは、画面上から選択したオブジェクトを追跡して、その位置を赤い楕円形でかこんでしめすOpenCVコンポーネントのサンプルです。 OpenCVCamera、CameraViewerといっしょに使用します。
ObjectTrackingは、画面上から選択したオブジェクトを追跡して、その位置を赤い楕円形でかこんでしめすコンポーネントです。ここではUSB Cameraから画像を取り込むためのOpenCVCameraコンポーネント、処理した画像を表示し、またマウスを用いてオブジェクトを選択するために使われるCameraViewerコンポーネントと共に使用します。以下ではWindowsにおいての使い方の説明をします。
OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。また、Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。
ImageSubtractionを起動することによって入力画像から背景画像を取り出し、前景画像部を判定し、それを取り出すマスク画像を、背景画像を出力します。 OpenCVCamera、CameraViewerといっしょに使用します。(なおWindows環境では現状このコンポーネントは再ビルドしないと現在正常に動作しないようなので、Ubuntu 18.04環境での使用を推奨いたします。)
ImageSubtractionは、入力画像から背景画像を取り出すためのコンポーネントです。ここではUSB Cameraから画像を取り込むためのOpenCVCameraと、処理した画像を表示するためのCameraViewerコンポーネントと使用します。
$ cd ImageProcessing/opencv/bin $ sudo vi rtc.conf
manager.components.naming_policy: ns_unique
$ cd ImageProcessing/opencv/bin $ ./CameraViewerComp
$ cd ImageProcessing/opencv/bin $ ./OpenCVCameraComp
$ cd ImageProcessing/opencv/bin $ ./ImageSubtractionComp
なお、コンフィギュレーション・パラメータとして以下のようなものが設定可能です。
パラメータ名 | 意味 |
control_mode | bとmが選択でき、bの時はkeyイベントに伴いバックグラウンドイメージの取り込みが行われ、mの時は画素ごとに閾値を決めるDYNAMIC_MODEと画面全体で一つの閾値を使うCONSTANT_MODEが切り替わります。 |
image_height | 縦方向の画素数を指定しますが、このサンプルでは機能しません。 |
image_width | 横方向の画素数を指定しますが、このサンプルでは機能しません。 |
threshold_coefficient | DYNAMIC_MODEで使う係数 |
constant_threshold | CONSTANT_MODEで使う閾値 |
OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。また、Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。
SubtractCaptureImageは入力画像から、変化のない部分を背景と判断して、前景(移動物)を取り出すマスク画像を出力するコンポーネントで、動的な背景差分法でリアルタイムな背景更新をするコンポーネントのサンプルです。OpenCVCamera、CameraViewerコンポーネントと共に使用します。
SubtractCaptureImageは入力画像で動きがないものを背景とみなして背景とするのと、画面上に新たに追加された物も動きがなくしばらくおいておかれると、それの部分も背景の一部と判定し、背景画像にとりこみます。出力には、入力画像、前景(移動物を示す)のマスク画像、移動物でも背景でもないものを示すマスク画像、背景画像、静止物体の背景化を表示する画像が出力されます。 このコンポーネントを使ってみるためにはCameraViewerを複数起動して複数の出力画像を同時に見るか、CameraViewerとの接続を変えながら、それぞれの出力画像を見ていってください。また入力画像としてOpenCVCameraコンポーネントを使用してみると良いでしょう。
> cd "\Program Files\OpenRTM-aist\1.2.1\Components\C++\OpenCV\vc14" > notepad rtc.conf
manager.components.naming_policy: ns_unique
OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。また、Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。
GUI画面を持ったRTコンポーネントのサンプルです。TkCalibGUI.batを実行することでサンプル・コンポーネントが起動します。 カメラキャリブレーションを行う ImageCalibrationコンポーネント用のGUIです。
本コンポーネントを実行して選択可能リストの中からカメラコンポーネントを指定すると、ImageCalibrationCompと合わせて自動起動し、コンポーネント間のポート接続も自動で行います。 GUIのボタン操作でキャリブレーションに必要なカメラ画像の保存、及び、カメラパラメーターの算出を行うことができます。
OpenRTM-aist C++のWindows用インストーラーを使ってインストールされた場合は、TkCalibGUI.batを実行するだけで動作します。
ソースからビルドされた場合は、実行条件を整える必要があります。本コンポーネントでは実行に必要な環境のチェックを行っています。 条件に合わないと以下のようなメッセージダイアログを表示します。指示に従ってインストールしてください。
メッセージ内容 | 対応処理 |
OpenRTM-aist Python is not installed. | OpenRTM-aist Python版のページからWindows用インストーラーをダウンロードできます。 インストーラーのOSのバージョン(32bit or 64bit)は、OpenRTM-aist C++版に合わせてください。 |
Ttk is not installed. | pyttkをインストールしてください。python2.7には含まれていますが、python2.6では別途インストールが必要です。 |
PIL is not installed. | PILをインストールしてください。 |
NumPy is not installed. | numpyをインストールしてください。 |
rtctree is not installed. | rtctree-3.0.1以上が必要 近日インストーラーを公開予定ですが、それまではgithubのページの右下の「Download Zip」をクリックし、rtc-master.zipファイルをダウンロード・展開し、setup.pyを実行してインストールしてください。(> python setup.py install) site-packages\rtctree\rtmidlへのパスをシステム環境変数のPYTHONPATHに追加してください。 例)C:\Python27\Lib\site-packages\rtctree\rtmidl |
メッセージ内容 | 対応処理 |
OpenRTM-aist Python is not installed. | OpenRTM-aist Python版のページから一括インストールスクリプトをダウンロードできます。 |
Ttk is not installed. | $ sudo apt-get install python-tk |
PIL is not installed. | $ sudo apt-get install python-pil.imagetk |
NumPy is not installed. | $ sudo apt-get install python-numpy |
rtctree is not installed. | rtctree-3.0.1以上が必要 githubからダウンロードし、setup.pyを実行してインストールする手順はWindows環境と同じ。~/.bashrcなどにPYTHONPATHを追加してください。 export PYTHONPATH="/usr/local/lib/python2.7/dist-packages/rtctree/rtmidl" |
最初に使用するカメラコンポーネントをリストの中から選択します。このリストには実行環境で使用可能なカメラコンポーネント名が表示されています。 Windows 10のVC2019の環境ではOpenCVCameraCompとMFCameraCompが選択可能です。この2つはどちらも同じような動作をしますが、OpenCVCameraCompの方が新しく環境依存性も少ないようです。また、このtkCalibGUI.batで起動される実行ファイルにより、ImageCalibrationコンポーネントが起動されます。また、このコンポーネントはImageCalibration.batによって単体起動できますが、単体起動した場合に接続して動作確認するようなコンポーネントは別途準備されていませんので、tkCalibGUIを用いずにImageCalibrationコンポーネントを使用したい場合は、別途接続するコンポーネントをユーザ側で作成してください。
[All Activate]ボタンをクリックするとカメラ映像が表示されます。 この時の全コンポーネントの接続状態は下図の通りです。TkCalibGUI以外のコンポーネントは自動起動され、コンポーネント間も自動接続しています。
チェッカーパターン(キャリブレーションパターン)を用意します。参考として、ここではcheckerboard.pdf を使っています。 チェッカーパターンのコーナー数は、ImageCalibrationのConfigurationで指定する必要があります。パターンの縦横の白と黒四角の共有している頂点の数(checker_h, checker_w)ーこれは白黒の四角の数-1です、と撮影枚数(image_num)もConfigurationで変更可能です。
チェッカーパターンの取り込みは、そのパターンをいろいろな角度でなるべく画面全体をカバーするような形で指定枚数分保存します。[確認]ボタンで保存画像の確認が可能です。[取消し]ボタンをクリックするとその画像は削除されますので保存し直してください。
指定枚数の保存が終了すると[結果表示]ボタンが有効です。これをクリックするとカメラパラメーター値が表示されます。
カメラパラメーターはcamera.ymlのファイル名でコンポーネントの実行ファイルと同じディレクトリに出力されます。
%YAML:1.0 calibration_time: "Thu May 22 16:38:06 2014\n" image_width: 640 image_height: 480 board_width: 13 board_height: 9 cameraMatrix: !!opencv-matrix rows: 3 cols: 3 dt: d data: [ 5.8272934483011682e+002, 0., 3.3703801084645710e+002, 0., 5.8023846162074653e+002, 2.2824562602176763e+002, 0., 0., 1. ] distCoeffs: !!opencv-matrix rows: 1 cols: 5 dt: d data: [ -1.4659954975042236e-001, 5.7825601645508595e-001, -3.3745642103035984e-003, 1.2569676956708463e-003, -9.8011775330916773e-001 ]