デュアルグリッパーを含め、シミュレーションからBrooks PreciseFlexグリッパーを制御するには、このセクションで説明する手順に従います。
1.プログラムを右クリックし、プログラム呼び出し命令を追加します。
2.Gripper(グリッパーID, グリッパー値)」と入力します。例えば、"Gripper(2, 50) "と入力すると、デュアルグリッパーの2番グリッパーを50mmに移動させることができます。
a.グリッパー1つで、"Gripper(グリッパー値) "の呼び出しを短縮できます。
b.複数のロボットが存在する場合は、"Gripper(gripper ID, gripper value, item.ptr) "を使用してください。例えば、"Gripper(2, 50, item.ptr) "はデュアルグリッパーの2番グリッパーを50mmに動かし、親ロボットがプログラムにリンクされていることを確認します。
3.すべてのサブプログラムの最初の命令として、またすべてのサブプログラム呼び出しの後に、Gripper()命令を追加します。これは、ポスト・プロセッサとの互換性を確保するためです。Gripper()命令の重複が予想されます。
4.Pythonスクリプトを追加し、名前を "Gripper "に変更します。
5.Gripper "Pythonスクリプトを編集し、以下を貼り付けてください:
from robodk import robolink
インポートシステム
if len(sys.argv) < 2:
終了()
def get_item(ptr_item, RDK):
item = robolink.Item(RDK, str(ptr_item), robolink.ITEM_TYPE_PROGRAM)
if not item.Valid(True):
なし
リターンアイテム
RDK = robolink.Robolink()
gripper_id = -1
グリッパー値 = 0
prog_item = なし
# グリッパーのID、値、呼び出し元を取得します。
len(sys.argv) == 2:
gripper_value = float(sys.argv[1])
elif len(sys.argv) >= 4:
gripper_id = int(sys.argv[1])
gripper_value = float(sys.argv[2])
prog_item = get_item(int(sys.argv[3]), RDK)
elif len(sys.argv) == 3:
prog_item = get_item(int(sys.argv[2]), RDK)
if prog_item:
gripper_value = float(sys.argv[1])
そうでなければ
gripper_id = int(sys.argv[1])
gripper_value = float(sys.argv[2])
# 候補者を取得
grippers = [x for x in RDK.ItemList(robolink.ITEM_TYPE_ROBOT_AXES) if 'gripper' in x.Name().lower() and len(x.Joints().tolist()) == 1].
if len(grippers) > 1 and prog_item:
robot_item = prog_item.getLink(robolink.ITEM_TYPE_ROBOT)
if not robot_item.Valid():
robot_item = RDK.ItemUserPick("Select linked robot", robolink.ITEM_TYPE_ROBOT)
prog_item.setRobot(ロボットアイテム)
def get_flat_childs(item):
childs = item.Childs()
for child in item.Childs():
childs.extend(get_flat_childs(child))
子
childs = get_flat_childs(robot_item)
grippers = [x for x in childs if x.Type() == robolink.ITEM_TYPE_ROBOT and len(x.Joints().tolist()) == 1].
グリッパーでない場合
RDK.ShowMessage('グリッパーが見つかりません!', False)
# 正しいグリッパーID(デュアルグリッパー1)を見つけてください。
グリッパー = グリッパー[0]
gripper_id > 0:
gripper_ids = [g for g in grippers if g.Name().endswith(str(gripper_id))].
もしgripper_ids:
グリッパー = グリッパーID[0]
グリッパー.MoveJ([グリッパー_値])
なお、この方法はブルックスのポストプロセッサーにも対応しています。