OpenRTM付属のサンプルについて

OpenRTM-aistにはいくつかのサンプルコンポーネントが付属しており、簡単に使ってみれます。 (CameraViewer/OpenCVCameraコンポーネントにはOpenCVが必要です。) また、サンプルコンポーネントのソースコードも付属していますので、開発の参考にしてください。

本章では、OpenRTM-aistに付属のサンプルについて説明します。サンプルコンポーネントを使ってみる場合は、サンプルコンポーネントを起動する前にネーム・サービスを起動しておいてください。ネーム・サービス用のプログラムとしては以下のものが用意されています。

    • Start Naming Service.bat (C++)
    • rtm-naming.py (Python)

Windowsでネーム・サーバーを実行するには、該当するファイルをエクスプローラーで見つけダブルクリックしてください。インストーラーを用いてインストールした場合は、[スタートメニュー]>[OpenRTM-aist]>[Start Naming Service]としてもネームサービスを起動できます。 なお、本章ではRTSystemEditorがインストールされた環境であることを想定して説明しています。 RTSystemEditorのインストールについての詳細は、OpenRTPのインストールを参照してください。

SimpleIO

このサンプルは、OpenRTM-aistのC++版、Python版、Java版に付属されています。

概要

InPort、OutPortの使用方法のサンプルです.ConsoleInコンポーネントとConsoleOutコンポーネントを起動させます。 Port間を接続すると、ConsoleIn側で入力した数字が、ConsoleOut側に表示されます.Port間はRTSystemEditorを用いる以外にRTShellコマンドを実行することで接続できます。

起動画面

SimpleIO_example_rtse_ja.png
SimpleIO実行例(RTSystemEditor接続画面)

open_consolein_out.png
ConsoleInコンポーネントとConsoleOutコンポーネントの実行例

使い方

SimpleIOのサンプルは、ConsoleInで入力された数字をデータポートからConsoleOutへ送って、ConsoleOut側にも同じ数字を表示させるサンプルです。 ConsoleInの画面から数字を入力してください。そうするとConsoleOutで入力した数字が出力されます。

    • OpenRTPを起動し、RTSystemEditorを開きます。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照
    • ConsoleInとConsoleOutの両コンポーネントを起動します。 コンポーネントの起動はOSやOpenRTM-aistの言語によって異なってます。以下の表を参考に起動します。
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
    • RTSystemEditorのName Service Viewに両コンポーネントが現れるので、それらをSystemEditor上にドラッグします。
    • 両コンポーネントのポートを結びます。(上図SimpleIO実行例を参照)
    • どちらかのコンポーネントを右クリックし、[Activate Systems]を選択します。
    • ConsoleInの画面に「Please input number:」のプロンプトが現れるので、数字を入力します。
    • ConsoleOutの画面にその数字が表示されます。

SeqIO

このサンプルは、OpenRTM-aistのC++版、Python版、Java版に付属しています。

概要

InPort、OutPortの使用方法を示したサンプルです。SeqInコンポーネントとSeqOutコンポーネントを起動するとGUIまたはコンソール画面が表示されます。 SeqIn、SeqOutともに以下の型のDataPortを備えています。 TimedShort、TimedLong、TimedFLoat、TimedDouble、TimedShortSeq、TimedLongSeq、TimedFLoatSeq、TimedDoubleSeq、各Portの出力は乱数で決定しており、各Port間を接続するとSeqOut側の出力値、SeqIn側の入力値がそれぞれのGUIまたはコンソール画面に表示されます。(Port間の接続にはRTSystemEditorを利用ください。)

起動画面

SeqIO_example_rtse_ja.png
SeqIO実行例(RTSystemEditor接続画面)

SeqIO_example_cpp.png
SeqInコンポーネントとSeqOutコンポーネントの実行例(C++版)

SeqIO_example_python.png
SeqInコンポーネントとSeqOutコンポーネントの実行例(Python版)

SeqIO_example_java.png
SeqInコンポーネントとSeqOutコンポーネントの実行例(Java版)

使い方

SeqIOのサンプルは、SeqOutから連続して出力される数値データをデータポートからSeqInへ送り、GUIまたはコンソール上に表示させるサンプルです。 SeqOutとSeqInの対応するポートをRTSystemEditor上で接続してください。両コンポーネントをアクティベートするとSeqOutだけでなくSeqInの出力される数値も連続的に変化し、データポートの入出力が観察できます。

  • 手順
    • RTSystemEditorを起動し、SystemEditorを用意します。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照
    • SeqOutとSeqInの両コンポーネントを起動します。コンポーネントの起動はOSやOpenRTM-aistの言語によって異なりますので、以下の表を参考に起動します。
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
    • RTSystemEditorのNameServiceViewに両コンポーネントが現れるので、それらをSystemEditor上にドラッグします。
    • 両コンポーネントの対応ポートを接続します。(上図SeqIO実行例を参照)
    • どちらかのコンポーネントを右クリックし、[Activate System]を選択します。

Autocontrol

このサンプルは、Python版にのみ付属しています。

概要

InPortから入ったデータをある基準で判別してOutPortに別の形の出力をするコンポーネントです。SeqIn、SeqOutと共に使用することができます。

各Port間を接続するとSeqOut側の出力値、SeqIn側の入力値がそれぞれのコンソール画面に表示されます。(Port間の接続にはRTSystemEditorを利用ください。)

起動画面

autocontrol_example_rtse.png
Autocontrol実行例(RTSystemEditor接続画面)

seqinout_console.png
SeqInコンポーネントとSeqOutコンポーネントのコンソール画面

使い方

Autocontrolのサンプルは、Sensから入力したデータの4番目の要素をConfigurationで設定できるパラメータdistance_to_envと比較して、その値以下ならvelポートより(turn_vel, - turn_vel)をその値より大きければ(velocity, velocity)の出力をするコンポーネントです。

Autocntrol, SeqOutとSeqInの対応するポートをRTSystemEditor上で接続してください。両コンポーネントをアクティベートするとSeqOutだけでなくSeqInの出力される数値も連続的に変化し、データポートの入出力が観察できます。

  • 手順
    • RTSystemEditorを起動し、SystemEditorを用意します。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照
    • AutocontrolとSeqOut、SeqInコンポーネントを起動します。エクスプローラーでディレクトリ"\Program Files\OpenRTM-asit\1.2.x\Components\Python"より、”Autocontrol.bat"、”SeqIn.bat"、”SeqOut.bat"をダブルクリックしてください。
    • RTSystemEditorのNameServiceViewに3つのコンポーネントが現れるので、それらをSystemEditor上にドラッグ&ドロップします。
    • 両コンポーネントの対応ポートを接続します。(上図実行例を参照)
    • どちらかのコンポーネントを右クリックし、[Activate System]を選択します。
    • [System Diagram]の中からAutocontrol0コンポーネントを選択し、画面下部にあらわれる[Configuration View]の[編集]ボタンをクリックします。[Configuration View]が表示されなければ、[Configuration View]タブが表示されているはずなので、それをクリックしてください。
    • パラメータ値を変更します。この例では、[velocity]を10.0、[turn_velocity]を1.0、[distance_to_env]を5.0に設定するのが分かりやすい設定例になります。
    • SeqOutのコンソール画面に表示されるfloatの4番目のデータ値と、SeqInのコンソール画面のSequence Dataの2つの値に注目してください。SeqOutの値が[distance_to_env]の値と比較され、SeqInのコンソール画面に[turn_vel]、- [turn_vel]か、[velocity]、[velocity]の値として出力されているのを確認してください。それぞれConfigurationパラメータを変化させて、入出力の関係がどのようになるかを見てみるのも良いでしょう。

tkLRFViewer

このサンプルは、Python版にのみ付属しています。

概要

起動画面

autocontrol_example_rtse.png
Autocontrol実行例(RTSystemEditor接続画面)

seqinout_console.png
SeqInコンポーネントとSeqOutコンポーネントのコンソール画面

使い方

Composite

このサンプルは、OpenRTM-aistのC++版、Python版、Java版に付属されています。

概要

複合コンポーネントCompositeの使用方法を示したサンプルです。 複合コンポーネントをActivateする前に、複合コンポーネントを構成している子のコンポーネント間を接続する必要があります。

  • Compositeコンポーネントは、Sensor、Controller、Motorの3つのコンポーネントを子に持っています。
  • Compositeコンポーネントの動作は、ConsoleIn/ConsoleOutコンポーネントと接続して確認できます。

起動画面

  • Compositeコンポーネントを実行すると、Name Service Viewに4つのコンポーネント名が表示されます。
  • Controller、Motor、Sensorの3つを複合化したコンポーネントがPeriodicECShareCompositeですので、これをSystem Editorにドラッグ&ドロップします。
    composite_001.jpg
    Composite実行例(複合コンポーネントをドラッグ&ドロップ)


複合コンポーネント内を表示させるため、PeriodicECShareCompositeをダブルクリックすると、別のエディタに表示されますので、コンポーネント間を接続します。

composite_002.jpg
Composite実行例(複合コンポーネントの子コンポーネント間を接続する)


ここではConsoleIn/ConsoleOutコンポーネントと接続した場合の動作例を示します。

composite_003.jpg
Composite実行例(RTSystemEditor接続画面)


ConsoleInで「111」と入力した場合、ConsoleOutで「888」と表示されれば正しい動作です。 複合コンポーネントを構成している子コンポーネントは、入力値(コンソール画面に表示されている値)を2倍して出力しています。

composite_004.jpg composite_005.jpg
Composite実行例(左:複合コンポーネント画面、右:ConsoleOut画面)

使い方

Compositeのサンプルは、入力データポートから受け取った値を、3つの子コンポーネントがそれぞれ2倍の値にして出力しているので、最終的にCompositeの出力データポートから8倍の値が出力されるサンプルです。

  • 手順
    • RTSystemEditorを起動し、新規SystemEditorを開きます。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照
    • Compositeコンポーネントを起動します。コンポーネントの起動はOSやOpenRTM-aistの言語によって異なりますので、以下の表を参考に起動します。
Windowsの場合 Linuxの場合
C++版 Composite.bat Composite
Python版 Composite.bat Composite.py
Java版 Composite.bat Composite.sh
    • RTSystemEditorのName Service ViewにPeriodicECShareCompositeが現れるので、それらをSystemEditor上にドラッグします。
    • PeriodicECShareCompositeをダブルクリックし、子コンポーネント間のポートを結びます
    • ConsoleInとConsoleOutの両コンポーネントを起動し、PeriodicECShareCompositeと対応ポートを接続します。(上図Composite実行例を参照)
    • どちらかのコンポーネントを右クリックし、[Activate Systems]を選択します。

SimpleService

このサンプルは、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();
 };

  • MyServiceConsumerコンポーネントとMyServiceProviderコンポーネントを起動します。
  • Consumer側コンポーネントをActivateすると、コンソールに利用可能なコマンドリストが表示されますので、各コマンドをお試しください。(Port間の接続にはRTSystemEditorを使用してください。)

起動画面

SimpleService_example_rtse_ja.png
SimpleService実行例(RTSystemEditor接続画面)

MyService_example.png
MyServiceConsumerコンポーネントとMyServiceProviderコンポーネントの実行例

使い方

SimpleServiceは、MyServiceConsumerからコマンドを送り、MyServiceProviderでそれを処理させるというサンプルです(※正確には、コマンドの解釈はConsumer側であり、Provider側の関数を呼び出す形で実装されています)。 MyServiceConsumerとMyServiceProviderの対応するポートをRTSystemEditor上で接続し、両コンポーネントをアクティベートします(ActivateするのはConsumer側コンポーネントだけでもよい)とConsumer側プロンプトにコマンド一覧が表示されるので、適当なコマンドを入力してください。Provider側の応答がプロンプト上で観察できます。

  • 手順
    • RTSystemEditorを起動し、新規SystemEditorを開きます。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照
    • MyServiceConsumerとMyServiceProviderの両コンポーネントを起動します。

コンポーネントの起動は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
    • RTSystem EditorのName Service Viewに両コンポーネントが現れるので、それらをSystemEditor上にドラッグします。
    • 両コンポーネントの対応ポートを結びます。(上図SimpleService実行例を参照)
    • どちらかのコンポーネントを右クリックし、[Activate Systems]を選択します。(この場合は、Consumer側コンポーネントをActivateするだけでも動作します。)
    • Consumer側プロンプトにコマンドを入力します。
  • コマンド
    • echo <message>:任意の<message>をエコー
    • set_value<value>:任意の<value>をProvider側にセット
    • get_value:現在Provider側にセットされている値を取得して表示
    • get_echo_history:今までのエコーメッセージの履歴をProvider側から取得
    • get_value_history:今までにセットしてきた値の履歴をProvider側から取得

ExtTrigger

概要

外部からの入力(イベント)により処理が実行されるExecutionContextのサンプルです。
  • ExtConsoleIn.batとExtConsoleOut.batを実行し、2つのサンプル・コンポーネントを起動します。
  • 両コンポーネントを起動後、ExtConnector.batを実行し、2つのコンポーネントのPort間を接続します。

起動画面

java_exttrigsample0.png
ExtTrigger実行例(ExtConsoleIn)

java_exttrigsample1.png
ExtTrigger実行例(ExtConsoleOut)

java_exttrigsample2.png
ExtTrigger実行例(ExtConnector)

Port間の接続が成功すると、ExtConnectorを実行したコンソールにどのコンポーネントの処理を進めるか選択するメニューが表示されます。 この入力値により、それぞれのコンポーネントは処理を1周期づつ進めていきます。

ConfigSample

このサンプルは、OpenRTM-aist のC++版、Python版、Java版に付属しています。

概要

RTコンポーネントのコンフィギュレーションセットの使用方法を示したサンプルです。 ConfigSampleコンポーネントを起動します。コンポーネントが正常に起動されると、コンフィギュレーション・セットが予め設定された状態となっております。 RTSystemEditorを利用してコンフィギュレーション・セットを確認してみてください。

※コンポーネント起動時に「指定されたパスが見つかりません。」というエラーが発生してしまう場合は、

RTMExamples/ConfigSampleディレクトリ内にあるrtc.confファイル内の「example.ConfigSample.config_file」を次のように修正してください。

  • 次に示すパスに置き換えます。
     .\\RTMExamples\\ConfigSample\\configsample.conf
     (ディレクトリ名やファイル名の間の文字は'\'ではなく、'\\'とします)
  • または「configsample.conf」へのフルパスに書き換えます。この場合も、上記と同様にディレクトリ名やファイル名の間の文字に'\\'を使用します。

起動画面

ConfigSample_example_rtse_ja.png
ConfigSample実行例

使い方

RTSystemEditorのConfigrationViewで選択・設定したConfigrationSetに従ったデータセットをプロンプト上に表示し、絶えず表示更新をし続けます。

  • 手順
    • RTSystemEditorを起動し、SystemEditorを用意します。RTSystemEditorの使用方法の詳細についてはRTSystemEditor を参照
    • ConfigSampleコンポーネントを起動します。コンポーネントの起動はOSやOpenRTM-aistの言語によって異なりますので、以下の表を参考に起動します。
Windowsの場合 Linuxの場合
C++版 ConfigSample.bat ConfigSampleComp
Python版 ConfigSample.bat ConfigSample.py
Java版 ConfigSample.bat ConfigSample.sh
    • RTSystemEditorのName Service Viewにこのコンポーネントが表示されるので、SystemEditor上にドラッグします。
    • RTSystemEditorのConfigration Viewから適当なConfigrationSet(default、mode0、mode1)を選びます。
    • 必要に応じてvalueを変更します。
    • [適用]ボタンをクリックします。

GUIIn

このサンプルは、OpenRTM-aistのJava版のみに付属しています。C++版、Python版に付属していませんので注意ください。

概要・起動画面

GUI画面を持ったRTコンポーネントのサンプルです。Windowsの場合はGUIIn.bat、Linuxの場合はGUIIn.shを実行することでサンプル・コンポーネントが起動します。

GUIIn_example.png
GUIIn実行例(GUIIn)

GUIIn_example_rtse_ja.png
GUIIn実行例(RTSystemEditor接続画面)

各GUI要素とPort間の関係は以下のとおりです。
  • スライダ(上): TimedLong型OutPort
  • テキスト・ボックス(中): TimedString型OutPort
  • スピナ(下): TimedDouble型OutPort

各Portは該当するPort間を接続後、GUI要素横のチェックボックスをONにすることで、入力データを送信します。(Port間の接続にはRTSystemEditorをご利用ください。出力データの確認にはSeqInなどの他サンプルをご利用ください。)

使い方

GUIInコンポーネントのGUI画面でチェックを入れたコントロール(スライダー、スピナ)を操作すると、その値の変化にしたがってSeqInのコンソール画面上の値も変化します。

  • 手順
    • RTSystemEditorを起動し、新規のSystemEditorを開きます。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照
    • GUIInとSeqInの両コンポーネントを起動します。コンポーネントの起動はOSによって異なります。Windowsの場合はGUIIn.bat、Linuxの場合はGUIIn.shを起動します。
    • RTSystemEditorのName Service Viewにこれらのコンポーネントが現れるので、二つともSystem Editor上にドラッグします。
    • 両コンポーネントの対応ポートを結びます。(上図GUIIn実行例を参照)
    • どちらかのコンポーネントを右クリックし、[Activate Systems]を選択します。

OpenCVCamera

OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。また、Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。

概要

OpenCVCamera、CameraViewerを起動することで、USBカメラの画像をモニターに表示します。OpenCV画像処理サンプルRTCコンポーネントを接続し、エフェクトをかけられます。

起動画面

new_00.png
OpenCVCameraコンポーネントとCameraViewerコンポーネントの実行例

new_01.png
OpenCVCamera実行例(RTSystemEditor)

new_02.png
CameraViewer実行例(モニター)

使い方

OpenCVCameraはUSBカメラの画像データを取得し、CameraViewerコンポーネントでモニター上に表示するサンプルです。 OpenCVのRTサンプルコンポーネントを間に接続し、画像データにエフェクトをかけることもできます。

  • 手順
    • RTSystemEditorを起動し、新規SystemEditorを開きます。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照
    • OpenCVCamera(openCVCamera.bat)とCameraViewer(CameraViewer.bat)の両コンポーネントを起動します。
      • サンプルOpenCV画像処理RTコンポーネントを使用する場合は、インストール後、スタート>OpenRTM-aist 1.2.1 x86_64>C++_OpenCV-Examplesから(32bit環境では、スタート>OpenRTM-aist 1.2.1 x86>C++_OpenCV-Examplesから)起動してください。
    • RTSystemEditorのName Service Viewにこれらのコンポーネントが現れるので、二つともSystemEditor上にドラッグします。
    • 両コンポーネントの対応ポートを結びます。(上図RTSystemEditor実行例を参照)
    • どちらかのコンポーネントを右クリックし、[Activate Systems]を選択します。
  • OpenCVのFlipを使用する
    • Flipコンポーネントをスタート>OpenRTM-aist 1.2.1 x86_64>C++_OpenCV-Examplesから(32bit環境では、スタート>OpenRTM-aist 1.2.1 x86>C++_OpenCV-Examplesから)起動してください。
    • SystemEditor上にドラッグして表示し、OpenCVCameraとCameraViewer両コンポーネントと接続し「Activate」します。(下図Flip実行例を参照)
    • FlipはConfigure「flip_mode」の値を変更する事で、出力データを変更することも可能です。(下図flip_modeの変更を参照)
      • Flipの詳しい使い方・解説はこちらをご確認ください。
        new_05.png
        Flip実行例(RTSystemEditor)

new_03_04.png
flip_modeの変更(RTSystemEditorとモニター)

  • OpenCV使用のその他のサンプルについて
起動コマンド 機能 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サンプルのビルド手順

Linuxにおいては一括インストールスクリプトの実行ではOpenCVサンプルコードはインストールされません。サンプルコードのインストールのためには、githubリポジトリよりソースコードを入手してビルドする必要があります。手順は以下のようになります。

  • OpenRTM-aistを一括インストールスクリプトを用いてインストールしてください。(以下の手順の実行にはC++版とPython版が必要になります。また、実際に動作させる場合にはOpenrtpが必要になることが多いかと思われます。それに合わせてオプションを指定してください。) 例えば
     $ sudo sh pkg_install_ubuntu.sh -l all --yes
  • OpenCV3.4以降をインストールする。(現状では3.4.5のみがテストされています。インストールにはソースコードビルドが必要なこともあります。)
  • 以下の手順でソースコードを入手してビルドしてください。
     $ 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

TkJoyStick/TkMobileRobotSimulator

TkJoyStick

このサンプルは、OpenRTM-aistのPython版に付属しています。 C++版、Java版には付属していませんのでご注意ください。

概要

GUI画面を持ったRTコンポーネントのサンプルです。TkJoyStickComp.batを実行することでサンプル・コンポーネントが起動されます。 GUI上のジョイスティックをドラッグで移動した位置に応じた値(x, y)を出力します。

起動画面

TkJoystick.png
TkJoyStick実行例

使い方

  • 画面中央に表示される小さい丸をドラッグすることで、丸の座標に応じた (x, y) の値を出力します。右上のScale Factorのスライダを調整することで、出力する座標値のスケールを調整できます。画面右下には、直角座標系の(x, y)の値と、極座標系の(r, theta)が表示されます。
  • OutPortは2つあり、"pos"からは位置に応じた値が、"vel"からは反時計方向に座標を45度かたむけた値が、たとえば"pos"が(10,10)だとすると"vel"には(14.142, 0)が出力されます。

TkMobileRobotSimulator

このサンプルは、OpenRTM-aistのPython版に付属しています。C++版、Java版には付属していませんのでご注意ください。

概要

GUI画面を持ったRTコンポーネントのサンプルです。TkMobileRobotSimulator.batを実行することでサンプル・コンポーネントが起動されます。

起動画面

TkMobileRobotSimulator.png
TkMobileRobotSimulator実行例

使い方

実際にRTCとしてシステムが認識し、Name ServiceでRTCが見えるようにするためには、GUIの右側中央にある[Create]ボタンを押します。GUI上にモータで前後左右に動く物体を模した五角形のオブジェクトが表示されます。InPortへの入力値に応じて、画面上の5角形のオブジェクトが移動します。InPortへの入力はロボットを駆動する左側車輪用モータの回転速度と右側車輪のモータ回転速度になります。まっすぐ頂点方向に進むためには両方の車輪の速度が一緒である必要があります。

システム構成

SysEdit.png
RTSystemEditor実行例

使い方

TkJoystick(入力デバイス)とTkMobileRobotSimulator接続し、GUI上でJoystickで移動速度を制御するくロボットのシミュレーションをします。

  • 手順
    • RTSystemEditorを起動し、新規SystemEditorを開きます。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照
    • TkJoyStickComp.py、TkMobileRobotSimulator.py、両コンポーネントを起動します。
    • TkMobileRobotSimulator.pyのGUIの[Create]ボタンを1回クリックします。
    • RTSystemEditorのName Service Viewに両コンポーネントが表示されるので、それらをSystemEditor上にドラッグします。
    • 両コンポーネントの対応ポート(どちらもvel)を結びます。(上図RTSystemEditor実行例を参照)
    • どちらかのコンポーネントを右クリックし、[Activate Systems]を選択します。
    • TkJoystickCompの画面上で中心点をドラッグすることにより、TkMobileRobotSimulator上の5角形のオブジェクト(ロボットを表しています)が動きます。Y方向(上下方向)にTkJoystickコンポーネントを動かすと進行方向への移動速度が変化し、X方向(左右方向)に動かすと、回転速度と回転方向が変化するように動きます。(TkJoyStickの"vel" OutPortを使う場合は、ジョイステックを上下方向に動かすと、ベクター値の2値が同じ値になります。また左右に動かした場合は、正負が逆の値になります。これをTkMobileRobotSimulatorに送ると、それぞれ左右のモータへの速度制御入力として動作するため、上下方向の移動は2つのモータを同じ方向で同じ速度で動かすような形で頂点方向への直進速度の制御ということになります。また左右方向のジョイステックの移動は"vel" OutPortからのベクターの2要素は正負が反転した値となり、それがTkMobileRobotSimulatorにとっては左右のモータの速度の制御値になるため、同じ絶対値速度で逆方向にモータを回すことになるので、ロボットはその場で回転するということになります。)

TkMotorComp/SliderComp

TkMotorComp

このサンプルは、OpenRTM-aistのPython版に付属しています。 C++版、Java版には付属していませんのでご注意ください。

概要

GUI画面を持ったRTコンポーネントのサンプルです。TkMotorComp.batを実行することでサンプル・コンポーネントが起動します。

起動画面

TkMotorComp.png
TkMotorComp実行例

SliderComp

このサンプルは、OpenRTM-aistのPython版に付属しています。 C++版、Java版には付属していませんのでご注意ください。

概要

GUI画面を持ったRTコンポーネントのサンプルです。SliderComp.batを実行することでサンプル・コンポーネントが起動します。(以下の画面は、Windowsで動作させた場合のものです。)

起動画面

SliderComp.png
SliderComp実行例

システム構築

RTSE_Slider_Motor.png
RTSystemEditor上のSliderCompとTkMotorComp

使い方

SliderCompとTkMotorCompでスライドノブでモータの回転の制御をする環境をGUI上でシミュレーションします。

  • 手順
    • RTSystemEditorを起動し、新規SystemEditorを開きます。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照
    • SliderComp.bat、TkMotorComp.bat、両コンポーネントを起動します。
    • RTSystemEditorのName Service Viewに両コンポーネントが表示されるので、それらをSystemEditor上にドラッグします。
    • 両コンポーネントの対応ポートを結びます。(上図RTSystemEditor実行例を参照)
    • どちらかのコンポーネントを右クリックし、[Activate Systems]を選択します。
    • TkMotorCompのGUI上でモータで駆動される円盤を模したものが表示され、その回転が、SliderCompのGUI上の上下スライドノブで制御できるのを確認してください。それぞれ6つのノブと6つのモータの回転を模しています。

TkMotorPosComp/SliderComp

TkMotorPosComp

このサンプルは、OpenRTM-aistのPython版に付属しています。 C++版、Java版には付属していませんのでご注意ください。

概要

GUI画面を持ったRTコンポーネントのサンプルです。TkMotorPosComp.batを実行することでサンプル・コンポーネントが起動します。TkMotorCompがInPortへの入力で回転速度を制御するのに対して本コンポーネントは回転角をInPortへの入力で制御します。

起動画面

TkMotorPosComp.png
TkMotorPosComp実行例

SliderComp

このサンプルは、OpenRTM-aistのPython版に付属しています。 C++版、Java版には付属していませんのでご注意ください。

概要

GUI画面を持ったRTコンポーネントのサンプルです。SliderComp.batを実行することでサンプル・コンポーネントが起動します。(以下の画面は、Windowsで動作させた場合のものです。)

起動画面

SliderCompN.png
SliderComp実行例

システム構築

RTSE_Slider_MotorPos.png
RTSystemEditor上のSliderCompとTkMotorPosComp

使い方

SliderCompとTkMotorPosCompでスライドノブでモータの回転の制御をする環境をGUI上でシミュレーションします。

  • 手順
    • RTSystemEditorを起動し、新規SystemEditorを開きます。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照
    • SliderComp.bat、TkMotorPosComp.bat、両コンポーネントを起動します。
    • RTSystemEditorのName Service Viewに両コンポーネントが表示されるので、それらをSystemEditor上にドラッグします。
    • 両コンポーネントの対応ポートを結びます。(上図RTSystemEditor実行例を参照)
    • どちらかのコンポーネントを右クリックし、[Activate Systems]を選択します。
    • TkMotorPosCompのGUI上でモータで駆動される円盤を模したものが表示され、その回転角が、SliderCompのGUI上の上下スライドノブで制御できるのを確認してください。それぞれ6つのノブと6つのモータの回転を模しています。

TkCalibGUI

TkCalibGUI

OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。また、Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。

概要

GUI画面を持ったRTコンポーネントのサンプルです。TkCalibGUI.batを実行することでサンプル・コンポーネントが起動します。 カメラキャリブレーションを行う ImageCalibrationコンポーネント用のGUIです。

本コンポーネントを実行して選択可能リストの中からカメラコンポーネントを指定すると、ImageCalibrationCompと合わせて自動起動し、コンポーネント間のポート接続も自動で行います。 GUIのボタン操作でキャリブレーションに必要なカメラ画像の保存、及び、カメラパラメーターの算出を行うことができます。


コンポーネントの実行条件

OpenRTM-aist C++のWindows用インストーラーを使ってインストールされた場合は、TkCalibGUI.batを実行するだけで動作します。

ソースからビルドされた場合は、実行条件を整える必要があります。本コンポーネントでは実行に必要な環境のチェックを行っています。 条件に合わないと以下のようなメッセージダイアログを表示します。指示に従ってインストールしてください。

calib9.jpg
実行条件を満たさない場合に表示されるメッセージ

Windows環境向け

メッセージ内容 対応処理
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

Linux(Ubuntu)環境向け

メッセージ内容 対応処理
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"

起動画面

calib1.jpg

最初に使用するカメラコンポーネントをリストの中から選択します。このリストには実行環境で使用可能なカメラコンポーネント名が表示されています。 Windows 10のVC2019の環境ではOpenCVCameraCompとMFCameraCompが選択可能です。この2つはどちらも同じような動作をしますが、OpenCVCameraCompの方が新しく環境依存性も少ないようです。また、このtkCalibGUI.batで起動される実行ファイルにより、ImageCalibrationコンポーネントが起動されます。また、このコンポーネントはImageCalibration.batによって単体起動できますが、単体起動した場合に接続して動作確認するようなコンポーネントは別途準備されていませんので、tkCalibGUIを用いずにImageCalibrationコンポーネントを使用したい場合は、別途接続するコンポーネントをユーザ側で作成してください。

calib2.jpg

[All Activate]ボタンをクリックするとカメラ映像が表示されます。 この時の全コンポーネントの接続状態は下図の通りです。TkCalibGUI以外のコンポーネントは自動起動され、コンポーネント間も自動接続しています。

calib10.jpg

使い方

チェッカーパターン(キャリブレーションパターン)を用意します。参考として、ここではcheckerboard.pdf を使っています。 チェッカーパターンのコーナー数は、ImageCalibrationのConfigurationで指定する必要があります。パターンの縦横の白と黒四角の共有している頂点の数(checker_h, checker_w)ーこれは白黒の四角の数-1です、と撮影枚数(image_num)もConfigurationで変更可能です。

チェッカーパターンの取り込みは、そのパターンをいろいろな角度でなるべく画面全体をカバーするような形で指定枚数分保存します。[確認]ボタンで保存画像の確認が可能です。[取消し]ボタンをクリックするとその画像は削除されますので保存し直してください。

calib3.jpg calib4.jpg
calib5.jpg calib6.jpg

指定枚数の保存が終了すると[結果表示]ボタンが有効です。これをクリックするとカメラパラメーター値が表示されます。

calib8.jpg

カメラパラメーターは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 ]

画像出力(参考資料)

参考として[保存]ボタンをクリックした時の画像ファイルをシステム環境変数のTEMP、またはTMPのディレクトリに出力しています。
  • ファイル名:capture0.jpg~capture4.jpg(5枚保存した場合:グレースケール画像)
    capture0.jpg
作成したカメラパラメーターを用いて上記の画像に対しゆがみ補正したファイルも同じディレクトリに出力されます。
  • ファイル名:undistorted0.jpg~undistorted4.jpg(ファイルの番号はcapture*.jpgに対応)
    undistorted0.jpg

ImageSubtraction

OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。また、Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。

概要

ImageSubtractionを起動することによって入力画像から背景画像を取り出し、前景画像部を判定し、それを取り出すマスク画像を、背景画像を出力します。 OpenCVCamera、CameraViewerといっしょに使用します。(なおWindows環境では現状このコンポーネントは再ビルドしないと現在正常に動作しないようなので、Ubuntu 18.04環境での使用を推奨いたします。)

起動画面

ImageSubtract_exe.png
ImageSubtractionコンポーネンの実行例

使い方

ImageSubtractionは、入力画像から背景画像を取り出すためのコンポーネントです。ここではUSB Cameraから画像を取り込むためのOpenCVCameraと、処理した画像を表示するためのCameraViewerコンポーネントと使用します。

  • 手順 (以下はUbuntu 18.04での手順です。)
    • ターミナルを起動します。
    • 上記の[[LinuxにおけるOpenCVサンプルコードのビルド手順>//node/6974]に従いサンプルコードのインストールをします。
    • OpenRTPに従いOpenRTPを起動しRTSystemEditorを起動し、Name Service ViewにRTCが表示されるようにします。新規SystemEditorを開きます。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照してください。
    • 新規にターミナル画面を開きます。
    • 以下のコマンドを実行して、rtc.confを編集します。
       $ cd ImageProcessing/opencv/bin
       $ sudo vi rtc.conf
    • 最終行に以下の行を付け加えます。
       manager.components.naming_policy: ns_unique
    • 新規にターミナルを起動して
       $ cd ImageProcessing/opencv/bin
       $ ./CameraViewerComp
      ターミナルを起動後の上記コマンドをさらに3回くり返し、4つのCameraViewerコンポーネントを起動します。
    • 新規にターミナルを起動します。
       $ cd ImageProcessing/opencv/bin
       $ ./OpenCVCameraComp
      としてOpenCVCameraCompを起動します。
    • さらにもう一度ターミナルを起動して
       $ cd ImageProcessing/opencv/bin
       $ ./ImageSubtractionComp
      と入力してImageSubtractionコンポーネントを起動します。
    • RTSystemEditorの画面のName Service viewのところの[>]をクリックして、起動したコンポーネントCameraView0, CameraViewer1, CameraViewer2, CameraViewe3, OpenCVCamera0, ImageSubtraction0のコンポーネントが表示されているのを確認します。
    • RTSystemEditorで上部の[Open New System Editor]ボタンicon_open_editor_ja.png をクリックし、新規System Editorを開き、[System Dialgram]を新たに表示させます。
    • 上記の5つのコンポーネントをSystem Diagram上にドラッグ&ドロップします。
    • 下記の画面のように各コンポーネントのポートを接続します。
      RTSystemEditor_ImageSubtraction.png
      ImageSubtractionコンポーネンの実行例
    • どれかのコンポーネントを右クリックし、[Activate Systems]を選択します。
    • 画面のウィンドウを動かしながら4つのCameraViewerの画面を表示させます。
      compexec.png
      ImageSubtraction出力画像
    • マウスをcapture_imageのウィンドウから外に移動するとそのタイミングで背景画面が取り込まれ、それがback_imageに表示されます。他の画面もどうなるか確認してください。

なお、コンフィギュレーション・パラメータとして以下のようなものが設定可能です。

パラメータ名 意味
control_mode bとmが選択でき、bの時はkeyイベントに伴いバックグラウンドイメージの取り込みが行われ、mの時は画素ごとに閾値を決めるDYNAMIC_MODEと画面全体で一つの閾値を使うCONSTANT_MODEが切り替わります。
image_height 縦方向の画素数を指定しますが、このサンプルでは機能しません。
image_width 横方向の画素数を指定しますが、このサンプルでは機能しません。
threshold_coefficient DYNAMIC_MODEで使う係数
constant_threshold CONSTANT_MODEで使う閾値

ObjectTracking

OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。また、Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。

概要

ObjectTrackingは、画面上から選択したオブジェクトを追跡して、その位置を赤い楕円形でかこんでしめすOpenCVコンポーネントのサンプルです。 OpenCVCamera、CameraViewerといっしょに使用します。

起動画面

ObjectTrackingConsole.png
ObjectTrackingコンポーネンの実行画面

使い方

ObjectTrackingは、画面上から選択したオブジェクトを追跡して、その位置を赤い楕円形でかこんでしめすコンポーネントです。ここではUSB Cameraから画像を取り込むためのOpenCVCameraコンポーネント、処理した画像を表示し、またマウスを用いてオブジェクトを選択するために使われるCameraViewerコンポーネントと共に使用します。以下ではWindowsにおいての使い方の説明をします。

  • 手順
    • OpenRTPの起動手順(1.2系、Windows)に従いOpenRTPを起動しRTSystemEditorを起動し、Name Service ViewにRTCが表示されるようにします。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照してください。
    • エクスプローラーで\Program Files\OpenRTM-aist\1.2.1\Components\C++\OpenCVとたどります。
    • CameraViewer.batをダブルクリックします。
    • OpenCVCamera.batをダブルクリックします。
    • ObjectTracker.batをダブルクリックします。
    • RTSystemEditorの画面のName Service viewのところの[>]をクリックして、起動したコンポーネントCameraViewer, ObjectTracking, OpenCVCameraのコンポーネントが表示されているのを確認します。
    • RTSystemEditorで上部の[Open New System Editor]ボタンicon_open_editor_ja.png をクリックし、新規System Editorを開き、[System Dialgram]を新たに表示させます。
    • 上記の3つのコンポーネントをSystem Diagram上にドラッグ&ドロップします。
    • 下記の画面のように各コンポーネントのポートを接続します。
      RTSE_ObjectTracking.png
      ObjectTrackingコンポーネントの接続
    • どれかのコンポーネントを右クリックし、[Activate Systems]を選択します。
    • 画面のウィンドウを動かしながらCameraViewerの画面を表示させます。
      ObjectTrackingCameraViewer.png
      ObjectTracking出力画像
    • マウスを左クリックしながら、選択したいオブジェクトを選択します。この時矩形の反転選択画面がでるようにしてください。(場合によっては、でるようになるまで時間がかかることがあります。)
    • 選択がうまくされると上図のように赤い楕円があらわれます。このオブジェクトを物理的に動かすと、画面上で、そのオブジェクトといっしょに楕円がいっしょに動くことを確認してください。
    • なお"img_histgram"のOutPortからは上記の矩形選択時に、選択した画像のヒストグラムが一瞬表示されます。

Chromakey

OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。また、Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。

概要

Chromakeyは、2つの画面をクロマキー合成をするOpenCVコンポーネントのサンプルです。 OpenCVCamera、CameraViewerといっしょに使用します。

使い方

Chromakeyは、ある特定の色を背景(例えば緑色)として撮影を行った画像のその特定色のところを透明化して、別の画面と合成するクロマキー合成という手法を実現するRTCコンポーネントです。 実行にあたっては、OpenCVCameraコンポーネントを2つ起動して2つの画面を取り込みます。また出力はCameraViewerコンポーネントを使用します。
  • 合成する2つの画面
    foreground.png
    前面画像

background.png
背景画像

  • 手順 (Windows環境)
    • OpenRTPの起動手順(1.2系、Windows)に従いOpenRTPを起動しRTSystemEditorを起動し、Name Service ViewにRTCが表示されるようにします。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照してください。
    • 管理者権限でコマンドプロンプトを開きOpenCVCameraコンポーネントを2つ実行できるようにします。
      • rtc.confを編集します。例えば、以下のようなコマンドを入力し編集を行います。
         > cd "\Program Files\OpenRTM-aist\1.2.1\Components\C++\OpenCV\vc14"
         > notepad rtc.conf
        とし、以下の行を付け加えます。
         manager.components.naming_policy: ns_unique
      • コマンドプロンプトを閉じます。
    • エクスプローラーで\Program Files\OpenRTM-aist\1.2.1\Components\C++\OpenCVとたどります。
    • CameraViewer.batをダブルクリックします。
    • OpenCVCamera.batをダブルクリックします。
    • OpenCVCamera.batをもう一度ダブルクリックします。
    • Chromakey.batをダブルクリックします。
    • RTSystemEditorの画面のName Service viewのところの[>]をクリックして、起動したコンポーネントCameraViewer0、Chromakey0、OpenCVCamera0、OpenCVCamera1のコンポーネントが表示されているのを確認します。
    • RTSystemEditorで上部の[Open New System Editor]ボタンicon_open_editor_ja.png をクリックし、新規System Editorを開き、[System Dialgram]を新たに表示させます。
    • 上記の4つのコンポーネントをSystem Diagram上にドラッグ&ドロップします。
    • 下記の画面のように各コンポーネントのポートを接続します。
      RTSE_chromakey.png
      Chromakeyコンポーネントの接続
    • OpenCVCamera0コンポーネントを右クリックして、[Activate]を選択します。緑色に表示が変わらない場合は、このコンポーネントを選択後、下部のConfiguration Viewを開き、[編集]をクリックし、device_numを接続されている、前面画像撮影用のUSBカメラに対応している番号に変え、[適用]ボタンをクリックします。
    • OpenCVCamera1コンポーネントを右クリックして、[Activate]を選択します。緑色に表示が変わらない場合は、このコンポーネントを選択後、下部のConfiguration Viewを開き、[編集]をクリックし、device_numを接続されている、背景画像撮影用のUSBカメラに対応している番号に変え、[適用]ボタンをクリックします。
    • どれかのコンポーネントを右クリックし、[Activate Systems]を選択します。
    • 画面のウィンドウを動かしながらCameraViewerの画面を表示させます。
    • [System Dialog](System Editor View)上のChromakey0コンポーネントをクリックします。すると下部にConfiguration Viewが表示されます。もし表示されない場合は[Configuration]タブをクリックしてください。
    • [編集]ボタンをクリックしてクロマキーカラーの設定をします。 lower_blue、uppder_blue、lower_green、upper_green、lower_red、upper_redの値を前面画像でバックグラウンドとして透明化する色(この例では緑色)のRGB値の青、緑、赤の成分範囲値を設定します。
    • [適用]ボタンをクリックします。
    • 下記のように2つの画像が合成されるの確認してください。
      ChromakeyCameraViewer.png
      クロマキー合成出力画像

SubtractCaptureImage

OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。また、Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。

概要

SubtractCaptureImageは入力画像から、変化のない部分を背景と判断して、前景(移動物)を取り出すマスク画像を出力するコンポーネントで、動的な背景差分法でリアルタイムな背景更新をするコンポーネントのサンプルです。OpenCVCamera、CameraViewerコンポーネントと共に使用します。

使い方

SubtractCaptureImageは入力画像で動きがないものを背景とみなして背景とするのと、画面上に新たに追加された物も動きがなくしばらくおいておかれると、それの部分も背景の一部と判定し、背景画像にとりこみます。出力には、入力画像、前景(移動物を示す)のマスク画像、移動物でも背景でもないものを示すマスク画像、背景画像、静止物体の背景化を表示する画像が出力されます。 このコンポーネントを使ってみるためにはCameraViewerを複数起動して複数の出力画像を同時に見るか、CameraViewerとの接続を変えながら、それぞれの出力画像を見ていってください。また入力画像としてOpenCVCameraコンポーネントを使用してみると良いでしょう。

  • 手順 (Windows環境)
    • OpenRTPの起動手順(1.2系、Windows)に従いOpenRTPを起動しRTSystemEditorを起動し、Name Service ViewにRTCが表示されるようにします。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照してください。
    • 管理者権限でコマンドプロンプトを開きCameraViewerコンポーネントを複数実行できるようにします。
      • rtc.confを編集します。例えば、以下のようなコマンドを入力し編集を行います。
         > cd "\Program Files\OpenRTM-aist\1.2.1\Components\C++\OpenCV\vc14"
         > notepad rtc.conf
        とし、以下の行を付け加えます。
         manager.components.naming_policy: ns_unique
      • コマンドプロンプトを閉じます。
    • エクスプローラーで\Program Files\OpenRTM-aist\1.2.1\Components\C++\OpenCVとたどります。
    • CameraViewer.batをダブルクリックします。
    • CameraViewer.batさらにダブルクリックし、全部で5つのCameraVieweerコンポーネントを起動します。
    • OpenCVCamera.batをダブルクリックします。
    • SubtractCaptureImage.batをダブルクリックします。
    • RTSystemEditorの画面のName Service viewのところの[>]をクリックして、起動したコンポーネントCameraViewer0、CameraViewer1、CameraViewer2、CameraViewer3、CameraViewer4、SubtractCaputreImage0、OpenCVCamera0のコンポーネントが表示されているのを確認します。
    • RTSystemEditorで上部の[Open New System Editor]ボタンicon_open_editor_ja.png をクリックし、新規System Editorを開き、[System Dialgram]を新たに表示させます。
    • 上記の7つのコンポーネントをSystem Diagram上にドラッグ&ドロップします。
    • 下記の画面のように各コンポーネントのポートを接続します。
      RTSE_SubtractCaptureImage.png
      SubtractCaptureImageコンポーネントの接続
    • どれかのコンポーネントを右クリックし、[Activate Systems]を選択します。
    • 画面のウィンドウを動かしながらCameraViewerの画面を表示させます。
    • まずはbackGraoundImg が接続されているCameraViewer3の画面と入力画面と同じ画面であるoutput_imageに接続されているCameraViewer0の画面を見てみます。どちらにも何らかの画像が表示されているのを確認します。
    • ここでforeMaskImgが接続されているCameraView1の画面を見てみると、最初は白い部分があったのが、徐々に真っ黒な画面になっていくというのが分かります。この画面は黒い部分が背景と見なされている部分、白い部分が前景と見なされている部分ということを示しています。前景と見なされるのは変化している部分、つまり動いている物です。そこで、真っ黒になった時に、なにか動くものを撮影してみると、その動いた物体の部分が白く表示されるのが分かります。またStillImgであるCameraView3の出力には動いているものが静止しはじめると、徐々にその物体がはっきりするようになってくるというのが分かります。下記のその例の画像を示します。
      SubtractCaptureImageOut1.png
      ''それぞれの出力ポートの画像 - 前景検出’’
    • 上記の画像は、撮影してしばらくおいて、backGroundMaskImgが真っ黒になった後に、指を横からゆっくりと動かして画面にいれた例です。backGroundMaskImgを見るとと動いている指の部分が前景(移動物)として見なされているのと、動きがゆっくりなのでstillImgのところで指が一部静止物と見なされてきている様子見られます。
    • 次の画像は、ラズパイマウスというRaspberry Piでコントロールする小型ロボットがある画面を、しばらく撮影し、ある時点で、そのラズパイマウスの上に猫の置物をおいた時の画像で、猫の置物が静止物と見なされ、徐々に背景と判定されていく過程の画像です。
      SubtractCaptureImageOut2.png
      それぞれの出力ポートの画像 - 静止物検出、背景更新
    • StillImgの画像は、猫の置物をほぼ静止物と見なしているのを示しています。このアルゴリズムでは、静止物を背景と見なすのには、さらに時間を必要とし、その部分を徐々に背景と見なします。backGroundImgの画像では猫の置物の一部が表示され、その部分が背景と見なされているのがわかります。この後backGroundImgはStillImgとほぼ同じ画像になるように変化していきます。一方foreMaskImgは、白いところがあり、この部分は、まだ前景(移動物の画像)だと見なされています。
    • stillMaskImgについては静止画として表現するのは難しいので、ここではサンプル画像は白いままのものしか提示しません。この画像に関しては、実際に画像を表示させて確認してください。なお、この出力は定常的には全体が白い画像が出力され、背景とも前景(移動物)とも見なされない部分、つまり背景と判定される直前に静止物が取り除かれたようなケースだけその部分を黒くした画像が出力されます。

なお、このサンプルは2020年2月7日時点では、修正が必要と見なされて、修正中となっています。GitHub上でソースコードを近々アップデートします。そのアップデートを待ってビルドして使用してください。ソースコードのビルドについては、画像処理コンポーネントの作成を参照してください。