로봇 프로그래밍

상호작용 - (7) Dobot Magician 로봇 파이썬 프로그래밍

edblab 2023. 4. 1. 22:48
728x90

Dobot Magician 로봇 파이썬 프로그래밍 7번째 시험 코드는 상호작용하는 프로그램이다. 상호작용(Interactive)이란 로봇 동작이 미리 프로그램되어 있지 않고 현재 내리는 명령에 따라 즉시 동작하는 방식을 뜻한다. Magician 로봇을 상호작용 방식으로 동작시키기 위해 시험에 다음을 고려하였다.

  • 상호작용 명령 환경 구현 - Dobot Magician에 연속적인 상호작용 명령을 내릴 수 있는 Text Interpretor 환경 구현
  • 상호작용 명령어 구현 - 로봇의 이동을 명령할 수 있는 move to x, y, z 명령어 구현

상호작용 명령 환경 구현을 위해 파이썬의 input과 while 명령어를 사용하여 사용자로부터 입력을 받도록 구현하였다. move to 명령어를 구현하기 위해서 파이썬의 regular expression을 사용하여 x, y, z 값을 입력받도록 하였다.

# test070 interactive control of dobot
# 2023/4/1
# developed by EDBLab https://edblab.tistory.com, https://blog.naver.com/edblab

import re # for regular expression
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"}

# regular expression pattens
# move to 100, 100, 100 형식
pattern_moveto = re.compile('^\s*move\s*to\s*(\d+)\s*\,\s*(\d+)\s*\,\s*(\d+)\s*$')

# 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, 220, 0,6.5, 0, isQueued = 1)
    dType.SetPTPJointParams(api, 200, 200, 200, 200, 200, 200, 200, 200, isQueued = 1)
    dType.SetPTPCommonParams(api, 100, 100, isQueued = 1)

    #Homing comment for precision
    lastIndex = dType.SetHOMECmd(api, temp = 0, isQueued = 1)[0]
    #Execute 
    dType.SetQueuedCmdStartExec(api)
    # Async Home Command
    while lastIndex > dType.GetQueuedCmdCurrentIndex(api)[0]:
        dType.dSleep(100)
    
    #=== start the interactive mode
line=input('trip> ')
while line!='quit':
    #--- move to 명령어 - move to 200, 0, 0
    moveto=pattern_moveto.findall(line)
    if moveto:
        print("move to x=",moveto[0][0],"'y= ",moveto[0][1],"'z= ",moveto[0][2])
        lastIndex = dType.SetPTPCmd(api, dType.PTPMode.PTPMOVLXYZMode, int(moveto[0][0]),int(moveto[0][1]), int(moveto[0][2]), 0, isQueued = 1)[0]
        while lastIndex > dType.GetQueuedCmdCurrentIndex(api)[0]:
            dType.dSleep(100)

    line=input('trip> ')

#=== close the robot connection
dType.SetQueuedCmdStartExec(api)
dType.DisconnectDobot(api)
print("bye!")

위 test070.py 모듈을 실행시킨 화면이 다음과 같다. 한 명령어를 실행시킬 때마다 로봇이 즉시 동작한다.

Dobot Magician 로봇 상호작용 명령어 프로그램 실행