SO-ARM101 機械手臂

讓數學上完美的圓,在背隙與重力中化為顫抖的線條;唯有親手為它找到角度,才能畫出真正的圓。

類型
工程
期間
2026 年 3–6 月
作者
Zoe
Agent 1(Claude)
控制程式、SVG 轉換、抬筆、正向運動學模擬、除錯紀錄與工程手冊
Agent 2(Gemini)
運動學推導與補償策略的討論
硬體
SO-ARM101(外殼依官方模型列印)、幻爾 HX-30 馬達
軟體
Python、LeRobot、正向運動學
展出
2026 年 6 月科技藝術課程展

探索初期

從遙控示範到模型訓練

三到四月,我利用 3D 列印零件與幻爾 HX-30 馬達組裝出兩支 SO-ARM101 機械臂,以主從遙控的方式讓一支跟隨另一支動作。期間我錄製了 20 段夾取木塊的示範數據(共 13,353 幀),交由 ACT 模型進行十萬步訓練,讓手臂學習自主夾取。

六月,我嘗試在夾爪加裝相機來夾取髮夾。這次不走模型訓練,而是單純依賴影像對位,卻讓我體悟到贏了畫面,輸了現實。過度追求畫面上的精準對齊,反而使手臂在物理空間中偏離了目標。這次的試錯成為重要的轉捩點,促使我在後續的《之間》課堂專案中決定卸下相機,嘗試不同的控制思維。

攤在桌上、尚未組裝的手臂零件與馬達
組裝完成的 SO-ARM101 機械手臂
放在桌上的控制板與接線
用來示範動作的主導手臂
手臂的夾爪夾起一塊木塊
用主導手臂遙控跟隨手臂的畫面

期末作品

《之間》

一台機械手臂,捨棄了相機與任何外部感測,純粹依賴機構與運動學來進行徒手繪圖。在缺乏視覺回饋的狀態下,它看不見自己的筆觸,僅能透過關節控制去探索畫布。作品之所以命名為《之間》,正是因為那筆顫抖的線條,深刻地存在於運算理性與物理現實之間、完美與瑕疵之間,以及人與機器之間。

機械手臂的側面,夾著一支筆,在傾斜的畫板上畫圖

從運算到現實

完美的圓,現實的線

程式中使用的正弦與餘弦函數,若在電腦中模擬,能畫出一個完美的圓。然而,當這些數值轉化為推動馬達的電流,並交由齒輪傳動時,便必須直面物理現實:摩擦力、重力與齒輪的間隙。在數學上,畫出正圓僅需三個條件:兩關節訊號相差 90°、移動方向互相垂直、且振幅比約為 1.02 比 1。但到了現實中的畫布上,每一個完美條件都會在重重阻力下被打折。

畫在紙上、接近正圓的一個圓
數學與現實:理想的圓疊在實際畫出的線上實際畫出的線上疊著一個紫色虛線的理想圓。正圓有三個條件:兩個關節的訊號相差 90°、在紙面上的移動方向互相垂直、振幅比約 1.02 : 1。理想的圓
  1. 兩個關節的訊號相差 90°
  2. 在紙面上的移動方向互相垂直
  3. 振幅比約 1.02 : 1
pan = A·sin(t),lift = A·cos(t)

互動模擬

探索隱藏的最佳角度

失去視覺的手臂,必須仰賴人為它擺定姿態,尋找那絕對的角度。角度只要稍有偏差,圓就會垮成半圓、橢圓,甚至連一個圓都出不來。對的角度並非由程式預先寫死,而是隱藏在機械構造的物理限制中,原本就存在一個能把圓畫出來的姿勢,等待透過雙手去發掘。

試著把圓畫出來

側面:手臂與畫布
紙面:畫出來的線

紙要立多直?

齒輪間的空隙

頂端加壓

畫到上面時多壓一點

彈簧筆

筆會不會跟著紙面伸縮

抬筆的比例 55%

寬高比 2.18

示意模擬 預壓 0.3 cm、下垂 0.36 cm、黏滑門檻是示意值,不是實測值。

演進

從五月到六月

五月,紙還平放在桌上;六月,畫布立了起來,手臂一次又一次重畫同一個圓。往下捲,看它怎麼慢慢變圓。

  1. 五月:紙平放在桌上,上面是兩個扁長的方框和幾段交錯、歪斜的橫線
    01 / 072026 年 5 月紙平放在桌上,只畫出斷斷續續的橫線。
  2. 六月:圓開始成形,但仍有缺口
    02 / 072026 年 6 月畫布立起來後,第一次畫出圓的下半部。
  3. 六月:同一條紙上並排的四次嘗試,紅線大多只畫出下半圈,邊緣有階梯狀的鋸齒
    03 / 072026 年 6 月同一張紙上連試四次,只有一次接近閉合。
  4. 六月:圓的形狀更圓了一些
    04 / 072026 年 6 月兩圈疊在一起,形狀慢慢圓了起來。
  5. 六月:圓更接近封閉
    05 / 072026 年 6 月輪廓更完整了,上緣卻還是偏平。
  6. 六月:圓幾乎首尾相接
    06 / 072026 年 6 月線條終於閉合,邊緣留著齒輪背隙的階梯。
  7. 紙上一個扁扁的圓,接近圓角方框:下半圈是清楚的紅線,上半圈線條很淡,右上角有幾階小階梯;左上方和右側各有一處沒接上紙上由外向內捲的紅色螺旋,線條有些抖,中間有一小段方形的折線紙上紅線畫的天鵝,細節有些破碎;上面疊著一條綠線,是事後用手描的,好讓天鵝輪廓更容易看見,不是手臂畫的
    07 / 072026 年 6 月圓畫穩之後,螺旋和天鵝接著出現,和圓一起成為最後五個圖案中的三個。天鵝上的綠線是事後用手描的,為了解說時更容易看見;紅線才是手臂畫的。

難題

五個難題,五個解法

從畫不出圓,到畫出一個閉合的圓,中間卡過五個難題,每一個都得在物理世界裡解決。

一、畫不出圓

當畫布置平,肩關節的作動只會改變筆壓,導致筆尖不是戳破紙張就是懸空。透過正向運動學計算,該關節每轉 1 度,筆尖會往前約 0.1 公分、往上約 0.51 公分。將畫布立起至 79°,這段弧線便能精準貼合紙面,成為畫圓的第二個軸。

回到上面的模擬,調調看畫布角度。

側面圖:手臂與傾斜的畫布側面的手臂握著筆,筆尖碰到傾斜約 79° 的畫布。紫色的線是肩關節轉動時筆尖移動的方向:往前約 0.1 cm/度、往上約 0.51 cm/度,剛好貼著畫布。畫布約 79°lift 方向ΔZ ≈ 0.51 cm/度ΔX ≈ 0.1 cm/度
畫布角度 = atan(0.51 / 0.1) ≈ 79°
紅色的筆夾在手臂上,紙張立了起來

二、線條斷續

齒輪間隙與手臂微小的物理變形,使筆尖與紙面的距離不斷改變,導致線條斷斷續續。與其依賴軟體補償,我選擇自製一支彈簧筆,讓筆尖能隨紙面起伏伸縮,直接以硬體的彈性吸收筆壓誤差。

回到模擬,打開彈簧筆。

剖面圖:彈簧筆筆的剖面:筆桿裡有一段彈簧,筆芯碰到傾斜的紙面時,彈簧被壓縮,吸收筆壓的誤差。預壓的長度是示意。預壓(示意)彈簧筆桿紙面
裝上彈簧的筆夾在手臂前端

三、頂端架空

當手臂伸長時,會因物理結構微微下沉,導致畫至圓形上半部時筆尖懸空脫離紙面。為此,我讓手臂越往上畫時,主動增加下壓的力度:手肘的下壓量會從底部的 0°,漸進增加到頂端的 9°。

回到模擬,打開頂端加壓。

示意圖:頂端加壓一個圓,從底部到頂部,線條越來越粗、越來越紫,表示手肘往紙面加壓的量從 0° 漸增到 9°。頂端 9°底部 0°手肘加壓
加壓量 = PRESS × (高度比例 + 1) / 2
畫在紙上、接近正圓的一個圓

四、筆畫相連

為平放紙張設計的抬筆動作是抬升肩關節,但在立起的畫布上,這只會讓筆尖沿著紙面向上滑動,導致筆畫全部相連。透過正向運動學,我找出最接近畫布法線的手肘關節,將抬筆改為讓手肘後退 18°,才成功讓筆尖俐落地離開紙面。

側面圖:抬筆手肘往後轉 18°,筆尖離開傾斜的紙面。紫色的線是沿紙面法線的後退量,大約每度 1 mm。18°法線約 1 mm/度紙面
後退量 ≈ 1 mm/度 × 18°
紙上許多互相重疊、像方框的形狀

五、線條顫動

平價馬達換向時約有 1° 的空轉背隙,而畫圓需不斷轉向,導致誤差累積。為此,我在指令中加入半個間隙與一段死區,僅在真正換向時才進行補償。至於那些無法完全消除的微小顫動,我選擇保留,將其視為機器的手繪質地。

回到模擬,調調看齒輪背隙。

示意圖:齒輪背隙橫軸是時間。白線是指令角度,紫線是手臂實際的角度:每次換方向,實際角度都停住一段,直到指令走過約 1° 的背隙。虛線是補償後的指令,換向時多加半個背隙;死區內的小變動不算換向。圖中的背隙畫得比實際大。指令實際補償後死區背隙 約 1°角度時間示意,放大
指令角度 = 理想角度 + (B / 2) × 方向
早期畫出的一團藍色塗鴉

運作機制

從點選到落筆

觀眾可透過離線運行的平板網頁介面,點選圓形、螺旋、天鵝等圖案。電腦接收指令後,會將圖案參數與 SVG 路徑,精準解析為機械臂各關節的運動角度並即時傳送。接著,握有彈簧筆的手臂便會在傾斜 79° 的畫布上展開繪製。因為物理條件的微小變數,讓每一次的落筆都略有不同。

系統圖五個部分依序相連:平板在本機網頁上選圖案;Mac 把圖案換算成關節角度;手臂的六個馬達經 USB 收到指令;彈簧筆吸收筆壓;筆畫在傾斜約 79° 的畫布上。平板在本機網頁選圖案Mac換算成關節角度手臂六個馬達,USB 傳指令彈簧筆吸收筆壓傾斜畫布約 79°

共創歷程

提問、除錯與收斂

本作品是我與兩個 AI 代理的共創實踐。Agent 1 負責控制程式與除錯,Agent 2 則協助我推導運動學。我們在過程中不斷互相提問與糾錯。例如 Agent 2 曾提議將圓旋轉 45° 以避開關節換向時的停頓點,但在交叉驗證後承認數學上無法成立。最終,79° 的畫布傾角與 1.02 比 1 的振幅比,正是我們三方各自運算與思辨後,最終收斂出的共同解答。

結語

不完美的機器,努力表達

最終定案的圖形為圓、螺旋、天鵝、月亮與愛心,介面上的線稿僅是程式目標,並非手臂畫出的最終成品。作品的核心不在於圖形多複雜,而是看見一台不完美的機器如何努力表達。過度精細只會讓它淪為沒有靈魂的印表機。

  • 圓
  • 螺旋
  • 天鵝
  • 月亮
  • 愛心
程式裡的目標形狀

出處

出處與授權

  1. LeRobot(Hugging Face),Apache License 2.0
  2. SO-ARM101 模型(TheRobotStudio,與 Hugging Face 共同設計),Apache License 2.0
  3. 首頁的機械手臂粒子取樣自 SO-ARM100 模型(TheRobotStudio),Apache License 2.0