로봇 프로그래밍
팔이동 - (4) Dobot Magician 파이썬 프로그래밍
edblab
2023. 3. 30. 23:39
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)