ソリューションの実装
本節では、丸鋼ビレットソリューションの実装手順を説明します。まとめて言えば以下の流れに沿って進めます。
ビジョンシステムのハードウェア設置
ビジョンシステムのハードウェア設置は、ハードウェア機器(カメラおよび IPC)を実際の動作環境に統合し、ビジョンシステムの正常な動作をサポートするプロセスです。
この段階では、ビジョンシステムのハードウェアの取り付けと接続を完了させます。詳細については、ビジョンシステムのハードウェア設置 をご参照ください。
ロボット通信設定
ロボット通信設定を行う前に、ソリューションを取得します。クリックしてソリューション取得方法を確認します。
-
Mech-Vision を起動します。
-
Mech-Vision のようこそ画面で ソリューションライブラリから新規作成 をクリックし、ソリューションライブラリを開きます。
-
ソリューションライブラリの代表的な導入事例を選択し、右上の アイコンをクリックしてさらに多くのリソースをダウンロードします。それから表示されたウィンドウで確認をクリックします。
-
リソースを取得した後、バラ積みされたワークのピッキングの丸鋼ビレットを選択して作成ボタンをクリックし、表示されたウィンドウに確認ボタンをクリックします。
ダウンロードした後、Mech-Vision ではこのソリューションは自動的に開かれます。
Mech-Mind ビジョンシステムとロボット側(ロボット、PLC もしくは上位システム)との通信を構築します。
丸鋼ビレットソリューションでは、標準インターフェース通信を使用します。詳細な手順説明は、標準インターフェース通信ご参照ください。
ハンド・アイ・キャリブレーション
ハンド・アイ・キャリブレーションとは、カメラ座標系とロボット座標系との対応関係を求めることを指します。ビジョンシステムにより取得した対象物の位置姿勢をロボット座標系に変換し、それによってロボットが正確に把持作業を完了するように制御します。
ハンド・アイ・キャリブレーションの使用ガイドを参考にして実行してください。
カメラを設置し、またはキャリブレーションを実施した後、ロボットとカメラの相対位置が変わったら再度ハンド・アイ・キャリブレーションを行ってください。 |
ビジョンプロジェクトの設定
通信設定とハンド・アイ・キャリブレーションを完了させたあと、Mech-Vision を使用してビジョンプロジェクトを設定します。
ビジョンプログラムの設定手順を下図に示します。
カメラを接続して画像を撮影します
-
使用するカメラを接続します。
Mech-Eye Viewer で接続するカメラを見つけて接続をクリックします。
-
カメラパラメータの調整
高品質で点群が完全な 2D 画像を取得するためにパラメータを調整します。詳細な調整方法は、LSR L パラメータをお読みください。
-
画像取得
カメラを接続してパラメータグループを設定した後、対象物の写真を撮ります。上部の ボタンをクリックして一回だけ撮影します。すると対象物の 2D 画像と点群が表示されます。画像がはっきり見られて点群が完全でエッジもはっきりしているか確認します。使える 2D 画像と点群の例は以下にようです。
-
Mech-Vision でカメラを接続します。
カメラから画像を取得ステップをクリックして選択し、ステップパラメータで仮想モードをオフにして、カメラを選択をクリックします。
表示される画面で接続するカメラの右にある アイコンをクリックします。アイコンが に変わったらカメラの接続が完了です。それから、下図に示すように右のパラメータグループを選択します。
これでカメラ実機の接続が完了です。これ以上パラメータを調整する必要はありません。カメラから画像を取得ステップの右の アイコンをクリックしてこのステップを実行します。エラーメッセージが表示されなければ、カメラが正常に接続されて画像を撮影できることになります。
ワーク認識(ワーク認識)
本ソリューションではワーク認識ステップを使用して部品を認識します。ワーク認識ステップの設定ツールをクリックしてワーク認識設定ウィンドウで設定を進めます。主な設流れは下図に示します。
点群前処理
点群前処理を行い、各パラメータを調整してデータを前処理し、元の点群をより鮮明にします。これにより、認識精度と効率を向上させることができます。
点群前処理した後、実行ボタンをクリックします。以下のような結果が出てきます。
ワーク認識
点群前処理が完了した後、ワークライブラリでワークの点群モデルを作成し、ワーク認識ツールでモデルのマッチングに関連するパラメータを設定します。
-
ワークのモデルを作成します。
ワークライブラリを開くをクリックしてワークライブラリを開きます。STL ファイルをインポートして点群モデルを生成します。
-
認識パラメータを設定します。
-
ワーク認識 の右にある 上級モード を有効にします。
-
マッチングモード:マッチングモードを自動的に設定をオンにします。すると、このステップは自動的に低精度マッチングの設定と高精度マッチング設定のパラメータを調整します。
-
追加の高精度マッチング:追加の高精度マッチングを有効化にして 2 回目のサーフェス高精度マッチングを行い、Z 方向の把持精度をアップします。
-
信頼度設定:信頼度の設定方式を手動に、共同スコアリング戦略をサーフェスとエッジの両方を考慮に、サーフェスマッチングの信頼度しきい値を高く(例えば 0.8)に設定し、誤ったマッチング結果を除去します。
-
出力-出力結果の最大数:経路計画の要件を満たす前提で、出力数を最小限に抑え、マッチングにかかる時間を短縮します。このプロジェクトでは、出力結果の最大数 を 15 に設定しています。
-
重なっ合っている結果を除去、重ねられている結果を除去:重なっ合っている結果を除去するために、重なっ合っている結果を除去と重ねられている結果を除去をオンにして、しきい値をそれぞれ 30%、20% に設定します。
-
それから、ステップを実行ボタンをクリックします。以下のような結果が出てきます。
ワーク認識(箱認識)
本ソリューションではワーク認識ステップを使用してコンテナ箱を認識します。ワーク認識ステップの設定ツールをクリックしてワーク認識設定ウィンドウで設定を進めます。主な設流れは下図に示します。
点群前処理
点群前処理を行い、各パラメータを調整してデータを前処理し、元の点群をより鮮明にします。これにより、認識精度と効率を向上させることができます。
点群前処理した後、実行ボタンをクリックします。以下のような結果が出てきます。
ワーク認識
点群前処理が完了した後、ワークライブラリでコンテナの点群モデルを作成し、ワーク認識ツールでモデルのマッチングに関連するパラメータを設定します。
-
ワークのモデルを作成します。
点群モデルを作成して把持位置姿勢を追加します。ワークライブラリを開く をクリックしてワークライブラリを開きます。カメラで取得した点群から点群モデルを生成し、把持位置姿勢を手動で設定します。
-
認識に関するパラメータを設定します。
-
マッチングモード:マッチングモードを自動的に設定をオンにします。
-
信頼度設定:間違ったマッチング結果を除去するために、信頼度しきい値を「0.5」に設定します。
-
出力-出力結果の最大数:コンテナを認識するので出力結果の最大数を 1 に設定します。
-
それから、ステップを実行ボタンをクリックします。以下のような結果が出てきます。
位置姿勢を調整(ワーク位置姿勢)
ワークの位置姿勢を取得した後、位置姿勢を一括調整(V2)ステップを実行して調整します。位置姿勢を一括調整(V2)の設定ツールをクリックして位置姿勢調整ツールを開いて設定を行います。主な設流れは下図に示します。
-
ロボット座標系におけるワーク位置姿勢を出力するために、位置姿勢をロボット座標系に変換をチェックして変換を行います。
-
方向調整の基準点を指すを選択し、指す軸を Z軸に設定して、ロボットが指定方向に沿ってワークを把持するようにします。衝突を回避できます。
-
位置姿勢ソートを位置姿勢のX/Y/Z値でソートに、位置姿勢の指定値を Z値に、「ソート順序」を降順に設定します。
-
後続の経路計画にかかる時間を短縮するために、位置姿勢の Z 軸と基準方向との角度によって把持できないワーク位置姿勢を除去します。最大角度差を 90°に設定します。
-
共通設定
「共通設定」パネルに進み、新規ポート数を設定を 1 に設定します。このステップに入力ポートと出力ポートは 1つずつ追加されます。ワーク認識のワークの名前出力ポートを出力ステップに接続します。
位置姿勢を調整(コンテナ箱位置姿勢)
コンテナ箱の位置姿勢を取得した後、位置姿勢を一括調整(V2)ステップを実行して調整します。位置姿勢を一括調整(V2)の設定ツールをクリックして位置姿勢調整ツールを開いて設定を行います。主な設流れは下図に示します。
-
位置姿勢処理戦略を選択します。
ワークが入った深いかごなので Bin を選択します。
-
位置姿勢転換を行います。
ロボット座標系におけるコンテナ位置姿勢を出力するために、位置姿勢をロボット座標系に変換をチェックして変換を行います。
-
ロボット座標系と Z軸の正方向を選択し、コンテナの位置姿勢を変えます。手動で移動距離を -285mm に設定し、コンテナ位置姿勢を上表面から中心点に移動します。後で Mech-Viz のコンテナ衝突モデル更新に使用できます。
移動距離値 = -1 × 1/2 コンテナ高さ -
後続の経路計画にかかる時間を短縮するために、位置姿勢の Z 軸と基準方向との角度によって把持できないワーク位置姿勢を除去します。最大角度差を 90°に設定します。
-
共通設定
「共通設定」パネルに進み、新規ポート数を設定を 1 に設定します。このステップに入力ポートと出力ポートは 1つずつ追加されます。ワーク認識のワークの名前出力ポートを出力ステップに接続します。
経路計画
ワーク認識を完了された後、Mech-Viz で経路計画とロボットのプログラムを作成して把持を実行します。
以下のように経路計画を設定します。
シーンの物体の設定
シーンの物体をインポートして設定する目的は、実際の作業現場を再現することで、ロボットの移動経路を計画できるようにすることです。詳細な説明は、シーンの物体の設定をお読みください。
できる限り実際の現場を再現するように設定します。ここでは以下のように設定します。
ロボットハンドモデルの設定
ロボットハンドを仮想空間に表示して衝突検出に使用するためにロボットハンドモデルを設定します。詳細な説明は、ロボットハンドの設定をお読みください。
|
ワークフローを構築
ワークフローとは、Mech-Viz でフローチャートの形式で作成されたロボット動作制御プログラムです。シーンの物体とロボットハンドを設定した後、ワークフローを調整します。ワークを把持するワークフローは以下のようになります。
以下は、正常なロボット把持です。
以下は、異常なロボット把持(端で把持する)です。
標準インターフェース通信を使用する場合、以下のワークフローを実行します。
シミュレーションと試行
ツールバーのシミュレートをクリックすると、Mech-Viz プロジェクトをシミュレートし、ビジョンシステムを確認することができます。
ワークをランダムにコンテナに配置して Mech-Viz ツールバーのシミュレートボタンをクリックして把持をシミュレートします。把持をシミュレートするたびにワークを再度配置する必要があります。繰り返して 10 回の把持をテストします。10 回のテストですべての把持が成功した場合、ビジョンシステムの構築に問題がないと判断できます。
シミュレーションに異常が発生した場合、よくある課題を参考にして解決してください。
ロボットの把持と配置
ロボットプログラムを作成
シミュレーションの効果に問題がなければ、Kawasaki ロボット把持・配置プログラムを作成することになります。
Kawasaki ロボットのサンプルプログラムKawasaki ロボットの把持サンプルプログラムを使用すればいいです。対応できない機能については、このサンプルプログラムを基にして変更を加えることができます。Kawasaki ロボットの把持サンプルプログラムに関する詳細な説明は、サンプルプログラム説明をお読みください。
変更時の注意事項
サンプルプログラムを基にして以下の通り変更を行います。
-
TCP を定義します。
変更前 変更後(例) TOOL gripper ;set TCP
point tcp1 = trans(0,37.517,390.13,-15,0,0) TOOL tcp1 ;set TCP
-
DO ポートのグリッパ制御ロジックを設定してグリッパを初期状態にします。
変更前 変更後(例) /
signal 10,-9;set do off
-
IPC の IP アドレスとポート番号を指定します。MM_Init_Socket コマンドの IP アドレスとポート番号を、IPC の実際の IP アドレスとポート番号に変更してビジョンシステムと一致させます。
変更前 変更後(例) ;Set ip address of IPC call mm_init_skt(127,0,0,1,50000)
;Set ip address of IPC call mm_init_skt(128,1,1,2,60000)
-
Mech-Viz プロジェクトをトリガーし、分岐 3 に切り替えてパレタイズの記録をリセットしてから分岐 1 に切り替えてビジョン処理による認識を行います。Mech-Viz から受信した把持経路のステータスコードによって分岐 2 に切り替えてビジョン処理による認識を行うかどうか決定します。
変更前 変更後 ;Run Viz project call mm_start_viz(1,#start_viz) ;(2,#start_viz) used for ETH viz initial position twait 0.1 ;set branch exitport ;call mm_set_branch(1,1) ;get planned path call mm_get_vizdata(2,pos_num,vispos_num,ret1)
;Init Palletizing CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position TWAIT 0.1 call mm_set_branch(7,3);init Palletizing TWAIT 0.1 CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position TWAIT 0.1 call mm_set_branch(7,1) 10 flag =1 CALL mm_get_vizdata(1,pos_num,vispos_num,ret1) IF ret1<>2100 THEN CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position TWAIT 0.1 call mm_set_branch(7,2) flag =2 CALL mm_get_vizdata(1,pos_num,vispos_num,ret1)
-
ステータスコード「2100」(正常に Mech-Viz から経路を受信時)を取得した後、ロボットをティーチングする撮影位置に移動します。
変更前 変更後(例) /
JMOVE #camera_capture;move to camera_capture position
-
ロボットを計画した経路に沿って把持点に移動させます。DO ポートを設定して把持を実行する信号を追加し、グリッパを閉じてワークを把持します。
変更前 変更後(例) ;follow the planned path to pick for count =1 to pos_num speed speed[count] LMOVE movepoint[count] if count == vispos_num then ;add object grasping logic here
;follow the planned path to pick JMOVE #movepoint[1] JMOVE #movepoint[2] JMOVE #movepoint[3] JMOVE #movepoint[4] LMOVE #movepoint[5] BREAK signal 9,-10;set do on TWAIT 0.2 LMOVE #movepoint[6] LMOVE #movepoint[7]
-
flag 結果に基づいて次の操作を決定します。flag=2 の場合、グリッパを開いてワークを放棄します。それ以外の場合には配置を実行します。
変更前 変更後 /
IF flag ==2 then break signal 10,-9;set do off twait 0.2 JMOVE #movepoint[8] JMOVE #movepoint[9] TWAIT 2 ELSE JMOVE #movepoint[8] end CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position TWAIT 0.1 call mm_set_branch(7,1) ;go to drop location if flag ==1 then JMOVE #movepoint[9] JMOVE #movepoint[10] break signal 10,-9 twait 0.2 JMOVE #movepoint[11] end
-
ワークを配置するためにグリッパを開く DO ポート信号を設定します。DO コマンドは、現場で実際に使用されている DO ポート番号に従って設定する必要があります。
変更前 変更後(例) ;add object releasing logic here
signal 10,-9;set do on
-
ロボットが繰り返し把持と配置を実行するためのループ文を挿入します。
変更前 変更後(例) /
JMOVE #camera_capture;move to camera_capture position GOTO 10
参考:変更後のサンプルプログラム
.PROGRAM vision_sample_2()
;----------------------------------------------------------
;* FUNCTION:simple pick and place with Mech-Viz
;* mechmind
;----------------------------------------------------------
accuracy 1 always
speed 30 always
point tcp1 = trans(0,37.517,390.13,-15,0,0)
TOOL tcp1 ;set TCP
signal 10,-9;set do off
Home ;move robot home position
JMOVE camera_capture ;move to camera_capture position
break
pos_num = 0
;Set ip address of IPC
call mm_init_skt(128,1,1,2,60000)
twait 0.1
;Set vision recipe
;call mm_switch_model(1,1)
;Init Palletizing
CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
TWAIT 0.1
call mm_set_branch(7,3);init Palletizing
TWAIT 0.1
CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
TWAIT 0.1
call mm_set_branch(7,1)
10 flag =1
CALL mm_get_vizdata(1,pos_num,vispos_num,ret1)
IF ret1<>2100 THEN
CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
TWAIT 0.1
call mm_set_branch(7,2)
flag =2
CALL mm_get_vizdata(1,pos_num,vispos_num,ret1)
if ret1 <> 2100
JMOVE #camera_capture;move to camera_capture position
end
for count=1 to pos_num
call mm_get_pose(count,&movepoint[count],label[count],speed[count])
end
;follow the planned path to pick
JMOVE #movepoint[1]
JMOVE #movepoint[2]
JMOVE #movepoint[3]
JMOVE #movepoint[4]
LMOVE #movepoint[5]
BREAK
signal 9,-10;set do on
TWAIT 0.2
LMOVE #movepoint[6]
LMOVE #movepoint[7]
IF flag ==2 then
break
signal 10,-9;set do off
twait 0.2
JMOVE #movepoint[8]
JMOVE #movepoint[9]
TWAIT 2
ELSE
JMOVE #movepoint[8]
end
CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
TWAIT 0.1
call mm_set_branch(7,1)
;go to drop location
if flag ==1 then
JMOVE #movepoint[9]
JMOVE #movepoint[10]
break
twait 0.2
JMOVE #movepoint[11]
end
signal 10,-9;set do on
JMOVE #camera_capture;move to camera_capture position
GOTO 10
END
把持テスト
実際の生産の安定性を確保ために、変更されたサンプルプログラムを実行してロボットによる把持を試行します。詳細な説明については、標準インターフェース通信をテストをお読みください。
テストの前に、以下の点をティーチングします。
名称 | 変数 | 解析 |
---|---|---|
(TCP)ツールセンターポイント |
TCP |
変数 gripper によって定義され、ティーチペンダントでティーチングしてください |
初期位置 |
home |
ティーチングする初期位置。初期位置は、把持するワークや周辺機器から離れ、カメラの視野を遮らないようにする必要があります。 |
撮影位置 |
camera_capture |
ティーチングする撮影位置。カメラが画像を撮影するときにロボットがいる位置。この位置では、ロボットハンドがカメラ視野を遮らないようにする必要があります。 |
中間点 |
movepoint[8] |
ロボットの移動をスムーズにし、衝突を回避するために中間点を追加する |
配置位置 |
movepoint[11] |
ワークを配置する位置 |
ティーチング完了後、以下の表に示すようにワークを配置してからロボットを低い速度で動かして把持します。
3つの段階に分けて把持します。