ビジョン-ロボットアーム座標変換の調整
カメラで検出した対象物をロボットアームでつかむには座標変換が必要です。カメラ上のワークの座標を、ロボットアームが物体をつかむための座標値に変換します。たとえば物体Aのカメラ上の座標が(500,200)であっても、ロボットアームに対する座標値は(50,20)となる場合があります。このため、カメラの座標をロボットアームの座標に変換する必要があります。
本記事で使用する資料:
下位機プログラム:Arduino_Receive.zip
座標記録と数式生成用の表:ロボットアームとカメラの座標データ変換表.xlsx
一、まず物体の座標を取得する
ロボットアーム座標系における物体の座標
1.ロボットアームとカメラの位置を固定します。

2.プログラムArduino_Receive.zipを下位機のマイコンに書き込み、ロボットアームに座標値を指定して該当位置まで動かします(ここでのZ軸の高さは、最終的に実行するときの高さとできるだけ同じにしてください。この例では-50、単位はmmです)。
注意:このプログラムの初期位置と運動学の式の方向は、ロボットアーム初期位置の調整 を参考に調整してください。

3.ワークをグリッパーの先端に置きます。

4.このとき、プログラムで指定した座標値が、ロボットアーム座標系におけるワークの座標値となります。

カメラ座標系における物体の座標
1.機能の実行 の「ロボットアームとカメラのプログラムを起動する」を参考に、カメラの検出画面を開き、カメラ上のワークの座標値を確認します。

2.ロボットアームの座標値とカメラの座標値を表計算ソフトに記録します。
| カメラx | カメラy | ロボットアームx | ロボットアームy |
|---|---|---|---|
| xc | yc | xa | ya |
| -10 | 21 | 50 | 0 |
| -11 | 40 | 60 | 0 |
| -9 | 52 | 70 | 0 |
| -14 | 63 | 80 | 0 |
| -11 | 69 | 90 | 0 |
| -14 | 82 | 100 | 0 |
注意:ロボットアームは毎回一方向にのみ移動させます。上の表ではロボットアームのy=0のまま、xの値を50から100まで等間隔で増やしています。このとき、ロボットアームのxの変化に応じてカメラのy値が変化することが確認できます。
3.各方向について、等間隔で少なくとも10組のデータを取得します。
二、座標変換式を求める
1.上記の手順で、2組のデータが得られます。
a:カメラyとロボットアームxの対応データ
| カメラy | ロボットアームx |
|---|---|
| yc | xa |
| 21 | 50 |
| 40 | 60 |
| 52 | 70 |
| 63 | 80 |
| 69 | 90 |
| 82 | 100 |
b:カメラxとロボットアームyの対応データ
| カメラx | ロボットアームy |
|---|---|
| xc | ya |
| -9 | 0 |
| 26 | 10 |
| 53 | 20 |
| 89 | 30 |
| -45 | -10 |
| -78 | -20 |
| -108 | -30 |
2.次に、表計算ソフトのグラフ機能を使って対応する変換式を求める方法を動画でご確認ください。
四、数式をプログラムに反映する
座標変換式が記述されている箇所を探します。
cd Proj_Intelligent-Vision-Arm-Control/vision_arm_mcp/core/arm_control
フォルダー内のarm_move.pyファイルを開き、新しい数式に更新します。

変更内容を保存します。
五、動作テスト
機能の実行 を参考に、緑色のワークの位置特定と把持を1回行います。
ドキュメント