用 AI 讓 10 年前的小型電腦切割機在 Linux 重生

許多年前在網路上購入了一台「理鋒科技小型電腦切割機」,當時環境還是在 Windows 下,廠商隨附了專用的驅動與操作軟體。但隨著我的工作環境全面轉向 Linux,這台機器便因為軟體不相容而長期閒置。

最近因為臨時有割字需求,我開始研究如何在 Linux 下驅動這台老機器。

從 Inkcut 到硬體限制
起初我找到了開源專案Inkcut,它確實能讀入 SVG 並執行切割。但實際操作後發現一個致命問題:硬體緩衝區(Buffer)太小。當圖形較複雜時,硬體接收指令的速度跟不上軟體送出的速度,導致傳輸溢位,切割中途就會直接罷工。

轉向底層:直接與硬體通訊
既然 Inkcut 是將指令轉換為 HPGL 格式送出,我想:不如直接撰寫符合我硬體特性的指令發送器?

透過 lsusb 指令,我確認了機器連接的晶片資訊: 
Bus 003 Device 052: ID 4348:5584 WinChipHead CH34x printer adapter cable

協同開發:與 Gemini 定義 AI Agent 規格書
我釐清了需求:需要一個視覺化的程式,能讀取 Inkscape 製作的 SVG,並具備「節流(Throttling)」功能。我透過與 Gemini 的不斷對談,最終整理出一份給 AI Agent 執行的專案規格書(Spec):

AI Agent 專案規格書:Linux 智慧切割傳送器 (PyCutter)

1. 專案目標 (Project Objective)

開發一個輕量化的 Linux 桌面應用程式,能夠讀取 SVG 檔案,自動轉換為 HPGL 指令,並透過 序列埠 (Serial Port) 實時監控並「節流傳送」給割字機,解決硬體緩衝區溢位導致的停機問題。


2. 技術棧要求 (Tech Stack)

  • 語言: Python 3.10+

  • GUI 框架: Tkinter (內建,確保輕量) 或 PyQt6

  • 向量處理: svgpathtools (解析 SVG)

  • 硬體通訊: pyserial (串列埠通訊)

  • 多執行緒: threading (分離 UI 與傳送邏輯)


3. 核心功能模組 (Functional Modules)

A. 檔案與路徑處理 (SVG to HPGL)

  • 自動解析: 將 SVG 中的 <path>, <rect>, <circle> 轉換為點座標。

  • 動態離散化 (Adaptive Sampling): * 直線僅保留端點。

    • 曲線根據半徑自動決定點數,確保點間距落在 0.5mm ~ 1.0mm

  • 單位換算: 固定比例 $1\text{ mm} = 40\text{ plotter units}$ ($1016\text{ DPI}$)。

  • 路徑優化: 實作簡單的「最近鄰算法」,減少抬刀移動的空跑距離。

B. 硬體連線管理 (Connection Manager)

  • 自動偵測: 啟動時掃描 /dev/ttyUSB*/dev/ttyACM*

  • 連線選單: 下拉式選單切換 Port,支援重新整理。

  • 通訊設定: 預設 9600 鮑率,支援 RTS/CTS 硬體流控 設定。

C. 視覺化監控畫布 (Live Monitor)

  • 同步繪圖: 當指令送出時,畫布上的游標同步移動並繪製線條。

  • 座標縮放: 自動將 HPGL 萬級座標縮放至 600x400 的視窗內。

  • 顏色區分: 抬刀 (PU) 用灰色虛線,下刀 (PD) 用紅色實線。

D. 流量控制傳送引擎 (Throttled Sender)

  • 逐行傳送: 讀取 HPGL 陣列,一條一條 ser.write()

  • 智慧延遲: 提供滑桿調整 Inter-step Delay (預設 0.05s)。

  • 暫停/終止: 支援切割中途立即停止通訊。


4. 使用者介面需求 (UI Requirements)

  • 頂部列: Port 選擇、連接按鈕、重新整理按鈕。

  • 左側邊欄: * 速度延遲設定 (Slider)。

    • 曲線平滑度設定 (Slider)。

    • 檔案選擇按鈕。

  • 中央區域: 繪圖監控大畫布。

  • 底部狀態列: 顯示 當前指令/總指令數預計剩餘時間連線狀態


5. AI Agent 的開發任務分解 (Task Breakdown)

你可以要求 Agent 按照以下順序執行:

  1. Task 1: 編寫一個獨立的 Scanner 類別,列出 Linux 所有序列埠。

  2. Task 2: 使用 svgpathtools 編寫轉換邏輯,輸入 SVG 路徑,輸出符合 1016 DPI 的 HPGL 字串列表。

  3. Task 3: 建立 Tkinter 主視窗,包含 Canvas 繪圖與基本的 UI 佈局。

  4. Task 4: 整合 pyserial 傳送引擎,確保在 threading 模式下運作。

  5. Task 5: 優化:加入 stty 權限檢查邏輯,若無權限則彈窗提示。


6. 預期錯誤處理 (Error Handling)

  • Permission Denied: 提示使用者執行 sudo usermod -aG dialout $USER

  • Disconnected: 若傳送中 USB 拔除,應立即捕捉異常並停止計時。

  • Scale Error: 若圖檔太大超過畫布,應具備 Fit to Canvas 的自動縮放邏輯。

補充規格:原點校正與座標偏置 (Origin & Offset Calibration)

1. 核心邏輯 (The Logic)

割字機通常有兩個原點概念:

  • Machine Home (機械原點): 機器開機後感應器觸碰到的物理極限點。

  • User Origin (用戶原點/工作起點): 你手動將刀頭移動到材料邊角後設定的 (0,0)

2. 功能需求 (Feature Requirements)

AI Agent 需要在 UI 上增加一個「校正面板」,包含以下功能:

  • Jog Control (手動微調): * 提供上下左右按鈕,發送微小的移動指令(例如每次移動 1mm 或 10mm)。

    • 指令範例:PU{current_x + 40},{current_y};

  • Set As Origin (設為原點): * 當用戶把刀移到滿意的位置後,按下此鍵。

    • 軟體會將當前的機械座標記錄為 Offset_XOffset_Y

    • 之後所有的 SVG 座標都會加上這個 Offset。公式:Final_X = (SVG_X * 40) + Offset_X

  • Go To Origin (回起點): * 快速測試指令:PU0,0; (相對於用戶原點)。

3. 視覺化配合

  • 在畫布(Canvas)上,用一個「十字準星」或「紅色方框」標示出目前刀頭的預期位置。

  • 當用戶點擊微調時,畫布上的準星要同步移動。

 


我將這份 Spec 投入 Gemini CLI,讓它進行實作。經過幾輪的 Debug 與邏輯修正,我的切割機終於在 Linux 上完美復活了!

如果你也有類似的老舊割字機在 Linux 下無法使用的困擾,歡迎參考或 Fork 我的專案,並利用 AI Agent 針對你的硬體特性進行微調。



« 上一篇 Previous 較舊的文章 下一篇 Next » 較新的文章