ROS上のOMRON SENTECHカメラSDK

1. 概要

omronsentech_cameraパッケージはオムロン センテック株式会社が提供するパッケージです。 本パッケージ対応カメラはLinux版のSentechSDK対応カメラと同様です。 カメラの機能や*GenICam GenApi*ノードのアクセスはSentechSDKのカメラ制御機能(Transport Layer) モジュール経由で行います。 *GenICam GenApi*ノードとROSにあるノードとは全く別の物であることを注意下さい。 各GenICam GenApiノードは、汎用インタフェースを介してアクセス可能なカメラデバイスの機能またはレジスタに対応しています。GenICam GenApiの詳細はGenICam GenApiドキュメント(英語)を参照下さい。

2. インストール

本パッケージはUbuntu 16.04 64ビット上のROS-KineticとUbuntu 18.04 64ビット上のROS-Melodicで動作確認済みです。 SentechSDKのカメラ制御機能(Transport Layer) モジュールを利用するため、本パッケージをインストールする際は事前にSentechSDKをインストールする必要があります。下記のURLでSentechSDK (USB3VisionとGigEVision)がダウンロードできます: https://sentech.co.jp/products/USB/software.html.

本パッケージは下記のROSパッケージが必要となります:

  1. camera_info_manager
  2. image_transport
  3. message_generation
  4. sensor_msgs
  5. std_msgs
  6. pluginlib
  7. nodelet
  8. roscpp
  9. roslaunch
  10. roslint
  11. rospy

インストール手順として、catkinのワークスペースにomronsentech_camera.gitをクローンするかこのレポジトリに全ファイルをコピーして下さい。 通常のROSパッケージとしてパッケージをビルドする前にSentechSDKの環境変数の設定を確認して下さい:

$ echo $STAPI_ROOT_PATH

環境変数が未設定の場合は、下記のコマンドを実行して下さい(SentechSDKを/opt/sentechにインストールした場合):

$ source /opt/sentech/.stprofile

omronsentech_cameraの内部構成は以下のとおりです。

/
|-./README.md
|-./README-ja.md
|-./CMakeLists.txt
|-./nodelet_plugins.xml
|-./package.xml
|-./rosdoc.yaml
|-./doc/
|      |-./html/
|      |-./mainpage-en.md
|      |-./mainpage-ja.md
|      |-./manifest.yaml
|
|-./examples/
|      |-./cpp/grabber.cpp
|      |-./python/grabber.py
|
|-./include/
|      |-./omronsentech_camera/*.h
|                             
|-./launch/
|      |-./*.launch
|      |-./*.yaml
|
|-./msg/
|      |-./*.msg
|
|-./src/
|      |-./omronsentech_camera/*.cpp
|                             
|-./srv/
       |-./*.srv

docフォルダにあるドキュメントを生成する場合、omronsentech_cameraフォルダで下記のコマンドを実行下さい:

$ rosdoc_lite -o doc

注意:Doxygenとrosdoc_liteパッケージが必要となります。

3. stcamera_nodeノード

パッケージにあるstcamera_nodeはパラメータ**camera_to_connect**により自動的に最初見つけたカメラ、指定したカメラや全カメラと接続し、画像を取得します。

stcamera_nodeノードの実行は次のコマンドのいずれかを実行下さい:

又は

ノードをstcamera_node.launchファイルスクリプトで起動するとカメラ接続パラメータがstcamera_node.yamlで簡単に設定できます。 パラメータ設定の詳細は次の章を参照下さい。

3.1. ノードパラメータ

パラメータの値は大文字と小文字を区別します。設定できるパラメータは下記の通りです:

3.2. カメラの名前空間(ネームスペース)

stcamera_nodeはカメラと接続する際にカメラに対するトピックとサービスを宣言します。接続されたカメラを区別するために、各カメラには独自の名前空間(ネームスペース)があります。カメラのネームスペースは下記のルールで自動的に生成します:

*{dev_CAMERA-NS}*の値はサービスコール**get_device_list**また**device_connection**トピックでも得られます。

3.3. 発行するトピック

stcamera_nodeが発行するトピックは下記の通りです:

No.  トピック 説明
1 device_connection 接続または切断したときに発行されます。
2 *{dev_CAMERA-NS}*/**camera_info** ROSのimage_transport基準です。
3 *{dev_CAMERA-NS}*/**chunk** チャンクデータを取得したときに発行されます。
4 *{dev_CAMERA-NS}*/**event** カメライベントを登録し、登録されたイベントが発生したときに発行されます。
5 *{dev_CAMERA-NS}*/**image_raw*** 画像データを取得したときに発行されます(ROSのimage_transport基準)。

3.4. サービス

stcamera_nodeが提供するサービスは下記の通りです:

(下記に記載するGenICamノードはROSのノードとは全く別の物です)

注意:

3.5. エラーコード

コード 説明
< 0 GenTLエラーコード。GenICam GenTLドキュメント(英語)をご参照下さい。
0 エラー無.
30000 GenICamのジェネリック例外が発生しました。
30001 モジュール名が無効です。
30002 (GenICam) ノードが無効またはアクセス不能です。
30003 イベントがすでに有効です。
30004 イベントがすでに無効です。
30005 画像取得がすでに有効です。
30006 画像取得がすでに無効です。
30007 チャンクがサポートされていません。
30008 チャンク名が無効です。
30009 トリガがサポートされていません。
30010 トリガ名が無効です。
30011 イベントがサポートされていません。
30012 イベント名が無効です。

4. 使用法

4.1. カメラのGainを変更し、image_viewで取得画像を表示する

シンプルな操作と画像表示は下記の通りの流れを参照下さい。

4.2. Launchファイルスクリプトの事例

Launchファイルスクリプトの例とそのパラメータはパッケージに含まれています。 それらを使用するには、次の手順を参照下さい。
  • stcamera_node.launch: このLaunchファイルスクリプトはstcamera_nodeを実行します。検出されたカメラと接続します。 このスクリプトはstcamera_node.yamlにキャリブレーションファイル(オプション)を設定せず、そのまま起動することができます。
  • stcamera_nodelet_manager.launch: このLaunchファイルスクリプトは、nodeletバージョンのstcamera_nodeを実行します。検出されたカメラと接続します。このスクリプトはstcamera_nodelet_manager.yamlにキャリブレーションファイル(オプション)を設定せず、そのまま起動することができます。
  • stcamera_node_imageproc.launch: このLaunchファイルスクリプトは、接続されたカメラからストリーミングされた画像を表示するstcamera_nodeとimage_viewという2つのノードを実行します。 このスクリプトを起動する際に、stcamera_node_imageproc.launchとstcamera_node_imageproc.yamlにCAMERA_IDまたはCAMERA_MODEL(SERIAL)および名前空間dev_CAMERA-NSの指定が必要となります:
    • stcamera_node_imageproc.launchにある**camera_namespace**:
      <arg name="camera_namespace" default="dev_CAMERA-NS" />
    • stcamera_node_imageproc.yamlにある**camera_to_connect**:
      camera_to_connect: ["CAMERA_ID or CAMERA_MODEL(SERIAL)"]
    • オプション: stcamera_node_imageproc.yamlにある**default_calibration_file**又は*{dev_CAMERA-NS}*/**calibration_file**:
      default_calibration_file: file:///home/mydata/calibration.xml

4.3. ROSノードクライアント事例

exampleフォルダにあるノード「grabber」はシンプルなROSノードクライアント(両方C++とPythonベースがあります)事例として提供します。Grabberは下記の処理を行います:
  1. サービス「**get_sdk_info**」を呼び出して、SentechSDKとGenTL情報を取得し、画面に表示します。
  2. サービス「**get_device_list**」を呼び出して、接続済みのカメラを検出し、カメラのネームスペースを取得します。
  3. サービス「**get_genicam_node_info**」と「**write_node_float**」を呼び出して、カメラのGain値を読み取りと書き込みます。
  4. トピック「image_raw」を参照して、十枚まで画像を取得し、画像サイズとエンコード情報を画面に表示します。
  5. サービス「**enable_trigger**」を呼び出して、トリガモードを有効にして、十回まで一秒間ごとにサービス「**send_soft_trigger**」を呼び出して、画像を取得します。トリガモードを有効にする際、セレクタはFrameStartを指定し、ソースはSoftwareを指定します。
GigEVisionカメラを利用する場合は、カメラに有効なIPアドレスがあることを確認して下さい。IPアドレスは、サービス「**get_device_list**」または「**get_gige_ip**」を呼び出すことで確認できます。静的IPアドレスは、サービス「**set_gige_ip**」で設定できます。例:
$ rosservice call /stcamera_node/get_gige_ip "00:11:1c:xx:xx:xx" (MACアドレス「00:11:1c:xx:xx:xx」を持っているGigEVisionカメラのIPアドレスを取得する場合)、及び
$ rosservice call /stcamera_node/set_gige_ip "00:11:1c:xx:xx:xx" 192.168.y.z 255.255.255.0 0.0.0.0 (MACアドレス「00:11:1c:xx:xx:xx」を持っているGigEVisionカメラの静的IPアドレスを設定する場合)

5. カスタマイズ

stcamera_nodeは、OMRON SENTECHカメラを制御するために、一般的な機能を提供します。特定のカメラに対応するためのカスタマイズが必要な場合は、StCameraInterfaceクラスを継承し、別途のROSノードを作成するか既存のstcamera_node(StCameraNodeクラス)を編集する必要があります。stcamera_node(StCameraNodeクラス)を編集する場合、StCameraNodeクラスのinitializeCamera()関数にあるカメラインターフェイス初期化プロセスを編集する必要があります。
StCameraInterfaceやStCameraNodeクラスの構造については、doxygenドキュメントを参照下さい。

6. API ドキュメント

コードのAPIやMsg/Srv APIのドキュメントは下記のURLでアクセスできます:https://wiki.ros.org/omronsentech_camera.

7. 質問・フィードバックや不具合の報告

質問・フィードバックやバグが見つかった場合は、support-ros AT sentech.co DOT jpにお問い合わせ下さい。


omronsentech_camera
Author(s): OSE ROS Support
autogenerated on Tue Jul 2 2019 19:44:14