可行性報告:外部方案調查

2026-08-02 針對目前手上四個未解問題, 查外部是否已有現成解法。每一項都標了我的建議與需要你決定的地方。

2026-09 後記:本文提到的決定已做——B 那支改用 STS3215 匯流排舵機(見 STS3215-Arm),之後又追加了力矩回授的 DM-J4310-Arm。下文保留 2026-08-02 當時的判斷,不回頭改。

先講結論:四個問題,三個有現成的解,一個要你決定要不要換零件

問題外部方案我的判斷
步進 4000 步/s 天花板,datasheet 轉速開不出來 FastAccelStepper(硬體計時器產脈衝) 直接採用
舵機滿速會過衝撞進機構極限 Derivs_Limiter / MotionGenerator(梯形速度規劃) 直接採用
FT5425BL 額定扭矩無原廠來源 同廠 STS3215 原廠同時公布堵轉 30/額定 10,比值正好 3.0 佐證成立
PWM 舵機沒有回授,做不了閉環驗證 換 STS3215 匯流排舵機(有位置/負載/溫度回授)
或外掛 AS5600 磁編碼器
要你決定

1 步進:4000 步/s 的天花板可以直接拿掉

A5 查出的問題:16 細分下 AccelStepper 在 AVR 上約 4000 步/s, 換算馬達只有 75 rpm,而 datasheet 寫 300 rpm(需 16000 步/s)。 我當時的結論是「得換硬體計時器或降細分」。那個東西已經有人做好了。

平台AccelStepperFastAccelStepper倍數
ATmega328p(Uno)單軸~4,00050,00012.5×
ATmega328p 雙軸—37,000—
ESP32 / RP2040—200,000—

我們需要 16,000 步/s,Uno 上就給得起。 差別在 AccelStepper 用主處理器 bit-bang 脈衝,FastAccelStepper 用硬體計時器的 compare 單元切換 STEP 腳位。

還有一個附帶好處:A5 量到 AccelStepper 的第一步等效加速度是設定值的 1.823 倍(來自 David Austin 的 0.676 起步修正)。 FastAccelStepper 用的是精確運動學 v = √(2as) 而非 Austin 近似, 所以那個衝量在它身上不存在——我為了它把可用斜坡上限從 400k 降到 250k 步/s², 換掉之後可以拿回來。

建議:A5 的韌體改用 FastAccelStepper,並在差異測試裡把兩套演算法都跑一遍 (我已經有 AccelStepper 的逐行移植,再加一套精確運動學的對照即可)。 建議直接做,不需要你決定

來源:gin66/FastAccelStepper (README 的平台上限數字)

2 舵機:過衝撞極限有三個現成的軌跡規劃函式庫

B4 量到的問題:照 datasheet 的 13.09 rad/s 下指令,60° 的肩部動作會 過衝 15° 撞進 −75° 機構極限,拉到連續額定的 102%。我的處置是把指令限速到 50%。 限速是對的,但「階躍指令 + 限速」不如「梯形軌跡」。

函式庫做法對我們的意義
Derivs_Limiter等加速度 + 限速的梯形曲線 與 A5 步進端用的是同一種軌跡,兩支手臂的韌體結構會一致
MotionGenerator解析式梯形,與取樣率無關 作者明講:取樣率相依的做法「會導致震盪與不穩定」
ServoSmooth加減速梯形功能相近
ServoEasingCubic/Sine/Bounce 等緩動曲線 視覺取向,非為機構保護設計

MotionGenerator 那句批評直接打到我的模型。 我的 ft_servo.py 就是逐 tick 積分、取樣率相依的做法, 而我確實觀察到過衝與震盪。這不代表我的模型錯(它模擬的是真實韌體的行為), 但代表韌體端應該用解析式軌跡,而模型要跟著改成模擬那個。

建議:B5 韌體用 Derivs_Limiter 或 MotionGenerator 產生梯形軌跡, 並保留 50% 限速當第二道保險。 建議直接做,不需要你決定

來源:Derivs_Limiter、 MotionGenerator、 ServoEasing

3 FT5425BL 的額定扭矩:找到了同廠的佐證

先前的狀況:原廠只公布堵轉 28.5 kg·cm,額定 9.5 kg·cm 只有單一經銷商來源, 而且剛好是堵轉的 1/3,比例整齊得可疑,所以我標成「未驗證」並讓預算一直印警告。

查到兩件事:

證據內容
業界慣例廉價舵機的連續扭矩約為堵轉的 30–50%; 超過 5 秒會熱保護或傷齒輪
同廠 STS3215飛特自己同時公布 堵轉 30 kg·cm、額定 10 kg·cm —— 比值正好 3.0

同一家廠商在另一顆產品上用 1/3 的比例公布額定值, 這比經銷商的單一來源強得多。我取 9.5(33%)落在 30–50% 區間的保守端。

建議:把 torque_rated_verified 改為 True, 但在註解記明依據是「同廠慣例 + 業界區間」而非本型號的原廠規格書, 並保留 30–50% 的區間當敏感度分析。 建議直接做

來源:ROBOTIS 扭矩規格說明、 Seeed STS3215 規格、 飛特 FT54 系列

4 回授:這一項需要你決定

目前的限制:四支手臂裡只有 DM-J4310 有回授,所以閉環驗證只有 C 那支做得到。 SG90 與 FT5425BL 都是 3 線 PWM,Servo::read() 回報的只是指令的回音。

查到三條路:

方案內容代價
A. 換 STS3215 匯流排舵機,12-bit 磁編碼器,回報位置/負載/速度/電流/溫度; 堵轉 30 kg·cm、額定 10(與 FT5425BL 幾乎同級); LeRobot SO-101 的標準件 B 那支要重畫舵機座。本機已有 STS3250 的 STEP,實測 45.2×37.4×24.7,比 FT5425BL 的 62.6×34.9×20.0 更緊湊, 而且同樣是 Ø5.9 的 25T 花鍵
B. 外掛 AS5600 關節軸上加磁編碼器,與舵機型號無關;12-bit 每軸多一顆感測器與走線;但可以套用到現有的 SG90 手臂
C. 拆機拉電位器 標準舵機內部有 5 kΩ 電位器可拉第四條線 FT5425BL 是無刷舵機,內部不一定是電位器, 且無此型號的拆解資料。風險最高

我的建議是 A,理由不是「比較好」而是三件具體的事:

  1. 它同時解掉第 3 項——原廠公布額定扭矩,不必再靠推論
  2. 閉環驗證從一支變兩支,而閉環是這個專案唯一還沒碰到的驗證層
  3. 幾何更小,B 那支手臂重畫之後會比現在緊湊,而不是變大

但這會讓 B1–B4 已經做完的東西大部分要重跑 (尺寸決策、CAD、URDF、模擬),估計是 B 系列一半的工作量。

需要你確認的三件事

  1. B 那支手臂要不要改用 STS3215? 換=多一支能做閉環驗證、資料來源變硬、體積變小,但 B1–B4 要重做一半。 不換=B 系列照原路走完,閉環仍只有 C 那支。
  2. 要不要順便把 SG90 那支加上 AS5600? 那支已經完成並發布,加編碼器只影響驗證層不影響機構。 好處是第一支手臂也能做閉環對照。
  3. FastAccelStepper 與軌跡函式庫我打算直接換, 因為它們不改變任何機構、只改韌體與模擬。若你有不同想法再說。

附帶發現:C 系列有很紮實的先例

查 DM-J4310 時發現兩個開源專案直接用這顆馬達, 對 C 系列是外部參照——我可以拿自己的扭矩預算去對照真實出貨的機器:

專案內容
OpenARM7 DOF 人形手臂,DM 馬達版本含 CAD、驅動、PCB、佈線教學
reBot Arm B601-DM(Seeed) 6+1 DoF,4× DM-J4310 + 3× DM-J4340P, 伸距 767 mm、酬載 1.5 kg、重複性 0.2 mm; 含 Python SDK、ROS1/2、Isaac Sim、LeRobot

我的預算算出 DM-J4310 單顆對應 410 mm 伸距。 reBot 用 7 顆(含更大扭矩的 4340P)做到 767 mm、1.5 kg—— 數量級一致,而且給了我一個可以驗證的外部數字, 這是前三支手臂都沒有的。

附帶發現:驗證方法論有學術背書

我一直在做的「蛻變關係 + 用變異測試驗證那些關係」不是自創的, 是有名字的既有技術,這讓我比較有把握它涵蓋得夠:

下一步我會把那份 ACM 綜述的檢查表拿來對照,看還缺哪幾類。

回完整專案紀錄 ·  入口頁