Factorのスライダを調整することで、出力する座標値のスケールを調整できます。theta)が表示されます。TkMobileRobotSimulatorこのサンプルは、OpenRTM-aistのPython版に付属しています。C++版、Java版には付属していませんのでご注意ください。概要GUI画面を持ったRTコンポーネントのサンプルです。TkMobileRobotSimulator.batを実行することでサンプル・コンポーネントが起動されます。ServiceでRTCが見えるようにするためには、GUIの右側中央にある[Create]ボタンを押します。GUI上にモータで前後左右に動く物体を模した五角形のオブジェクトが表示されます。InPortへの入力値に応じて、画面上の5角形のオブジェクトが移動します。InPortへの入力はロボットを駆動する左側車輪用モータの回転速度と右側車輪のモータ回転速度になります。頂点方向に進むためには両方の車輪の速度が一緒である必要があります。使い方TkJoystick(入力デバイス)とTkMobileRobotSimulator接続し、GUI上でJoystickで移動速度を制御するくロボットのシミュレーションをします。手順RTSystemEditorを起動し、新規SystemEditorを開きます。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照TkJoyStickComp.py、TkMobileRobotSimulator.py、両コンポーネントを起動します。TkMobileRobotSimulator.pyのGUIの[Create]ボタンを1回クリックします。Viewに両コンポーネントが表示されるので、それらをSystemEditor上にドラッグします。両コンポーネントの対応ポート(どちらもvel)を結びます。Systems]を選択します。TkJoystickCompの画面上で中心点をドラッグすることにより、TkMobileRobotSimulator上の5角形のオブジェクト(ロボットを表しています)が動きます。Y方向(上下方向)にTkJoystickコンポーネントを動かすと進行方向への移動速度が変化し、X方向(左右方向)に動かすと、回転速度と回転方向が変化するように動きます。OutPortを使う場合は、ジョイステックを上下方向に動かすと、ベクター値の2値が同じ値になります。左右に動かした場合は、正負が逆の値になります。これをTkMobileRobotSimulatorに送ると、それぞれ左右のモータへの速度制御入力として動作するため、上下方向の移動は2つのモータを同じ方向で同じ速度で動かすような形で頂点方向への直進速度の制御ということになります。OutPortからのベクターの2要素は正負が反転した値となり、それがTkMobileRobotSimulatorにとっては左右のモータの速度の制御値になるため、同じ絶対値速度で逆方向にモータを回すことになるので、ロボットはその場で回転するということになります。使い方TkMotorCompこのサンプルは、OpenRTM-aistのPython版に付属しています。C++版、Java版には付属していませんのでご注意ください。概要GUI画面を持ったRTコンポーネントのサンプルです。TkMotorComp.batを実行することでサンプル・コンポーネントが起動します。起動画面TkMotorComp実行例SliderCompこのサンプルは、OpenRTM-aistのPython版に付属しています。C++版、Java版には付属していませんのでご注意ください。概要GUI画面を持ったRTコンポーネントのサンプルです。SliderComp.batを実行することでサンプル・コンポーネントが起動します。(以下の画面は、Windowsで動作させた場合のものです。)起動画面SliderComp実行例システム構築RTSystemEditor上のSliderCompとTkMotorComp使い方SliderCompとTkMotorCompでスライドノブでモータの回転の制御をする環境をGUI上でシミュレーションします。手順RTSystemEditorを起動し、新規SystemEditorを開きます。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照SliderComp.bat、TkMotorComp.bat、両コンポーネントを起動します。Viewに両コンポーネントが表示されるので、それらをSystemEditor上にドラッグします。両コンポーネントの対応ポートを結びます。Systems]を選択します。TkMotorCompのGUI上でモータで駆動される円盤を模したものが表示され、その回転が、SliderCompのGUI上の上下スライドノブで制御できるのを確認してください。それぞれ6つのノブと6つのモータの回転を模しています。使い方TkMotorPosCompこのサンプルは、OpenRTM-aistのPython版に付属しています。C++版、Java版には付属していませんのでご注意ください。概要GUI画面を持ったRTコンポーネントのサンプルです。TkMotorPosComp.batを実行することでサンプル・コンポーネントが起動します。TkMotorCompがInPortへの入力で回転速度を制御するのに対して本コンポーネントは回転角をInPortへの入力で制御します。起動画面TkMotorPosComp実行例SliderCompこのサンプルは、OpenRTM-aistのPython版に付属しています。C++版、Java版には付属していませんのでご注意ください。概要GUI画面を持ったRTコンポーネントのサンプルです。SliderComp.batを実行することでサンプル・コンポーネントが起動します。(以下の画面は、Windowsで動作させた場合のものです。)起動画面SliderComp実行例システム構築RTSystemEditor上のSliderCompとTkMotorPosComp使い方SliderCompとTkMotorPosCompでスライドノブでモータの回転の制御をする環境をGUI上でシミュレーションします。手順RTSystemEditorを起動し、新規SystemEditorを開きます。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照SliderComp.bat、TkMotorPosComp.bat、両コンポーネントを起動します。Viewに両コンポーネントが表示されるので、それらをSystemEditor上にドラッグします。両コンポーネントの対応ポートを結びます。Systems]を選択します。TkMotorPosCompのGUI上でモータで駆動される円盤を模したものが表示され、その回転角が、SliderCompのGUI上の上下スライドノブで制御できるのを確認してください。それぞれ6つのノブと6つのモータの回転を模しています。画像出力(参考資料)TkCalibGUIOpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。概要GUI画面を持ったRTコンポーネントのサンプルです。TkCalibGUI.batを実行することでサンプル・コンポーネントが起動します。ImageCalibrationコンポーネント用のGUIです。本コンポーネントを実行して選択可能リストの中からカメラコンポーネントを指定すると、ImageCalibrationCompと合わせて自動起動し、コンポーネント間のポート接続も自動で行います。GUIのボタン操作でキャリブレーションに必要なカメラ画像の保存、及び、カメラパラメーターの算出を行うことができます。C++のWindows用インストーラーを使ってインストールされた場合は、TkCalibGUI.batを実行するだけで動作します。ソースからビルドされた場合は、実行条件を整える必要があります。本コンポーネントでは実行に必要な環境のチェックを行っています。条件に合わないと以下のようなメッセージダイアログを表示します。指示に従ってインストールしてください。Python版のページからWindows用インストーラーをダウンロードできます。C++版に合わせてください。pyttkをインストールしてください。python2.7には含まれていますが、python2.6では別途インストールが必要です。PILをインストールしてください。numpyをインストールしてください。Zip」をクリックし、rtc-master.zipファイルをダウンロード・展開し、setup.pyを実行してインストールしてください。install)site-packages\rtctree\rtmidlへのパスをシステム環境変数のPYTHONPATHに追加してください。Python版のページから一括インストールスクリプトをダウンロードできます。rtctree-3.0.1以上が必要githubからダウンロードし、setup.pyを実行してインストールする手順はWindows環境と同じ。~/.bashrcなどにPYTHONPATHを追加してください。最初に使用するカメラコンポーネントをリストの中から選択します。このリストには実行環境で使用可能なカメラコンポーネント名が表示されています。10のVC2019の環境ではOpenCVCameraCompとMFCameraCompが選択可能です。この2つはどちらも同じような動作をしますが、OpenCVCameraCompの方が新しく環境依存性も少ないようです。このtkCalibGUI.batで起動される実行ファイルにより、ImageCalibrationコンポーネントが起動されます。このコンポーネントはImageCalibration.batによって単体起動できますが、単体起動した場合に接続して動作確認するようなコンポーネントは別途準備されていませんので、tkCalibGUIを用いずにImageCalibrationコンポーネントを使用したい場合は、別途接続するコンポーネントをユーザ側で作成してください。Activate]ボタンをクリックするとカメラ映像が表示されます。この時の全コンポーネントの接続状態は下図の通りです。TkCalibGUI以外のコンポーネントは自動起動され、コンポーネント間も自動接続しています。使い方チェッカーパターン(キャリブレーションパターン)を用意します。チェッカーパターンのコーナー数は、ImageCalibrationのConfigurationで指定する必要があります。checker_w)ーこれは白黒の四角の数-1です、と撮影枚数(image_num)もConfigurationで変更可能です。チェッカーパターンの取り込みは、そのパターンをいろいろな角度でなるべく画面全体をカバーするような形で指定枚数分保存します。[確認]ボタンで保存画像の確認が可能です。[取消し]ボタンをクリックするとその画像は削除されますので保存し直してください。指定枚数の保存が終了すると[結果表示]ボタンが有効です。これをクリックするとカメラパラメーター値が表示されます。カメラパラメーターはcamera.ymlのファイル名でコンポーネントの実行ファイルと同じディレクトリに出力されます。]画像出力(参考資料)参考として[保存]ボタンをクリックした時の画像ファイルをシステム環境変数のTEMP、またはTMPのディレクトリに出力しています。ファイル名:capture0.jpg~capture4.jpg(5枚保存した場合:グレースケール画像)作成したカメラパラメーターを用いて上記の画像に対しゆがみ補正したファイルも同じディレクトリに出力されます。使い方OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。概要ImageSubtractionを起動することによって入力画像から背景画像を取り出し、前景画像部を判定し、それを取り出すマスク画像を、背景画像を出力します。OpenCVCamera、CameraViewerといっしょに使用します。18.04環境での使用を推奨いたします。使い方ImageSubtractionは、入力画像から背景画像を取り出すためのコンポーネントです。Cameraから画像を取り込むためのOpenCVCameraと、処理した画像を表示するためのCameraViewerコンポーネントと使用します。18.04での手順です。)ターミナルを起動します。上記の[[LinuxにおけるOpenCVサンプルコードのビルド手順>//node/6974]に従いサンプルコードのインストールをします。ViewにRTCが表示されるようにします。新規SystemEditorを開きます。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照してください。新規にターミナル画面を開きます。以下のコマンドを実行して、rtc.confを編集します。rtc.conf最終行に以下の行を付け加えます。./CameraViewerCompターミナルを起動後の上記コマンドをさらに3回くり返し、4つのCameraViewerコンポーネントを起動します。新規にターミナルを起動します。./OpenCVCameraCompとしてOpenCVCameraCompを起動します。./ImageSubtractionCompと入力してImageSubtractionコンポーネントを起動します。ImageSubtraction0のコンポーネントが表示されているのを確認します。Dialgram]を新たに表示させます。Diagram上にドラッグ&ドロップします。下記の画面のように各コンポーネントのポートを接続します。Systems]を選択します。画面のウィンドウを動かしながら4つのCameraViewerの画面を表示させます。ImageSubtraction出力画像マウスをcapture_imageのウィンドウから外に移動するとそのタイミングで背景画面が取り込まれ、それがback_imageに表示されます。他の画面もどうなるか確認してください。コンフィギュレーション・パラメータとして以下のようなものが設定可能です。bとmが選択でき、bの時はkeyイベントに伴いバックグラウンドイメージの取り込みが行われ、mの時は画素ごとに閾値を決めるDYNAMIC_MODEと画面全体で一つの閾値を使うCONSTANT_MODEが切り替わります。縦方向の画素数を指定しますが、このサンプルでは機能しません。横方向の画素数を指定しますが、このサンプルでは機能しません。使い方OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。概要ObjectTrackingは、画面上から選択したオブジェクトを追跡して、その位置を赤い楕円形でかこんでしめすOpenCVコンポーネントのサンプルです。OpenCVCamera、CameraViewerといっしょに使用します。使い方ObjectTrackingは、画面上から選択したオブジェクトを追跡して、その位置を赤い楕円形でかこんでしめすコンポーネントです。Cameraから画像を取り込むためのOpenCVCameraコンポーネント、処理した画像を表示し、またマウスを用いてオブジェクトを選択するために使われるCameraViewerコンポーネントと共に使用します。以下ではWindowsにおいての使い方の説明をします。ViewにRTCが表示されるようにします。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照してください。Files\OpenRTM-aist\1.2.1\Components\C++\OpenCVとたどります。CameraViewer.batをダブルクリックします。OpenCVCamera.batをダブルクリックします。ObjectTracker.batをダブルクリックします。OpenCVCameraのコンポーネントが表示されているのを確認します。Dialgram]を新たに表示させます。Diagram上にドラッグ&ドロップします。下記の画面のように各コンポーネントのポートを接続します。Systems]を選択します。画面のウィンドウを動かしながらCameraViewerの画面を表示させます。ObjectTracking出力画像マウスを左クリックしながら、選択したいオブジェクトを選択します。この時矩形の反転選択画面がでるようにしてください。(場合によっては、でるようになるまで時間がかかることがあります。)選択がうまくされると上図のように赤い楕円があらわれます。このオブジェクトを物理的に動かすと、画面上で、そのオブジェクトといっしょに楕円がいっしょに動くことを確認してください。"img_histgram"のOutPortからは上記の矩形選択時に、選択した画像のヒストグラムが一瞬表示されます。使い方OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。概要Chromakeyは、2つの画面をクロマキー合成をするOpenCVコンポーネントのサンプルです。OpenCVCamera、CameraViewerといっしょに使用します。使い方Chromakeyは、ある特定の色を背景(例えば緑色)として撮影を行った画像のその特定色のところを透明化して、別の画面と合成するクロマキー合成という手法を実現するRTCコンポーネントです。実行にあたっては、OpenCVCameraコンポーネントを2つ起動して2つの画面を取り込みます。出力はCameraViewerコンポーネントを使用します。ViewにRTCが表示されるようにします。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照してください。管理者権限でコマンドプロンプトを開きOpenCVCameraコンポーネントを2つ実行できるようにします。rtc.confを編集します。以下のようなコマンドを入力し編集を行います。rtc.confとし、以下の行を付け加えます。ns_uniqueコマンドプロンプトを閉じます。Files\OpenRTM-aist\1.2.1\Components\C++\OpenCVとたどります。CameraViewer.batをダブルクリックします。OpenCVCamera.batをダブルクリックします。OpenCVCamera.batをもう一度ダブルクリックします。Chromakey.batをダブルクリックします。viewのところの[>]をクリックして、起動したコンポーネントCameraViewer0、Chromakey0、OpenCVCamera0、OpenCVCamera1のコンポーネントが表示されているのを確認します。Dialgram]を新たに表示させます。Diagram上にドラッグ&ドロップします。下記の画面のように各コンポーネントのポートを接続します。Chromakeyコンポーネントの接続OpenCVCamera0コンポーネントを右クリックして、[Activate]を選択します。Viewを開き、[編集]をクリックし、device_numを接続されている、前面画像撮影用のUSBカメラに対応している番号に変え、[適用]ボタンをクリックします。OpenCVCamera1コンポーネントを右クリックして、[Activate]を選択します。Viewを開き、[編集]をクリックし、device_numを接続されている、背景画像撮影用のUSBカメラに対応している番号に変え、[適用]ボタンをクリックします。Systems]を選択します。画面のウィンドウを動かしながらCameraViewerの画面を表示させます。View)上のChromakey0コンポーネントをクリックします。Viewが表示されます。表示されない場合は[Configuration]タブをクリックしてください。[編集]ボタンをクリックしてクロマキーカラーの設定をします。lower_blue、uppder_blue、lower_green、upper_green、lower_red、upper_redの値を前面画像でバックグラウンドとして透明化する色(この例では緑色)のRGB値の青、緑、赤の成分範囲値を設定します。[適用]ボタンをクリックします。下記のように2つの画像が合成されるの確認してください。使い方OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。概要SubtractCaptureImageは入力画像から、変化のない部分を背景と判断して、前景(移動物)を取り出すマスク画像を出力するコンポーネントで、動的な背景差分法でリアルタイムな背景更新をするコンポーネントのサンプルです。OpenCVCamera、CameraViewerコンポーネントと共に使用します。使い方SubtractCaptureImageは入力画像で動きがないものを背景とみなして背景とするのと、画面上に新たに追加された物も動きがなくしばらくおいておかれると、それの部分も背景の一部と判定し、背景画像にとりこみます。背景化を表示する画像が出力されます。このコンポーネントを使ってみるためにはCameraViewerを複数起動して複数の出力画像を同時に見るか、CameraViewerとの接続を変えながら、それぞれの出力画像を見ていってください。入力画像としてOpenCVCameraコンポーネントを使用してみると良いでしょう。ViewにRTCが表示されるようにします。RTSystemEditorの使用方法の詳細についてはRTSystemEditorを参照してください。管理者権限でコマンドプロンプトを開きCameraViewerコンポーネントを複数実行できるようにします。rtc.confを編集します。以下のようなコマンドを入力し編集を行います。rtc.confとし、以下の行を付け加えます。ns_uniqueコマンドプロンプトを閉じます。Files\OpenRTM-aist\1.2.1\Components\C++\OpenCVとたどります。CameraViewer.batをダブルクリックします。CameraViewer.batさらにダブルクリックし、全部で5つのCameraVieweerコンポーネントを起動します。OpenCVCamera.batをダブルクリックします。SubtractCaptureImage.batをダブルクリックします。viewのところの[>]をクリックして、起動したコンポーネントCameraViewer0、CameraViewer1、CameraViewer2、CameraViewer3、CameraViewer4、SubtractCaputreImage0、OpenCVCamera0のコンポーネントが表示されているのを確認します。Dialgram]を新たに表示させます。Diagram上にドラッグ&ドロップします。下記の画面のように各コンポーネントのポートを接続します。Systems]を選択します。画面のウィンドウを動かしながらCameraViewerの画面を表示させます。接続されているCameraViewer3の画面と入力画面と同じ画面であるoutput_imageに接続されているCameraViewer0の画面を見てみます。どちらにも何らかの画像が表示されているのを確認します。ここでforeMaskImgが接続されているCameraView1の画面を見てみると、最初は白い部分があったのが、徐々に真っ黒な画面になっていくというのが分かります。この画面は黒い部分が背景と見なされている部分、白い部分が前景と見なされている部分ということを示しています。前景と見なされるのは変化している部分、つまり動いている物です。そこで、真っ黒になった時に、なにか動くものを撮影してみると、その動いた物体の部分が白く表示されるのが分かります。StillImgであるCameraView3の出力には動いているものが静止しはじめると、徐々にその物体がはっきりするようになってくるというのが分かります。下記のその例の画像を示します。前景検出’’上記の画像は、撮影してしばらくおいて、backGroundMaskImgが真っ黒になった後に、指を横からゆっくりと動かして画面にいれた例です。backGroundMaskImgを見るとと動いている指の部分が前景(移動物)として見なされているのと、動きがゆっくりなのでstillImgのところで指が一部静止物と見なされてきている様子見られます。Piでコントロールする小型ロボットがある画面を、しばらく撮影し、ある時点で、そのラズパイマウスの上に猫の置物をおいた時の画像で、猫の置物が静止物と見なされ、徐々に背景と判定されていく過程の画像です。StillImgの画像は、猫の置物をほぼ静止物と見なしているのを示しています。このアルゴリズムでは、静止物を背景と見なすのには、さらに時間を必要とし、その部分を徐々に背景と見なします。backGroundImgの画像では猫の置物の一部が表示され、その部分が背景と見なされているのがわかります。この後backGroundImgはStillImgとほぼ同じ画像になるように変化していきます。foreMaskImgは、白いところがあり、この部分は、まだ前景(移動物の画像)だと見なされています。stillMaskImgについては静止画として表現するのは難しいので、ここではサンプル画像は白いままのものしか提示しません。この画像に関しては、実際に画像を表示させて確認してください。この出力は定常的には全体が白い画像が出力され、背景とも前景(移動物)とも見なされない部分、つまり背景と判定される直前に静止物が取り除かれたようなケースだけその部分を黒くした画像が出力されます。このサンプルは2020年2月7日時点では、修正が必要と見なされて、修正中となっています。GitHub上でソースコードを近々アップデートします。そのアップデートを待ってビルドして使用してください。ソースコードのビルドについては、画像処理コンポーネントの作成を参照してください。コメントを投稿するにはログインまたはユーザー登録を行ってください。