# 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 端程式占用。