시뮬레이션에서듀얼그리퍼를포함한 Brooks PreciseFlex 그리퍼를제어하려면이섹션에설명된단계를따르세요.
1.프로그램을마우스오른쪽버튼으로클릭하고프로그램 호출 인스트럭션을 추가합니다.
2."그리퍼(그리퍼 ID, 그리퍼 값)"를입력합니다. 예를들어, 듀얼그리퍼의그리퍼 2번을 50mm로이동하려면"Gripper(2, 50)"을입력합니다.
a.하나의그리퍼로'그리퍼(그리퍼 값)'라는호출을단축할수있습니다.
b.로봇이두개이상있는경우"그리퍼(그리퍼 ID, 그리퍼 값, item.ptr)"를사용합니다. 예를들어 "Gripper(2, 50, item.ptr)"는듀얼그리퍼의그리퍼 2번을 50mm로이동하여부모로봇이프로그램에연결되도록합니다.
3.모든하위프로그램의첫번째명령어와모든하위프로그램호출뒤에 Gripper() 명령어를추가합니다. 이는포스트프로세서와의호환성을보장하기위한것입니다. 중복된 Gripper() 명령어가예상됩니다.
4.Python 스크립트를추가하고이름을 "Gripper"로변경합니다.
5."Gripper" Python 스크립트를편집하고다음을붙여넣습니다:
FROM RoboDK에서 로보링크 가져오기
가져오기 시스템
len(sys.argv) < 2:
종료()
def get_item(ptr_item, RDK):
item = robolink.Item(RDK, str(ptr_item), robolink.ITEM_TYPE_PROGRAM)
item.Valid(True)가 아닌 경우:
반환 없음
반품 항목
RDK = robolink.Robolink()
그리퍼_ID = -1
그리퍼_값 = 0
prog_item = 없음
# 그리퍼 ID, 값 및 호출자 가져오기
if len(sys.argv) == 2:
그리퍼_값 = float(sys.argv[1])
elif len(sys.argv) >= 4:
그리퍼_id = int(sys.argv[1])
그리퍼_값 = 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:
그리퍼_값 = float(sys.argv[1])
else:
그리퍼_id = int(sys.argv[1])
그리퍼_값 = float(sys.argv[2])
# 후보자 가져오기
그리퍼 = [x for x in RDK.ItemList(robolink.ITEM_TYPE_ROBOT_AXES) x.Name().lower() and len(x.Joints().tolist() == 1] if 'gripper']
렌(그리퍼) > 1 및 프로그_아이템:
robot_item = prog_item.getLink(robolink.ITEM_TYPE_ROBOT)
로봇_아이템.유효()가 아닌 경우:
robot_item = RDK.ItemUserPick("연결된 로봇 선택", robolink.ITEM_TYPE_ROBOT)
prog_item.setRobot(robot_item)
def get_flat_child(item):
childs = item.Childs()
item.Childs()에서 child를 찾습니다:
children.extend(get_flat_childs(child))
반환 자식
childs = get_flat_child(robot_item)
그리퍼 = [x.Type() == robolink.ITEM_TYPE_ROBOT 및 len(x.Joints().tolist()) == 1이면 x for x in childs]
그리퍼가 아니라면요:
RDK.ShowMessage('그리퍼를 찾을 수 없습니다!', False)
# 올바른 그리퍼 ID(예: 듀얼 그리퍼 1)를 찾아보세요.
그리퍼 = 그리퍼[0]
그리퍼_ID > 0이면
gripper_ids = [grippers의 g에 대해 g.Name().endswith(str(gripper_id))]
만약 그리퍼_ids:
그리퍼 = 그리퍼_ids[0]
그리퍼.MoveJ([그리퍼_값])
이방법은브룩스포스트프로세서와도호환됩니다.