教程 · 中级 · 30 分钟
舵机夹爪的夹持力、堵转,以及为什么柔顺更胜一筹
舵机控制的是位置,而你要抓的物体在乎的是力。两者之间的汇率就是刚度;如果手指是刚性的,可用的窗口比一个舵机步距还要窄。
这是一个单位问题,不是一个调参问题
业余舵机夹爪的全部难点,两行就说完了:
- 物体在乎力。低于一个下限它掉出来,高于一个上限它就毁了。
- 舵机吃的是位置。
writeMicroseconds(1300)是一个角度,舵机会顶住任何代价把那个角度保持住。
这是两套不同的单位,而在它们之间做转换的东西,是从舵盘到物体之间所有部件的串联刚度——连杆、手指、垫、物体本身,全都在串联里。如果那条链的刚度是 k,那么在首次接触之后把钳口继续推进 Δc 就会产生
N = k · Δc
而你必须命中的那个力窗口,用你真正能指令的毫米来表示,就是
Δc_window = ( F_ceiling − F_floor ) / k
本文的一切都由这一个方程推出来,包括“为什么打印得更硬更好的手指反而让你的夹爪更糟”这个原因。
舵机真正能分辨什么
一旦把死区、减速箱背隙、以及产生脉冲的那个东西的量化都算进去,业余舵机可用的分辨率大约是一度。这一度通过力臂 L 变成钳口行程:
step = L · (π/180)
| 力臂 | 每步钳口行程 | SG90 堵转力 | 连续力(约 70%) |
|---|---|---|---|
| 12 mm | 0.209 mm | 14.67 N | 10.27 N |
| 20 mm | 0.349 mm | 8.80 N | 6.16 N |
| 30 mm | 0.524 mm | 5.87 N | 4.11 N |
| 45 mm | 0.785 mm | 3.91 N | 2.74 N |
| 60 mm | 1.047 mm | 2.93 N | 2.05 N |
有两件事值得注意。短力臂同时买到更大的力和更细的分辨率——在夹爪在意的两个维度上它都更好。它付出的代价是行程:舵盘转过 θ 时钳口行程就是 L·θ,所以一条 12 mm 的力臂转过 120° 只张开 25 mm,够不着绕一圈 65 mm 的瓶子。
力臂由你需要抓起的最大的东西选,力和分辨率都是从中掉出来的。如果你既要行程又要力,那就是连杆或者齿条该干的活。
第二件事:12 位的 PCA9685 给出大约 0.09° 的指令分辨率,听起来这就把问题解决了。它没有。那堵墙是舵机自己的死区和减速箱,不是脉冲源。更细的指令买到更平滑的运动,而不是更细的力——和微步买到的是跟踪而不是精度是同一个形状。
窗口,量出来
现在把两半合起来。拿一颗草莓:15 g,μ 0.6,压坏大约 3 N,而一条 30 mm 力臂上的 SG90 给出 4.11 N 连续力。在 0.9 s 内完成 250 mm 的提升中,打滑下限是 0.29 N,上限是 min(3, 4.11) = 3 N,所以力窗口是 2.71 N。除以刚度:
| 手指 | k | 窗口 | 对比 0.524 mm 步 | 能用的舵机位置数 |
|---|---|---|---|---|
| 刚性打印 PLA 手指 | 25 N/mm | 0.108 mm | 细了 5 倍 | 0 |
| 刚性手指加泡沫垫 | 4 N/mm | 0.677 mm | 刚好更宽 | 1 |
| 串联拉簧 | 0.8 N/mm | 3.386 mm | 宽了 6 倍 | 7 |
| 打印柔性铰链 | 0.35 N/mm | 7.739 mm | 宽了 15 倍 | 15 |
窗口严格按 1/k 缩放。二十五除以零点三五是七十一,而 7.739 除以 0.108 也是七十一。这里没有任何近似,你可以在夹爪模拟器里拖动刚度滑块,看着这两个数互相反向移动。
**在一个舵机步以下,没有任何设置是能用的。**不是“难调”——是不存在落在窗口里的指令值,而任何固件改动都够不到一个。这就是你在打印手指之前最该知道的一件事。
那为什么别人的刚性夹爪能用?
因为它压根就没落在窗口里。它冲过头,然后顶在舵机自己的力上限上钉住,而那只在那个上限恰好低于物体压坏力的时候才成立。
在模拟器里用刚性手指轮换那些物体,“能用的设置”那一列每一个都是零——可六件里有四件却被握得完好:
| 物体 | 压坏极限 | 刚性手指下会发生什么 |
|---|---|---|
| 木块 | 500 N | 握住——舵机钉在 4.11 N |
| M6 螺栓 | 2000 N | 握住——舵机钉住 |
| 鸡蛋 | 30 N | 握住——舵机钉住 |
| PET 瓶 | 8 N | 握住——舵机钉住 |
| 纸杯 | 4 N | 压坏 |
| 草莓 | 3 N | 压坏 |
舵机在扮演一个你既没设计也无法调整的离合器。它就设在 τ·0.7/L 碰巧算出来的那个值上,而比它弱的东西全被毁掉。
这带来一个真正反直觉的后果:**装一台更大的舵机会让夹爪更糟。**把堵转扭矩滑块从 SG90 往 MG996R 的方向推,那个意外存在的离合器就往上越过鸡蛋的压坏极限,于是现在你连鸡蛋也弄碎了。对“东西掉”这个问题,增大扭矩几乎和它是正确答案一样经常是错误的答案。
靠堵转保持的代价
一个顶着物体的舵机就是一个堵转的舵机。它不转,所以不产生任何机械功率,绕组吸取的每一分能量都变成了热。
- SG90 在 4.8 V 下堵转大约吃 650–750 mA。在堵转扭矩的 70% 上,你仍然是在往一台既无风冷又是塑料壳的电机里推大约 0.49 A。
- 它们几十秒就烫,几分钟就死。常见症状是舵机先能工作,然后变弱、发抖,再嗡嗡响着什么都不干。
- 一颗便宜的 5 V 稳压器供着这么两三个就会欠压,害得你的单片机在抓取过程中复位。
能修它的东西,大致按花费从低到高排列:
- **别抓着不需要抓着的东西。**零件一放到位就立刻把夹爪张开。最常见的 bug 是状态机在整个回程里让钳口闭着一只空夹爪。
- **抓住之后回退一点。**果断合上,然后把指令减一两步。有柔顺在串联时你保住了大部分力;没有它你就一点力都不剩,这又是给柔顺添的一条理由。
- 让舵机用自己的电源供电,而不是板上的稳压器,并在附近放几百 µF。
- **长时间保持时加一个机械锁扣或者过中心连杆。**生产夹爪就是这么做的,而且它耗电为零。
- **保持一分钟后用手量一下壳温。**温热没问题。烫到你手指都放不住,说明你还剩大概一周的占空比。
把柔顺做进设计
柔顺一次解决两个问题——它打开窗口,同时把舵机从堵转钉住的状态上卸下来。拿到柔顺有四种方法,从最便宜的开始:
泡沫或 TPU 垫(k ≈ 4 N/mm)
贴一片 EVA 泡沫,或者打印一块 3–4 mm 厚的 TPU 垫。花不了钱,花五分钟,把你从零个可用设置挪到大约一个。它是最小可行的修法,但对精细活单靠它不够。
串联拉簧(k ≈ 0.8 N/mm)
把弹簧放在舵盘和手指之间,带一个槽和一根销,好让连杆吃掉行程。现在舵机指令的是弹簧的变形量,那是一个带真实容差的力指令。这就是一个用 40 便士零件造出来的串联弹性驱动器,也是整个夹爪里性价比最高的改动。
设计规则:选一个工作变形量能覆盖你窗口的弹簧(几毫米),稍微预紧一点让首次接触没有死区,再加一个硬限位,这样失控的指令不会把弹簧压并、把全部堵转扭矩照样穿过连杆。
打印柔性铰链手指(k ≈ 0.35 N/mm)
一根手指带着一段故意做薄的会弯的部分。打印时几乎免费,不用额外零件,而且给你四种里最宽的窗口。用 PETG 或尼龙打印而不要用 PLA——PLA 在持续负载下会蠕变,你的柔性件在夹着东西几周之内就会产生永久变形。
厚度是主导因素:悬臂梁的刚度按厚度的三次方走,所以 2 mm 对 1.5 mm 就是 2.4 倍。打印一条测试片,挂上已知重量,量出变形,十分钟你就有了 k。应该放进模拟器的是这个量出来的数,不是预设值。
指形桁架手指(业内称作 Fin-ray)
整根手指是一座桁架,在受力时包住物体。它同时给你柔顺和部分形封闭,这也是它在业余夹爪这一行里接管了不规则物体的原因。建模更难——有效刚度会随包覆程度变化——所以要量,不要算。
柔顺的代价
它不是免费的,值得诚实地把这个取舍摆出来:
- **物体上的位置精度。**零件最后停在柔顺放它的地方,而不是你指令的地方。如果你的任务要求零件放到 0.2 mm 的精度,柔顺就是在跟你作对,你要的是一根配真实力感测的刚性夹爪。
- **稳定时间。**软手指在快速移动后会振铃。合上之后加一小段停留再抬起,否则你量到的是振铃而不是夹持。
- **蠕变。**任何塑料在持续负载下都会缓慢变形。弹簧和 PETG 柔性件在这方面比 PLA 好得多。
- **你感觉不到物体。**柔顺让舵机自己的位置成为指尖状况的一个更差的代用指标,所以如果你想检测有没有抓到,就需要开关或传感器——见抓取搬运状态机。
打印前要有的四个数
L,力臂——由最宽的物体决定。其他一切都跟着它走。k,串联刚度——量出来,在打印出的测试手指上挂重量。F_crush——量出来,用一台厨房秤和几个可以牺牲的零件。step = L·(π/180)——纯算术。
然后检查 (min(F_crush, τ·0.7/L) − F_floor)/k > step。如果不通过,你写什么固件都不会让这个夹爪工作,而修法永远是降低 k——永远不是提高扭矩。
下一步
- 摩擦、力封闭与两触点是一次赌博——力修不了的失败
- 车夹爪类型与夹持力——下限从哪来
- 夹爪模拟器——拖动刚度,看窗口按 1/k 缩放
- SG90 舵机——本文假定的那个零件
- PCA9685 驱动舵机——当一个舵机变成六个
探索关联图谱
本教程所属的搭建
包含本教程的项目和学习路线。
延伸阅读