可行性報告:外部方案調查
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)。 我當時的結論是「得換硬體計時器或降細分」。那個東西已經有人做好了。
| 平台 | AccelStepper | FastAccelStepper | 倍數 |
|---|---|---|---|
| ATmega328p(Uno)單軸 | ~4,000 | 50,000 | 12.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 | 加減速梯形 | 功能相近 |
| ServoEasing | Cubic/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,理由不是「比較好」而是三件具體的事:
- 它同時解掉第 3 項——原廠公布額定扭矩,不必再靠推論
- 閉環驗證從一支變兩支,而閉環是這個專案唯一還沒碰到的驗證層
- 幾何更小,B 那支手臂重畫之後會比現在緊湊,而不是變大
但這會讓 B1–B4 已經做完的東西大部分要重跑 (尺寸決策、CAD、URDF、模擬),估計是 B 系列一半的工作量。
需要你確認的三件事
- B 那支手臂要不要改用 STS3215? 換=多一支能做閉環驗證、資料來源變硬、體積變小,但 B1–B4 要重做一半。 不換=B 系列照原路走完,閉環仍只有 C 那支。
- 要不要順便把 SG90 那支加上 AS5600? 那支已經完成並發布,加編碼器只影響驗證層不影響機構。 好處是第一支手臂也能做閉環對照。
- FastAccelStepper 與軌跡函式庫我打算直接換, 因為它們不改變任何機構、只改韌體與模擬。若你有不同想法再說。
附帶發現:C 系列有很紮實的先例
查 DM-J4310 時發現兩個開源專案直接用這顆馬達, 對 C 系列是外部參照——我可以拿自己的扭矩預算去對照真實出貨的機器:
| 專案 | 內容 |
|---|---|
| OpenARM | 7 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 TOSEM 2022《Testing, Validation, and Verification of Robotic and Autonomous Systems》系統性綜述
- IEEE:模擬模型缺乏 oracle 時用蛻變測試建立 pseudo-oracle
- 用變異測試檢驗蛻變關係抓不抓得到植入的錯誤——正是我每一層都在做的事
下一步我會把那份 ACM 綜述的檢查表拿來對照,看還缺哪幾類。