본문 바로가기
로봇 프로그래밍

팔이동 - (4) Dobot Magician 파이썬 프로그래밍

by edblab 2023. 3. 30.
728x90

이번 시험은 로봇이동을 이용한 비동기 명령어 실행이다. 로봇 단위 Action은 한 위치에서 다른 위치로 로봇 엔드이팩터의 단위 이동을 뜻한다. 만일 로봇 Action 명령을 여러 개 내리면 앞의 이동이 끝나기 전에 뒤의 명령어가 실행되어 일관된 이동을 할 수 없다. 그러므로 GetQueuedCmdCurrentIndex(api)를 이용하여 현재 명령어의 인덱스 값을 얻어 해당 명령어 이전부터 현재까지 명령어가 실행될 때까지 dType.dSleep(100)을 이용하여 기다린다.

# test020 3/30/2023
# Dobot Magician with Async commands
import threading
import DobotDllType as dType

# string for dobot connection status
CON_STR = {
    dType.DobotConnect.DobotConnect_NoError:  "DobotConnect_NoError",
    dType.DobotConnect.DobotConnect_NotFound: "DobotConnect_NotFound",
    dType.DobotConnect.DobotConnect_Occupied: "DobotConnect_Occupied"}
    
# location dic
loc_b ={
    "id": "loc_wating",
    "x": 0,
    "y": 0,
    "z": 0
    }

loc_m ={
    "id": "loc_base",
    "x": 100,
    "y": 100,
    "z": 100
    }


# robot connection - start
api = dType.load()
state = dType.ConnectDobot(api, "", 115200)[0]

print("Connect status:",CON_STR[state])

if (state == dType.DobotConnect.DobotConnect_NoError):  
    # Clean Command Queued
    dType.SetQueuedCmdClear(api)
    # Async Motion Params Setting
    dType.SetHOMEParams(api, 200, 200, 200, 200, isQueued = 1)
    dType.SetPTPJointParams(api, 200, 200, 200, 200, 200, 200, 200, 200, isQueued = 1)
    dType.SetPTPCommonParams(api, 100, 100, isQueued = 1)

    # Async Home
    dType.SetHOMECmd(api, temp = 0, isQueued = 1)
    
	print(loc_b['x'], loc_b['y'])
    print(loc_m['x'], loc_b['y'])
    lastIndex = dType.SetPTPCmd(api, dType.PTPMode.PTPMOVLXYZMode, loc_b['x'], loc_b['y'], loc_b['z'], 0, isQueued = 1)[0]
    lastIndex = dType.SetPTPCmd(api, dType.PTPMode.PTPMOVLXYZMode, loc_m['x'], loc_m['y'], loc_m['z'], 0, isQueued = 1)[0]

    # Start to Execute Command Queue
    dType.SetQueuedCmdStartExec(api)

    # Wait for Executing Last Command 
  	while lastIndex > dType.GetQueuedCmdCurrentIndex(api)[0]:
        dType.dSleep(100)

  	#Stop to Execute Command Queued
    dType.SetQueuedCmdStopExec(api)

dType.DisconnectDobot(api)