ソリューションの実装
本節では、ステーターソリューションの実装手順を説明します。まとめて言えば以下の流れに沿って進めます。

ビジョンシステムのハードウェア設置
ビジョンシステムのハードウェア設置は、ハードウェア機器(カメラおよびIPC)を実際の動作環境に統合し、ビジョンシステムの正常な動作をサポートするプロセスです。
この段階では、ビジョンシステムのハードウェアの取り付けと接続を完了させます。詳細については、ビジョンシステムのハードウェア設置 をご参照ください。
ロボット通信設定
ロボット通信設定を行う前に、ソリューションを取得します。クリックしてソリューション取得方法を確認します。
-
Mech-Visionを起動します。
-
Mech-Vision のようこそ画面で ソリューションライブラリから新規作成 をクリックし、ソリューションライブラリを開きます。
-
ソリューションライブラリの代表的な導入事例を選択し、右上の
アイコンをクリックしてさらに多くのリソースをダウンロードします。それから表示されたウィンドウで確認をクリックします。
-
リソースを取得した後、バラ積みされたワークのピッキングのステーターを選択して作成ボタンをクリックし、表示されたウィンドウに確認ボタンをクリックします。
ダウンロードした後、Mech-Vision ではこのソリューションは自動的に開かれます。
Mech-Mind ビジョンシステムとロボット側(ロボット、PLC もしくは上位システム)との通信を構築します。
ステーターソリューションでは、標準インターフェース通信を使用します。詳細な手順説明は、標準インターフェース通信ご参照ください。
ハンド・アイ・キャリブレーション
ハンド・アイ・キャリブレーションとは、カメラ座標系とロボット座標系との対応関係を求めることを指します。ビジョンシステムにより取得した対象物の位置姿勢をロボット座標系に変換し、それによってロボットが正確に把持作業を完了するように制御します。
ハンド・アイ・キャリブレーションの使用ガイドを参考にして実行してください。
カメラを設置し、またはキャリブレーションを実施した後、ロボットとカメラの相対位置が変わったら再度ハンド・アイ・キャリブレーションを行ってください。 |
ビジョンプロジェクトの設定
通信設定とハンド・アイ・キャリブレーションを完了させたあと、Mech-Vision を使用してビジョンプロジェクトを設定します。
ビジョンプロジェクトの設定は、下図のような手順で行われます。

カメラ接続と画像取得
-
使用するカメラを接続します。
Mech-Eye Viewer で接続するカメラを見つけて接続をクリックします。
-
カメラパラメータを調整します。
高品質で点群が完全な 2D 画像を取得するためにパラメータを調整します。詳細な調整方法は、LSR L パラメータをお読みください。
-
画像を取得します。
カメラを接続してパラメータグループを設定した後、対象物の写真を撮ります。上部の
ボタンをクリックして一回だけ撮影します。すると対象物の 2D 画像と点群が表示されます。画像がはっきり見られて点群が完全でエッジもはっきりしているか確認します。使える 2D 画像と点群の例は以下にようです。
-
Mech-Vision でカメラを接続します。
カメラから画像を取得ステップをクリックして選択し、ステップパラメータで仮想モードをオフにして、カメラを選択をクリックします。
表示される画面で接続するカメラの右にある
アイコンをクリックします。アイコンが
に変わったらカメラの接続が完了です。それから、下図に示すように右のパラメータグループを選択します。
これでカメラ実機の接続が完了です。これ以上パラメータを調整する必要はありません。カメラから画像を取得ステップの右の
アイコンをクリックしてこのステップを実行します。エラーメッセージが表示されなければ、カメラが正常に接続されて画像を撮影できることになります。
ワーク認識
本ソリューションではワーク認識ステップを使用して部品を認識します。ワーク認識ステップの設定ツールをクリックしてワーク認識設定ウィンドウで設定を進めます。主な設定フローは下図に示します。

点群前処理
点群前処理を行い、各パラメータを調整してデータを前処理し、元の点群をより鮮明にします。これにより、認識精度と効率を向上させることができます。
点群前処理した後、実行ボタンをクリックして結果を確認します。
ワーク認識
点群前処理が完了した後、ワークライブラリでワークの点群モデルを作成し、ワーク認識ツールでモデルのマッチングに関連するパラメータを設定します。
-
ワークモデルを作成して把持位置姿勢を設定します。
-
点群モデルを作成します。ワークライブラリを開く をクリックしてワークライブラリを開きます。カメラで取得した点群から点群モデルを生成 します。
-
ワーク向きを識別するためのパラメータを調整します。
ワークの向きを識別する必要がないプロジェクトでは、この手順をスキップしてください。 位置姿勢を計算してマッチング結果をフィルタリング。ワークはリング状をしているので、その向きを認識するために位置姿勢を計算してマッチング結果をフィルタリングパラメータを調整します。ワークには対称性があるので対称性を手動で設定を選択し、Z軸を中心にをオンにして対称回数と角度範囲をそれぞれ30と±180°に設定します。
重み付けモデルを設定 します。このようなワークの向きを認識するのは難しいので重み付けモデルを設定することが推奨されます。ワークライブラリウィンドウの右上の点群表示設定をサーフェス点群のみを表示に設定してから重み付けモデルを設定のモデル編集ボタンをクリックしワーク周辺の突出部分(以下の赤色の部分)を重み付けモデルとして設定します。
-
ワーク中心点と把持位置姿勢を設定します。通常、ワーク中心点は、幾何中心点を使用し、現場で使用するグリッパに合わせて把持位置姿勢を設定します。
-
-
認識関連パラメータを設定 します。
-
ワークの対称性を有効にするために、ワーク認識の右の上級モードをオンにします。
-
マッチングモード:マッチング精度をアップするために、マッチングモードを自動的に設定をオフにし、低精度マッチングモードと高精度マッチングモードをいずれもサーフェスマッチングに設定します。
-
低精度マッチングの位置姿勢を調整またはフィルタリング:戦略を選択を誤マッチングの可能性がある結果をフィルタリングに設定します。
-
出力 - 出力結果の最大数:このパラメータ値をパレット満杯のワーク数に設定します。このプロジェクトでは、出力結果の最大数 を 6 に設定しています。
-
それから、ステップを実行ボタンをクリックしてマッチングの効果を確認します。
位置姿勢を調整
ワークの位置姿勢を取得した後、位置姿勢を一括調整(V2)ステップを実行して調整します。位置姿勢を一括調整(V2)の設定ツールをクリックして位置姿勢調整ツールを開いて設定を行います。主な設定フローは下図に示します。

-
ロボット座標系におけるワーク位置姿勢を出力するために、位置姿勢をロボット座標系に変換をチェックして変換を行います。
-
方向調整の自動合わせを選択し、適用シーンを Z軸方向合わせ(部品供給)に設定して、ロボットが指定方向に沿ってワークを把持するようにします。衝突を回避できます。
-
ソート方法を平面上のZ形状でソートに設定し、ワーク供給方向が決まっているのでマニピュレータによる設定方法で基準位置姿勢を設定し、そのX軸をパレットに平行するようにする必要があります。最適な把持順序を確保するために、行方向 を 基準位置姿勢のX軸の正方向 に設定し、列方向 を 基準位置姿勢のY軸の正方向 に設定します。
-
後続の経路計画にかかる時間を短縮するために、位置姿勢の Z 軸と基準方向との角度によって把持できないワーク位置姿勢を除去します。最大角度差を 20°に設定します。
-
共通設定
「共通設定」パネルに進み、新規ポート数を設定を 1 に設定します。このステップに入力ポートと出力ポートは 1つずつ追加されます。ワーク認識の把持位置姿勢の情報出力ポートを経路計画ステップに接続します。
経路計画
ワーク認識を完了された後、Mech-Vision の経路計画で経路計画とロボットのプログラムを作成して把持を実行します。
経路計画 ステップを選択し、設定ツール ボタンをクリックして、経路計画設定ツール 画面を表示して計画経路の実行方法を確認します。
以下のように経路計画を設定します。

シーンの物体を設定
シーンの物体を設定する目的は、実際の作業環境を再現することで、ロボットの動作経路を計画できるようにすることです。詳細な説明は、シーンの物体の設定をお読みください。
できる限り実際の現場を再現するように設定します。ここでは以下のように設定します。

ロボットハンドを設定
ロボットハンドを仮想空間に表示して衝突検出に使用するためにロボットハンドモデルを設定します。詳細な説明は、ロボットハンドの設定をお読みください。
|
ワークフローを構築
シーンの物体とロボットハンドを設定した後、現場の必要に応じて経路計画ステップの経路計画設定ツールのワークフローを調整します。ワークをピックアップするワークフローは以下のようです。

コンテナの上の固定点1と2は「移動」ステップであり、ロボット実機のティーチングポイントで外部に経路点を送信しません。残りの3つの移動ステップは外部に経路点を送信し、合わせて3つの経路点を送信します。
シミュレーションと試行
ツールバーのシミュレートをクリックすると、編集した経路計画設定ツールのワークフローをシミュレートし、ビジョンシステムを確認することができます。
ワークを整列してパレットに配置して経路計画設定ツールツールバーのシミュレートボタンをクリックして把持をシミュレートします。把持するたびにワークを再配置が必要です。シミュレーションを繰り返し、10回の把持をテストします。10 回のテストですべての把持が成功した場合、ビジョンシステムの構築に問題がないと判断できます。
シミュレーションに異常が発生した場合、よくある課題を参考にして解決してください。
ロボットの把持と配置
ロボットプログラム作成
シミュレーションの効果に問題がなければ、ABB ロボット把持・配置プログラムを作成することになります。
ABB サンプルプログラム MM_S3_Vis_Path は、必要な機能を基本的に満たします。このサンプルプログラムを基にして変更を加えることができます。MM_S3_Vis_Path プログラムの詳細な説明については、サンプルプログラム解説 をご参照ください。
変更時の注意事項
サンプルプログラムを基にして以下の通り変更を行います。
-
IPCのIPアドレスとポート番号を指定します。MM_Init_Socket コマンドの IP アドレスとポート番号を、IPC の実際の IP アドレスとポート番号に変更してビジョンシステムと一致させます。
変更前 変更後(例) MM_Init_Socket "127.0.0.1",50000,300;
MM_Init_Socket "192.168.1.5",50000,400;
-
ワークを把持するためにグリッパを閉じる DO ポート信号を設定します。DOコマンドは、現場で実際に使用されているDOポート番号に従って設定する必要があります。
変更前 変更後(例) !add object grasping logic here, such as "setdo DO_1, 1;" Stop;
!add object grasping logic here, such as "setdo DO_2, 0;" setdo DO_2, 0;
-
ワークを配置するためにグリッパを開く DO ポート信号を設定します。DOコマンドは、現場で実際に使用されているDOポート番号に従って設定する必要があります。
変更前 変更後(例) !add object releasing logic here, such as "setdo DO_1, 0;" Stop;
!add object releasing logic here, such as "setdo DO_2, 1;" setdo DO_2, 1;
参考:変更後のサンプルプログラム
MODULE MM_S3_Vis_Path
!----------------------------------------------------------
! FUNCTION: trigger Mech-Vision project and get planned path
! Mech-Mind, 2023-12-25
!----------------------------------------------------------
!define local num variables
LOCAL VAR num pose_num:=0;
LOCAL VAR num status:=0;
LOCAL VAR num toolid{5}:=[0,0,0,0,0];
LOCAL VAR num vis_pose_num:=0;
LOCAL VAR num count:=0;
LOCAL VAR num label{5}:=[0,0,0,0,0];
!define local joint&pose variables
LOCAL CONST jointtarget home:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL CONST jointtarget snap_jps:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget camera_capture:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget drop_waypoint:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget drop:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS jointtarget jps{5}:=
[
[[-9.7932,85.483,6.0459,-20.5518,-3.0126,-169.245],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
[[-9.653,95.4782,-4.3661,-23.6568,-2.6275,-165.996],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
[[-9.653,95.4782,-4.3661,-23.6568,-2.6275,-165.996],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
[[-9.653,95.4782,-4.3661,-23.6568,-2.6275,-165.996],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
[[-9.7932,85.483,6.0459,-20.5518,-3.0126,-169.245],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]
];
!define local tooldata variables*LOCAL PERS tooldata gripper1:=[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]];
PROC Sample_3()
!set the acceleration parameters
AccSet 50, 50;
!set the velocity parameters
VelSet 50, 1000;
!move to robot home position
MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
!initialize communication parameters (initialization is required only once)
MM_Init_Socket "192.168.1.5",50000,400;
!move to image-capturing position
MoveL camera_capture,v1000,fine,gripper1;
!open socket connection
MM_Open_Socket;
!trigger NO.1 Mech-Vision project
MM_Start_Vis 1,0,2,snap_jps;
!get planned path from NO.1 Mech-Vision project; 2nd argument (1) means getting pose in JPs
MM_Get_VisPath 1,1,pose_num,vis_pose_num,status;
!check whether planned path has been got from Mech-Vision successfully
IF status<>1103 THEN
!add error handling logic here according to different error codes
!e.g.: status=1003 means no point cloud in ROI
!e.g.: status=1002 means no vision results
Stop;
ENDIF
!close socket connection
MM_Close_Socket;
!save waypoints of the planned path to local variables one by one
MM_Get_Jps 1,jps{1},label{1},toolid{1};
MM_Get_JPS 2,jps{2},label{2},toolid{2};
MM_Get_JPS 3,jps{3},label{3},toolid{3};
!follow the planned path to pick
!move to approach waypoint of picking
MoveAbsJ jps{1},v1000,fine,gripper1;
!move to picking waypoint
MoveAbsJ jps{2},v1000,fine,gripper1;
!add object grasping logic here, such as "setdo DO_2, 0;"
setdo DO_2, 0;
!move to departure waypoint of picking
MoveAbsJ jps{3},v1000,fine,gripper1;
!move to intermediate waypoint of placing
MoveJ drop_waypoint,v1000,z50,gripper1;
!move to approach waypoint of placing
MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
!move to placing waypoint
MoveL drop,v300,fine,gripper1;
!add object releasing logic here, such as "setdo DO_2, 1;"
setdo DO_2, 1;
!move to departure waypoint of placing
MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
!move back to robot home position
MoveAbsJ Home\NoEOffs,v3000,fine,gripper1;
ENDPROC
ENDMODULE
把持テスト
実際の生産の安定性を確保ために、変更されたサンプルプログラムを実行してロボットによる把持を試行します。詳細な説明については、標準インターフェース通信をテストをお読みください。
テストの前に、以下の点をティーチングします。
名称 | 変数 | 解析 |
---|---|---|
初期位置 |
home |
ティーチングする初期位置。初期位置は、把持するワークや周辺機器から離れ、カメラの視野を遮らないようにする必要があります。 |
Mech-Visionプロジェクトの位置姿勢を入力 |
snap_jps |
ユーザーによりカスタマイズされた関節角度です。 |
撮影位置 |
camera_capture |
ティーチングする撮影位置。画像撮影位置とは、カメラが画像を撮影したときにロボットがいる位置を指します。この位置では、ロボットハンドがカメラ視野を遮らないようにする必要があります。 |
中間点 |
drop_waypoint |
ロボットの移動をスムーズにし、衝突を回避するために中間点を追加します。 |
配置位置 |
drop |
ワークを配置する位置。 |
グリッパデータ |
gripper1 |
ロボット移動時に使用するグリッパ。 |
ティーチング完了後、以下の表に示すようにワークを配置してからロボットを低い速度で動かして把持します。このソリューションでは、ワークが整列して並べられ、かつ供給時に異常がなければ把持のテストを行えば十分です。