搭建路径中级一个周末

做一台知道自己抓空了的抓取搬运机器人

一只机械臂:能从托盘里拣起零件、分拣进两个料盒,检测出空抓并重试,还会记录成功完成了多少个循环。

做一台知道自己抓空了的抓取搬运机器人 技术示意图TAPER 20°SERVOSPRING kGRASP LINECONE ±31° AT μ 0.6WINDOWCRUSHSLIP0 STEPS FITTHE KNOB IS A POSITION · THE WALLS ARE FORCES

做的是什么

一只负责清空托盘的机械臂。零件根据你能辨认的某种特征——大小、颜色、来自哪个夹具——被送进两个料盒中的一个;机器在托盘清空或出故障之前一直无人值守地运行,出故障时它会停下来,并说明自己停在了哪个状态。

机器人本身不是有意思的部分。四自由度机械臂套件才四十英镑,运动学不过是一页三角函数。有意思的是,抓取搬运机器是按百分比来评判的,而从“视频里能跑”到“连着做了五十个”,是一个和“让它动起来”完全不同的工程问题。

两样带你过去,都在夹爪。

要紧的两个决策

1. 手指不能硬

这一点最出人意料,所以在你动手打印任何东西之前,值得先把它讲明白。

夹爪旋钮是位置——舵机角。物体极限是力:掉的下限,烂的上限。两者汇率舵盘到物体间一切串联刚度 k,实际瞄的窗口是

window (mm) = ( min(F_crush, F_servo) − F_slip ) / k

刚性打印手指的刚度大约是 25 N/mm。一只玩具级舵机在 30 mm 力臂上,指尖的分辨率约为 0.524 mm。拿一颗草莓代入这些数字,可用窗口是 0.108 mm——比一个步距还要细五倍,也就是说根本不存在一条能用的指令,再怎么调参也找不到。

手指 k 窗口 能用的舵机位置数
刚性打印 25 N/mm 0.108 mm 0
泡沫垫 4 N/mm 0.677 mm 1
串联弹簧 0.8 N/mm 3.386 mm 7
打印柔性铰链 0.35 N/mm 7.739 mm 15

舵盘手指间 40p 拉簧问题消失。用你自己的物体和你自己的力臂,先在实验台上完成选型,再去消耗打印耗材,舵机夹爪力、堵转与柔顺里有完整论证。

2. 必须有验证步

循环是接近、下降、抓取、验证、抬起、搬运、放置。没有验证状态,每一次失败都是无声的:夹爪合拢在空气上,机械臂把空气搬过整张桌子,然后在料盒上方张开,而计数器说它成功了。

在一根手指内侧装一个杠杆微动开关只要五便士和一个输入引脚,而它是整台机器中性价比最高的零件。在 300–400 ms 的停留时间之后读它——柔顺的手指在合拢之后会振铃,在振铃期间采样等于抛硬币——对连续三次读数做消抖,并给状态机加一个带有限次重试的 RECOVER 状态。状态机教程全套。

制作按序

  1. **定末端执行器。**零件扁平从上够得着,吸盘小泵先询价——打印啥都打不过。不然两指。夹爪类型与夹持力。
  2. **测量你的物体。**用厨房秤称质量,用同一台秤压碎几个可以牺牲的零件来测压碎力,用拉杆秤在垫料上拖动测 μ。这三个数字决定设计,而网上查到的数值对你的零件来说都是错的。
  3. **检查力封闭。**如果接触垫所在的那个面锥度超过 atan(μ),那么无论你把力加到多大都夹不住,需要改用 V 形槽或者换一个抓取点。摩擦与力封闭。
  4. **实验台夹爪选型。**最宽物体定力臂,窗口对舵机步查。夹爪模拟器。
  5. 打印夹爪柔性铰链或串联弹簧,TPU 垫,硬限位,微动开关。舵机夹爪。
  6. 五舵机正确接线。PCA9685 经 I²C,舵机独立轨,去耦。写固件前做,不然电源问题复位调一天。
  7. 写状态机,非阻塞,VERIFY、RECOVER。抓取搬运状态机。
  8. 用运动曲线给加速度设上界,这样你算出来的夹持力才能在搬运过程中撑得住。
  9. 跑五十计数。

验收

五十次连续循环,无人值守,配一个计数器和一个记录每次故障发生在哪个状态上的故障日志。这才是交付物,而且它比一段视频的要求高得多。

结果 含义
高于 95% 你已经有了一台机器。下一步是去感知位姿,而不是把它写死
80–95% 通常是接近位姿有问题,或者验证之前的稳定时间不够
80% 下 一般电源,或夹持没算加速项
只有在运行后段才失败 舵机发热,或者接触垫变脏。两者都真实存在,而且都像幽灵一样难以捉摸

状态机教程失效表大多数症状对原因。

这项目不是什么

它不做视觉,也不绕开障碍。托盘在已知的位置,料盒在已知的位置,机械臂去它被指到的那个地方。这是有意为之——这个项目的要点在于抓取是一个独立的问题,而且比看上去更难,把两者混为一谈,正是最初那些抓取搬运项目做不下去的原因。

当你希望机械臂自己找到零件、而不是被告知它在哪里时,那就是相机标定与标记位姿,而且它是叠加在一个已经能工作的抓取循环之上的,不是用来替换它的。

项目路线图

搭建路径

沿着技术树,从零件一路走到一台能正常工作的机器人。每个节点在其前置条件完成后解锁,你的进度会保存在这台设备上。

已完成 0 / 21

100%
目标

分拣托盘、知道自己何时漏抓的机械臂

整个项目

教程

这项工作该用哪种末端执行器?

30 分钟

打开教程
教程

这个抓取到底能不能夹住?

25 分钟

打开教程
教程

驱动五只舵机而不让主板复位

30 分钟

打开教程
教程

为什么第三次抓取时会复位

25 分钟

打开教程
搭建

无人值守分拣五十个零件

实测

元器件

本路径中的教程

接线之前先练习

用在线模拟器把它调好

搭建路径会经过一个浏览器实验台。先在这里把行为调对,再把参数迁移到真实的机器人上。

常见问题解答

抓取搬运制作最难的部分是什么?

不是机械臂,也不是运动学——而是夹爪指令的是位置,物体在意的却是力。用刚性的打印手指,从掉落零件到压碎零件之间的可用窗口大约只有十分之一毫米,而业余舵机走一步,夹爪就移动大约半毫米。没有任何一条指令能落在这个窗口里。解决办法是串联一根弹簧或一个柔性铰链,它会按 1/k 的比例把窗口放大,而这正是决定整个项目成败的那个决策。打印任何东西之前,先在夹爪模拟器里完成选型。

为什么我的机械臂一动就把零件掉了?

因为你是按重量来确定夹持力的,而运动需要更大的力。所需夹持力是 m(g + a)·SF/(μ·n),在动作利落的机械臂上,加速度项比重力还大。一个静止时用 1.63 N 就能夹住 58 g 物体的抓取,在 0.9 s 内完成 250 mm 的抬升时需要 1.93 N,如果在 0.35 s 内完成则需要 2.59 N——而且它会在运动开始后大约 40 ms 就松脱,那时机械臂还没有明显移动,这就是为什么它看起来像是夹爪失灵,而不像是算术问题。用运动曲线给加速度设上界,或者夹得更紧;通常运动曲线是更便宜的解决办法。

怎么知道夹爪是否真的抓起了东西?

在一根手指的内侧面装一个杠杆微动开关,接到一个带上拉的输入引脚上。大约五十便士、一根线,而且它给出的是直接的数字答案。把它装在手指的柔顺部分上,让它在一个可重复的力下触发;在软件里对它消抖(连续三次读数,而不是一次);并在 300–400 ms 的停留之后再读取,这样你就不会在手指振铃时采样。电流检测也可以用,而且还能额外发现压碎,但它需要一个标定过的阈值,并且会随着电池电压下垂而漂移。

这个项目需要逆运动学吗?

严格来说不需要——你可以手动示教位姿并存下关节角,对于固定的托盘和两个固定的料盒,这确实就够了。一旦你想要直线式的接近和退回,就需要逆运动学,因为这些是笛卡尔空间的运动,手动示教的关节角给不了你直线。由于从斜向扑向零件会把它碰倒,沿曲线抬起又会拖着它走,大多数制作最后都会想要直线段,而这就意味着要用逆运动学。

需要几只舵机,多大的电源?

五只:底座、肩、肘、腕和夹爪。这个通道数已经超出了 Uno 自己计时的合理范围,所以要通过 I²C 使用 PCA9685。电源是人们最容易低估的部分——五只业余舵机同时运动会拉出好几安培的浪涌电流,而板载的 5 V 稳压器会欠压,让控制器在抓取中途复位。给舵机单独供电并共地,再在驱动板附近并几百微法的电容。

做到什么程度才算完成?

配着计数器和故障日志,无人值守地连续完成五十个循环。这个目标比一段成功抓取一次的视频要好得多,因为它会逼着你做出验证步、有限次重试和一个不会下垂的电源——而这恰恰是区分演示品和机器的三样东西。低于 95% 时总有一个具体的原因,而日志会告诉你它是在哪个状态失败的。