HALCON を使用してカメラを制御¶
本節では、HALCON を使用して Mech-Mind 産業用 3D カメラを接続、設定、制御する方法について説明します。HALCON を使用すれば、GigE Vision2 プロトコルによってカメラを接続することができます。以下の内容について説明します。
事前準備¶
カメラと IPC の接続 を完了します。
ヒント
Nano または Pro XS カメラを使用する場合に、スイッチを使用せずに IPC と直接接続することを推奨します。
IPC に 20.11 以上の HALCON をインストールします。
IPC に 2.0.0 以上の Mech-Eye SDK をインストールします。
ヒント
カメラファームウェアとソフトウェアのバージョンが一致しなければ Mech-Eye SDK を使用できません。ファームウェアをアップグレードする場合に、カメラファームウェアのアップグレード をお読みください。
カメラと IPC の IP アドレスを同じネットワークセグメントに設定します。
ヒント
カメラと IPC の IP アドレスを静的 IP アドレスに設定することを推奨します。IP アドレスに設定については、IP アドレスの設定 をお読みください。
HALCON をインストールしたら、以下の方式でカメラを制御できます。
HALCON アシスタントを使用してカメラを制御する¶
HALCON アシスタント機能を使用すると、迅速なカメラ接続と画像取得、パラメータ調整が実現可能です。
IPC で HALCON を実行します。
をクリックして Image Acquisition ウィンドウを開きます。カメラの接続¶
Image Acquisition ウィンドウの ソース タブで 画像取り込みインターフェース にチェックを入れ、ドロップメニューで GigEVision2 を選択します。
ヒント
ドロップメニューには GigEVision2 がなかったら、GigEVision2 の画像取得インターフェースがインストールされていないからです。 HALCON の インストールガイド を参考して、MVTec Software Manager(SOM)を通じてインターフェースをインストールしてください。
接続 タブで デバイス に接続するデバイスを選択してから 接続 をクリックしてカメラを接続します。
ヒント
正常に接続したら 接続 ボタンが 接続停止 に変わります。ボタンが変わらなければ接続に失敗したことになります。接続を切断するとき、接続停止 をクリックします。
カメラが別のクライアントに接続されている時に HALCON に接続することができません。それを切断してから HALCON に接続してください。
長すぎるカメラ名に対して、Mech-Eye Viewer でカメラを接続して カメラ名を設定 して短くすることができます。英語名を推奨します。
画像の取得¶
カメラを接続したら 接続 タブで スナップ をクリックすると画像を取得できます。
注釈
画像取得の時間を短縮したい場合、 ジャンボフレーム に設定してください。
また、画像を数回取得し、または連続取得することもできます。そのために、AcquisitionMode パラメータを調整します。
数回取得:
パラメータ タブで AcquisitionMode に MultiFrame を選択します。
右上の 更新 をクリックしてから AcquisitionFrameCount に取得回数を設定します。
接続 タブで ライブ をクリックすると画像を取得できます。
設定した回数の取得が完了すると、ライブ ボタンが 停止 になります。停止 をクリックして画像取得を停止します。
連続取得:
パラメータ タブで AcquisitionMode に Continuous を選択します。
接続 タブで ライブ をクリックすると画像を取得できます。
ライブ ボタンが 停止 になるとそれをクリックして画像取得を停止します。
注釈
AcquisitionMode に MultiFrame または Continuous を選択しても スナップ をクリックして画像を一回取得することができます。
AcquisitionMode に SingleFrame を選択した場合、画像を一回取得することしかできません。
データタイプの選択¶
カメラを接続した後、デフォルトでは 2D 画像を取得します。DeviceScanType パラメータを調整することで取得するデータのタイプ(2D 画像または深度画像)を選択できます。
パラメータ タブで DeviceScanType にデータタイプを選択します。各タイプの説明は下表に示します。
オプション
データタイプ
Areascan
2D 画像
Areascan3D
深度画像(深度情報を含む 2D 画像)
画像をキャプチャして選択したタイプのデータを取得します。
ヒント
パラメータ タブの右上の 画像の更新 にチェックを入れると、パラメータを調整したら Canvas ウィンドウの画像は自動的に更新されます。
取得領域の設定¶
カメラを接続した後、Height、 Width、 OffsetX、OffsetY を調整することで取得した画像をトリミングできます。
以下の手順に従って取得領域を設定します:
取得領域を設定するデータタイプを選択します。
スナップ をクリックして画像を一回取得して確認します。
パラメータ タブに切り替えて Height、Width、OffsetX 、OffsetY を調整します。下図では、これらのパラメータとそれぞれが決定する値を示します。
Width :取得領域の横
Height :取得領域の縦
OffsetX :取得領域の左上の角の x 座標(元画像の左上の角の座標は (0, 0) )
OffsetY :取得領域の左上の角の y 座標
注釈
下記のように以上の四つのパラメータを調整してください:
(Width + OffsetX)≦ 元画像の横
(Height + OffsetY)≦ 元画像の縦
元画像の横と縦は 読み取り専用パラメーター の WidthMax と HeightMax の値で表示されます(認知度 を 上級者 または プロフェッショナル に設定する必要があります)。
画像を再度取得してトリミングの結果を確認します。
ヒント
パラメータ タブの右上の 画像の更新 にチェックを入れると、パラメータを調整したら Canvas ウィンドウの画像は自動的に更新されます。
コード生成 タブに切り替えて コードの挿入 をクリックして対応するコードを生成します。
別のタイプのデータに取得領域を設定:
現在のアシスタントウィンドウでカメラの接続を切断します。
改めてアシスタントウィンドウを開いてカメラを接続します。
別のデータタイプを選択して以上の手順を実行します。
注釈
以上の四つの取得領域パラメータは、パラメータグループに保存されません。カメラの電源が切れたらそのパラメータはリセットされます。パラメータを保存したい場合に、コードを生成して保存してください。
DeviceScanType と Scan3DBinningEnable パラメータを調整すると、取得領域パラメータの値もリセットされます。
取得領域と Scan3DROI の違い点¶
Mech-Eye 産業用 3D カメラでは ROI を設定する Scan3DROILeft、Scan3DROITop、Scan3DROIHeight 、Scan3DROIWidth パラメータ(合わせて「Scan3DROI」といいます)を調整できます。
取得領域パラメータと Scan3DROI との違い点は下表に示します。ニーズに応じて使用するパラメータを選択してください。
取得領域 |
Scan3DROI |
パラメータグループに保存不能、カメラ電源が切れたらリセットされる |
パラメータグループに保存可能 |
2D 画像も深度画像も設定可能 |
2D 画像は設定不能 |
画像をトリミング可能 |
画像をトリミング不能 |
HALCON だけに対応 |
パラメータの調整¶
より高品質な画像を取得するために、関連するパラメータを調整します。
ヒント
カメラがパラメータグループ設定機能に対応できます。パラメータグループを切り替えることで簡単にカメラに異なるパラメータ値を使用することができます。ただし、指定されたパラメータグループでなければパラメータを設定できません。
パラメータグループを追加/削除する場合、Mech-Eye Viewer で行ってください。Mech-Eye Viewer でパラメータグループを設定したら、HALCON の パラメータ タブで右上の 更新 をクリックして変更済みのカメラ設定を読み取ります。
パラメータを調整するために以下のステップを実行してください。
カメラを接続してから パラメータ タブで UserSetSelector に調整するパラメータグループを選択します。
UserSetLoad の右にある 適用 をクリックして設定を読み取ります。
注釈
適用 をクリックしてもパラメータが変更されない場合に再度クリックしてください。
調整するパラメータの値を変更します。
UserSetSave の右にある 適用 をクリックして設定を保存します。
コード生成 タブに切り替えて コードの挿入 をクリックして対応するコードを生成します。
参考情報:
GenICam がサポートするカメラパラメータの説明については、GenICam パラメータ説明 をお読みください。
GenICam がサポートするカメラパラメータは Mech-Eye Viewer で使用できるパラメータとはほとんど一致しています。パラメータの対応関係については、GenICam 対応のソフトウェアで使用できるパラメータ をお読みください。
自動露出ROI や 深度設定、ROI などのカメラパラメータを設定するとき、質の高い画像を取得するまで、値を調整するたびに画像を確認してから調整しなければなりません。HALCON では画像の変化を即時に確認することはできませんが、Mech-Eye Viewer ではこれらのパラメータを直感的に設定できます。詳しくは Mech-Eye Viewer を使用して GenICam 対応のソフトウェアにカメラパラメータを設定 をお読みください。
ヒント
Mech-Eye Viewer でカメラを接続する前に、カメラと HALCON との接続を切断してください。接続できない場合に、HALCON を終了して再度接続してください。
HALCON サンプルプログラムを使用してカメラを制御する¶
当社は、GitHub で HALCON サンプルプログラムを提供しています。カメラの接続、画像の取得、パラメータの調整、データの保存に使用できます。ユーザーは、HALCON サンプルプログラムを直接使用し、またはニーズに応じて編集することが可能です。
注釈
HALCON サンプルプログラムは、C++ で記述されており、HALCON の HDevelop 統合開発環境で直接実行できます。
サンプルプログラムの実行¶
HALCON サンプルプログラムの取得 については、 を順番にクリックすればダウンロードできます。
以下のいずれかの方法で HALCON でサンプルプログラムを開きます。
HALCON を実行し、サンプルプログラムを プログラムウィンドウ にドラッグします。
サンプルプログラムを右クリックして プログラムから開く をクリックして HDevelop を選択します。
以下のいずれかの方法で接続可能なカメラリストを表示します。
プログラムウィンドウ で info_framegrabber の行を選択してキーボードの F6 をクリックします。
ヒント
接続可能なカメラリストを取得するには、変数ウィンドウ の 制御変数 エリアの DeviceInfos をクリックしてください。
以下のいずれかの方法で HALCON でカメラを切り替えます。
unique_name によってカメラを切り替えます。
カメラ番号によってカメラを切り替えます。
以下のいずれかの方法で HALCON でサンプルプログラムのを実行します。
サンプルプログラムを正常に実行したら、実行終了後、サンプルプログラムフォルダで取得した 2D 画像と点群を確認できます。デフォルトでは、2D 画像と点群はそれぞれ image2d.bmp と PointCloud.ply に名付けられます。
ヒント
サンプルプログラムを実行終了後、ツールバーの をクリックして ブログラムの実行をリセット してください。そうしなければ Mech-Eye Viewer でカメラを接続することができません。
グラフィックスウィンドウで点群を表示したら、このウィンドウで Continue をクリックして実行を続けてください。そうしなければ visualize_object_model_3d 演算子にとどまります。
画像取得の時間を短縮したい場合、IPC で ジャンボフレーム に設定してください。
ネットワークの不具合によりデータが失われた場合に、以下のコマンドを使用して失われるパケットの最大許容数を増やすことができます。
set_framegrabber_param (AcqHandle, '[Stream]GevStreamMaxPacketGaps', ParameterValues)
サンプルプログラムについての補足説明¶
カメラの接続
info_framegrabber ('GigEVision2', 'device', Info, DeviceInfos) tuple_regexp_select (DeviceInfos, 'MechEye', MechEyeCameraInfos) open_framegrabber ('GigEVision2', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'default', MechEyeCameraInfos[0], 0, -1, AcqHandle)
画像の取得
grab_image (Image2d, AcqHandle) grab_data (Image3d, Region, Contours, AcqHandle, ObjectModel3D)
パラメータの取得
get_framegrabber_param (AcqHandle, 'available_param_names', ParameterValues)
パラメータの設定
このサンプルプログラムのパラメータには、2D パラメータ、3D パラメータ、ROI、深度範囲、点群の設定が含まれます。
2D パラメータ:
* Switch to the 2D scanning mode. set_framegrabber_param (AcqHandle, 'DeviceScanType', 'Areascan') set_framegrabber_param (AcqHandle, 'AcquisitionMode', 'SingleFrame') get_framegrabber_param (AcqHandle, 'Width', Width) get_framegrabber_param (AcqHandle, 'Height', Height) get_framegrabber_param (AcqHandle, 'PixelFormat', PixeLFormat) * Set the 2D scanning parameters. set_framegrabber_param (AcqHandle, 'Scan2DExposureMode', 'Timed') set_framegrabber_param (AcqHandle, 'Scan2DExposureTime', 100)3D パラメータ:
* Switch to the 3D scanning mode: set_framegrabber_param (AcqHandle, 'DeviceScanType', 'Areascan3D') * Open the 3D object model generator. set_framegrabber_param (AcqHandle, 'create_objectmodel3d', 'enable') set_framegrabber_param (AcqHandle, 'add_objectmodel3d_overlay_attrib', 'enable') get_framegrabber_param (AcqHandle, 'Width', Width) get_framegrabber_param (AcqHandle, 'Height', Height) get_framegrabber_param (AcqHandle, 'PixelFormat', PixeLFormat) * Set the 3D scanning exposure time parameter. set_framegrabber_param (AcqHandle, 'Scan3DExposureCount', 1) set_framegrabber_param (AcqHandle, 'Scan3DExposureTime', 8)深度範囲:
* Set the 3D scanning depth range parameter(unit: mm). set_framegrabber_param (AcqHandle, 'DepthLowerLimit', 1) set_framegrabber_param (AcqHandle, 'DepthUpperLimit', 3000)点群:
* Set the 3D scanning point cloud filter parameter. set_framegrabber_param (AcqHandle, 'CloudOutlierFilterMode', 'Normal') set_framegrabber_param (AcqHandle, 'CloudSmoothMode', 'Normal')
保存:
2D 画像:
* Acquire the 2D image from the camera. grab_image (Image2d, AcqHandle) * Save the 2D image result in "Image2d.bmp" write_image( Image2d , 'bmp' , 0 , 'Image2d' )点群:
* Acquire the 3D data from the camera. grab_data(Image3d, Region, Contours, AcqHandle, ObjectModel3D) get_object_model_3d_params(ObjectModel3D, 'num_points', NumOfPoints) if(NumOfPoints != 0) * Save the point cloud result in "PointCloud.ply" write_object_model_3d (ObjectModel3D, 'ply', 'PointCloud.ply', [], []) endif
接続の切断:
clear_object_model_3d (ObjectModel3D) close_framegrabber (AcqHandle)
注釈
* で始まるのは説明の内容です。
パラメータの調整¶
より高品質な画像を取得するために、関連するパラメータを調整します。
ヒント
カメラがパラメータグループ設定機能に対応できます。パラメータグループを切り替えることで簡単にカメラに異なるパラメータ値を使用することができます。ただし、指定されたパラメータグループでなければパラメータを設定できません。
パラメータを追加/削除する場合、Mech-Eye Viewer で行ってください。
パラメータを調整するために以下のステップを実行してください。
以下の演算子を使用して接続可能なカメラリストを表示します。
get_framegrabber_param (AcqHandle, 'UserSetSelector_values', ParameterValues)
制御変数 の ParameterValues で全てのパラメータ値を確認します。
以下の演算子を使用して変更するパラメータグループを選択します。UserSetSelector と UserSetLoad はカメラパラメータで、それぞれパラメータグループの選択とロードに使用されます。ParameterGroupName を実際のパラメータグループ名に取り換えてください。
set_framegrabber_param (AcqHandle, 'UserSetSelector','ParameterGroupName') set_framegrabber_param (AcqHandle, 'UserSetLoad','ParameterGroupName')
以下の演算子を使用して指定されたパラメータの値を取得します。ParameterName を実際のパラメータグループ名に取り換えてください。ParameterValues は取得したパラメータ値を保存する変数で、ニーズに応じて調整することができます。変数を引用符で囲む必要はありません。
get_framegrabber_param (AcqHandle, 'ParameterName', ParameterValues)
制御変数 の ParameterValues でパラメータ値を確認します。
以下の演算子を使用してパラメータ設定を変更します。ParameterName を実際のカメラパラメータ名に、NewParameterValue を新しいパラメータ値に取り換えます。
set_framegrabber_param (AcqHandle, 'ParameterName', 'NewParameterValue')
以下の演算子を使用してパラメータ設定の変更をパラメータグループに保存します。UserSetSave はカメラパラメータで、パラメータの設定をパラメータグループに保存するために使用されます。ParameterGroupName を実際のパラメータグループ名に取り換えます。
set_framegrabber_param (AcqHandle, 'UserSetSave', 'ParameterGroupName')
参考情報:
GenICam がサポートするカメラパラメータの説明については、GenICam パラメータ説明 をお読みください。
GenICam がサポートするカメラパラメータは Mech-Eye Viewer で使用できるパラメータとはほとんど一致しています。パラメータの対応関係については、GenICam 対応のソフトウェアで使用できるパラメータ をお読みください。
自動露出ROI や 深度設定、ROI などのカメラパラメータを設定するとき、質の高い画像を取得するまで、値を調整するたびに画像を確認してから調整しなければなりません。HALCON では画像の変化を即時に確認することはできませんが、Mech-Eye Viewer ではこれらのパラメータを直感的に設定できます。詳しくは Mech-Eye Viewer を使用して GenICam 対応のソフトウェアにカメラパラメータを設定 をお読みください。
ヒント
Mech-Eye Viewer でカメラを接続する前に、カメラと HALCON との接続を切断してください。接続できない場合に、HALCON を終了して再度接続してください。