# Dobot API(Dobot Magician) ## Demo :::spoiler DobotControl.py ```python= import threading import DobotDllType as dType # 連線結果字串對照(只是拿來印出可讀狀態) CON_STR = { dType.DobotConnect.DobotConnect_NoError: "DobotConnect_NoError", dType.DobotConnect.DobotConnect_NotFound: "DobotConnect_NotFound", dType.DobotConnect.DobotConnect_Occupied: "DobotConnect_Occupied"} # 將廠商提供的 DLL 載入為 Python 可呼叫的介面(ctypes.CDLL) api = dType.load() # 與 Dobot 建立連線:第二個參數是序列埠(空字串=自動搜尋),115200 為鮑率 state = dType.ConnectDobot(api, "", 115200)[0] print("Connect status:",CON_STR[state]) if (state == dType.DobotConnect.DobotConnect_NoError): # 清空命令佇列(把之前殘留的指令全部丟掉,乾淨開始) dType.SetQueuedCmdClear(api) # ---(可選)設定 HOME 位置,再執行回零 --- # dType.SetHOMEParams(api, 200, 0, 0, 0, isQueued = 1) # dType.SetHOMECmd(api, temp = 0, isQueued = 1) dType.SetQueuedCmdStartDownload(api, totalLoop=1, linePerLoop=1000) # ====== 運動參數設定(加入佇列,影響後續 PTP 指令)====== # 關節空間的速度/加速度上限(°/s 與 °/s²),在使用 PTP 的 ANGLE 系列模式時生效 dType.SetPTPJointParams(api,100,100,100,100,100,100,100,100,1) # 笛卡兒空間的速度/加速度上限(mm/s 與 mm/s²;R 為 °/s 與 °/s²) # 在使用 PTP 的 XYZ / MOVL / MOVJ 等笛卡兒模式,以及 JUMP_XYZ 時生效 dType.SetPTPCoordinateParams(api, xyzVelocity=100, xyzAcceleration=160,rVelocity=60, rAcceleration=120, isQueued=1) # 跳躍(JUMP)參數:拱高 jumpHeight(mm),以及 Z 安全上限 zLimit(mm) # 只在 JUMP 類模式下使用 dType.SetPTPJumpParams(api, jumpHeight=60, zLimit=100, isQueued=1) # 全域比例(%):會把上面設定的上限再乘上這裡的比例後套用 dType.SetPTPCommonParams(api, 40, 40,1) # ====== 動作流程(加入佇列)====== # 使用 PTP 的 JUMP_XYZ 模式(ptpMode=0),移動到 (232, 116, -18, r=0) dType.SetPTPCmd(api, ptpMode=0, x=232, y=116, z=-18, rHead=0, isQueued=1) # 夾爪:使能並閉合(enableCtrl=1, on=1) dType.SetEndEffectorGripper(api, enableCtrl=1, on=1, isQueued=1) # 等待 1000 ms(0.5~1s 常用,讓夾爪穩定) dType.SetWAITCmd(api, 1000, 1) # 再以 JUMP_XYZ 到 (217, -89, -19, r=0) dType.SetPTPCmd(api, ptpMode=0, x=217, y=-89, z=-19, rHead=0, isQueued=1) # 夾爪:使能但打開(鬆開物件)(enableCtrl=1, on=0) dType.SetEndEffectorGripper(api, enableCtrl=1, on=0, isQueued=1) # 等待 1000 ms dType.SetWAITCmd(api, 1000, 1) # 關閉夾爪輸出(完全關閉控制) dType.SetEndEffectorGripper(api, enableCtrl=0, on=0, isQueued=1) # 使用 PTP 的 MOVJ_XYZ 模式(ptpMode=1),先抬高到 (217, -89, 30, r=0) dType.SetPTPCmd(api, ptpMode=1, x=217, y=-89, z=30, rHead=0, isQueued=1) # 再以 MOVJ_XYZ 移動到 (200, 0, 100, r=0) dType.SetPTPCmd(api, ptpMode=1, x=200, y=0, z=100, rHead=0, isQueued=1) dType.SetQueuedCmdStopDownload(api) # 中斷連線(釋放資源) dType.DisconnectDobot(api) ``` ::: ## 使用到的API ### 1. ConnectDobot(api, portName, baudrate) <font color="#AC19C9">功能</font>:連線 Dobot。 <font color="#AC19C9">參數</font>: api: load() 的回傳物件 portName: 串列埠名稱(例如 "COM3"、"/dev/ttyUSB0")。給空字串 "" 代表自動搜尋 baudrate: 鮑率,Magician 預設 115200 <font color="#AC19C9">回傳</font>:一個列表 [result, masterDevType, slaveDevType, fwName, fwVer, masterId, slaveId, runTime] result: 0=成功、1=未發現、2=被占用 其餘為裝置類型/韌體/ID/運行時間資訊 <font color="#AC19C9">備註</font>:你通常只會拿 [0] 看是否連上。 ### 2. SetQueuedCmdClear(api) <font color="#AC19C9">功能</font>:清空控制器中的命令佇列。 <font color="#AC19C9">備註</font>:每次開始新的流程前建議先清一次。 ### 3. SetQueuedCmdStartDownload(api, totalLoop, linePerLoop) <font color="#AC19C9">功能</font>:進入「離線腳本下載模式」。之後送入、且 isQueued=1 的指令都會被寫進離線腳本區。 <font color="#AC19C9">參數</font>: totalLoop: 下載成離線腳本後,控制器預設要重複執行的迴圈數(通常填 1) linePerLoop: 每個迴圈最多容納的「指令行數」上限(要設足夠大,像 1000) <font color="#AC19C9">備註</font>:只負責打開離線下載通道,不會讓機器動;必須搭配 SetQueuedCmdStopDownload 關閉才會真正寫入。 ### 4. SetPTPJointParams(api, j1Vel, j1Acc, j2Vel, j2Acc, j3Vel, j3Acc, j4Vel, j4Acc, isQueued=0) <font color="#AC19C9">功能</font>:設定 關節空間(Joint)的 PTP 最大速度與加速度上限(J1~J4)。 單位/範圍(常見值): 速度(Vel):度/秒(°/s),建議 0–200 之間 加速度(Acc):度/秒²(°/s²),建議 0–200 之間 ### 5. SetPTPCoordinateParams(api, xyzVelocity, xyzAcceleration, rVelocity, rAcceleration, isQueued=0) <font color="#AC19C9">功能</font>:設定 笛卡兒空間 PTP 上限: xyzVelocity / xyzAcceleration: XYZ 平移軸的上限(mm/s、mm/s²) rVelocity / rAcceleration: 末端旋轉 R 的上限(°/s、°/s²) 常見範圍: xyzVelocity/Acc:0–200(或依你機台/工況) rVelocity/Acc:0–200 ### 6. SetPTPJumpParams(api, jumpHeight, zLimit, isQueued=0) <font color="#AC19C9">功能</font>:設定 JUMP 路徑形狀參數 jumpHeight: 拱高(mm):從起點抬起的高度 zLimit: Z 安全上限(mm):JUMP 過程 Z 不超過此高度 <font color="#AC19C9">備註</font>:只在 JUMP 模式時生效 ### 7. SetPTPCommonParams(api, velocityRatio, accelerationRatio, isQueued=0) <font color="#AC19C9">功能</font>:設定 全域比例(%) velocityRatio: 對「已設定的上限」再乘的速度比例(0–100) accelerationRatio: 對上限再乘的加速度比例(0–100) <font color="#AC19C9">備註</font>:實際速度/加速度 =(Joint/Coordinate 設定的上限)×(這裡的比例)。常用來全局「降速」測路徑安全。 ### 8. SetPTPCmd(api, ptpMode, x, y, z, rHead, isQueued=0) <font color="#AC19C9">功能</font>:下達一個 PTP 目標點。 <font color="#AC19C9">參數</font>: **ptpMode** 0: JUMP_XYZ(跳躍,XYZr) 1: MOVJ_XYZ(關節插補到 XYZr) 2: MOVL_XYZ(直線插補到 XYZr) 3: JUMP_ANGLE(跳躍,關節角度) 4: MOVJ_ANGLE(關節插補到關節角) 5: MOVL_ANGLE(直線插補到關節角) 6: MOVJ_ANGLE_INC(關節角增量) 7: MOVL_XYZ_INC(XYZ 增量,直線) 8: MOVJ_XYZ_INC(XYZ 增量,關節) 9: JUMP_MOVL_XYZ(JUMP,平移段用直線 MOVL) x, y, z(mm)、rHead(°):目標位姿 ### 9. SetEndEffectorGripper(api, enableCtrl, on, isQueued=0) <font color="#AC19C9">功能</font>:控制氣動夾爪/電動夾爪開關。 <font color="#AC19C9">參數</font>: enableCtrl: 1=啟用夾爪功能;0=關閉夾爪功能 on: 1=抓取/閉合;0=釋放/打開(僅在 enableCtrl=1 下有效) ### 10. SetWAITCmd(api, waitTime, isQueued=0) <font color="#AC19C9">功能</font>:在佇列中插入等待。 <font color="#AC19C9">參數</font>: waitTime: 毫秒(ms) <font color="#AC19C9">備註</font>:常在夾爪動作後放 1000 ms 讓氣壓/機構穩定。 ### 11. SetQueuedCmdStopDownload(api) <font color="#AC19C9">功能</font>:結束離線下載並將佇列寫入控制器的離線腳本區(很重要!) <font color="#AC19C9">參數</font>:api <font color="#AC19C9">備註</font>:少了這步,剛才排進去的 queued 指令不會被存成離線腳本。 ### 12. DisconnectDobot(api) <font color="#AC19C9">功能</font>:斷線、釋放資源(關閉序列阜)。 <font color="#AC19C9">備註</font>:離線下載完成後建議就斷線,測離線執行時避免被 PC 端程式占用。