双臂工业机器人:立项
Contents
起因
这个系列是客户需求带出来的。我有两个客户,一个物流行业的,一个服装行业的,这几年都被用工的事磨得没办法。物流那个做转运中心,装卸车、供包、码托,昼夜两班倒,旺季量还要翻几倍,人招不来也留不住;服装那个做电商仓,退货整理、分拣、供包,全是软包,从头到尾靠人手。两家先后问到同一件事:这个能不能上机器。
市面上的设备解决不了这个问题。物流的主线分拣早就自动化了,交叉带一条线每小时两三万件,但那是固定的机械,两头的活管不了——车厢里乱堆的件要人进去一件件掏,散件要人整理了送上线。服装仓更麻烦,软包没有形状,小到一个信封,大到半人高的编织袋,里面装的什么不知道,不能使劲夹,面单还得朝上朝外给扫码枪。专机干不了每件都不一样的活,标准机械臂工作站又贵又挑场景。客户要的就是中间这条路:一台能顶班的机器人。
于是有了这个系列:一台双臂机器人,两条臂各 7 个自由度,先固定在工位上干活,后面加麦克纳姆轮底盘。芯片用 RK3576 和 RK3588 按算力分两档,控制逻辑是同一份。这篇文章把立项时想清楚的几件事记下来——干什么活、件多重、多快、什么形态、芯片怎么用、总线选什么。中间有个数一开始就算错了,也一起写上。
干什么活
机器人进转运中心,不能去碰主线分拣。交叉带一条线两三万件每小时,那是固定机械的地盘,机器人碰它是数量级错配,客户也不会为这个买单。能做的是两头:码托拆托(输送线上来的件码到托盘上)、供包(散件整理上线)、装卸车(车厢里乱堆的件掏出来)。服装那边对应的是仓内分拣和退货整理,件从皮带上过,捡起来分到对应的格口或者箱子里。
这两个行业有个共同点,跟制造业完全不一样:制造业示教一次能重复一年,这两个行业每一件都是新的,尺寸、软硬、重量、面单朝向全都随机。这个差别决定了整台机器的设计重心——视觉和末端抓手比臂本身重要,后面每一篇都会回到这句话。
第一步选码托和皮带分拣这种最简单的场景。来料是整列好的,视觉难度最低,节拍压力也适中,先把整台机器跑顺了,再往散堆、供包、装卸车走。
件有多重,臂就选多大
客户的活是柔软物料分拣,衣物和小件包裹。衣物普遍两百克到两三公斤,小件包裹最重五公斤上下,再重的有,但很少。末端抓手带吸盘阵列和柔性夹,按 1.5 公斤算。这么一列,臂选 10 公斤这个档就够了——这是市售协作臂的标准档,自重三十公斤上下一条,单臂覆盖全部件重还有富余,不为想象中的重件花钱。
一开始我不是这么定的。第一版按快递行业写的 50 公斤,后来压到 30 公斤,理由是 30 公斤差不多是单件人力搬运的极限,超过这个数人本来就搬不动,替代的价值最大。这个数对物流行业整体是成立的,但现在回头看,拿行业的上限去定自己平台的目标是浪费——客户的活里没有那么多重件。所以 30 公斤现在只当行业参考留着,重尾走重货专线,真有物流的重载需求,将来在同一套控制和视觉下面换一对更重的臂就行,别的都不用动。
7 个自由度照旧。倒不是分拣需要这么多,是平台要往后面走:双臂一起抬东西、伸进料车深处够件、以后进车厢,冗余的自由度都用得上。前期干分拣的时候锁一个关节当六轴用,解算和刚度都省事,要绕的时候再放开。
多快才算合格
这里有个值得记下来的错。第一轮讨论定出来的节拍是 1200 件每分钟,被物理规律当场否了:1200 件每分钟就是 50 毫秒一件,就算只走 300 毫米的短往返,需要的加速度算出来接近 200 个 g,而最快的并联机器人也就 10 到 15 个 g,光夹一下就要 20 到 100 毫秒。按重量再看更离谱,50 公斤乘 1200 每分钟是每小时 3600 吨,那是港口卸船机的量。错误的根源不过是把每小时顺嘴说成了每分钟,但它逼着想清楚了一件事:抓放这种动作的快慢,卡在加速度和夹取时间上,跟总线快不快、控制周期多小没关系。
定下来的是每小时 1200 件,3 秒一件,两条臂各管各的,6 秒一个循环。单臂一个循环大概是:抓取 0.8 秒,搬运 1.5 秒,放置 0.8 秒,回程 1.2 秒,视觉 0.3 秒放在搬运路上并行做,双臂交接留 0.4 秒,再留 1 秒给异常重试。加起来正好 6 秒,有余量。
理论 3 秒实际 4 秒半的案例,问题基本出在三个地方。一是到了放置点臂还在振,传感器说到位了,爪子一合就偏,要么等两三百毫秒振动停了再放,要么全程把加速度压低,两头都是拿时间换,所以轨迹的 S 曲线做得好不好,比峰值速度标多高更影响实际节拍。二是规划器算一段走一段,每段边界停一下,节拍就碎了,要把规划做成连续吐段、执行连续吃段,中间用环形缓冲接着,不停在边界上。三是视觉串行:拍完、算完、再动,每件白送几百毫秒,改成移动中拍照——起飞的时候拍,飞的路上算,到了直接修正。
双臂也不是两倍快。一条臂抓的时候另一条放,节拍由慢的那半边决定。软包有个好处,可以并排吸两到四个一起搬,一个循环多搬几件,节拍就宽裕了。
单机节拍不够,用多机位解决:一条线配两台、三台,各管一段。这样做的好处是不用把单机逼到极限——留三分之一的余量跑,稳定性、维护性都比满负荷硬顶好得多,旺季要产能,加机位就是了。人工本来就是这种干法,一个口忙不过来就加一个人,机器照这个来。
形态:先定了龙门,后来改了
固定在工位上干活,第一轮推的是龙门:一根横梁挂两个滑枕,一个滑枕 4 到 5 根轴,两个滑枕 8 到 10 根。道理很直接——专机换型就报废,通用机械臂在这个载荷下刚度不够,龙门是结构管刚度、软件管柔性,换工位不动钢结构,改视觉模板和轨迹参数就行。机床上下料这种活它特别合适,一个滑枕装毛坯一个卸成品,天然就是流水重叠。
运动层的接口也是照着这个定的:上层只认"走到、抓取、释放"三个词,工位之间的差别全部装进参数和模板里。这样定的目的是让形态以后能换——换的是底下那层实现,上面的逻辑不动。
人形上半身当时放在门槛后面:龙门版连续 30 天无人值守的稼动率、乱堆抓取成功率、节拍实测,三条都达标,并且车厢装卸的需求真的出现了,才立项做。
后来这个结论改了。改的原因说来简单:客户的工位是现成的,按人的尺寸设计,台面 850,伸手就够得着。龙门要净空、要打地锚、要把工位排成直线,等于让客户改造车间来迁就机器;而一个人形上半身立在柱子上,站在原来人站的位置,什么都不用改。再加上分拣的件轻,10 公斤档的臂又快又便宜,改判的结论就是把立柱加双臂躯干提到第一位,龙门降成一个变体——真有新建的重载工位,买现成的桁架回来,把我们的大脑挂上去就行。完整的推演写在下一篇,这篇保留第一轮的结论当记录。
芯片和软件
RK3576 和 RK3588 两档,核心逻辑一份。一份这件事要靠架构保证,不能靠自觉:实时控制不碰 NPU 也不碰大核,伺服循环的确定性只取决于 PREEMPT_RT 内核和绑核;算力档位影响的只有感知那边,模型多大、推理多少帧。换芯片的时候控制逻辑一行不改。
系统用 Linux,这个没什么可犹豫的。这两颗芯片的 NPU、GPU、VPU 全在厂商的二进制里,自己写系统等于把整个算力生态让出去。实时这一层用 PREEMPT_RT 加 EtherCAT 主站(SOEM 或者 IgH)跑 1kHz 的伺服循环,绑核隔离。设备上不放 ROS 的节点图,不放 DDS,能省的中间件全省——黑灯车间里部署面越小越好养。
规划分两条路。码托这种来料整列的场景,轨迹可以离线生成:MoveIt 在开发机上做规划和仿真,输出的时间参数化轨迹文件拷到设备上执行,MoveIt 在这里就是个离线编译器。散堆和车厢那种场景没法离线,每一件的位姿都是现场才知道的,设备上要跑一个轻量的在线解算,数值逆解加简单的避障,RK3588 的 A76 核跑这个绰绰有余。
所以 ROS2 的位置也清楚了:它是开发机上的工具,不是设备上的运行时。用不用它是工具选择,跟架构没关系。
总线选了 EtherCAT
两条臂 14 根轴,加上末端,1kHz 的伺服周期,每个周期命令和反馈都要过线:
| 总线 | 14 轴 @1kHz | 多轴同步 |
|---|---|---|
| RS-485 | 轮询式,10 毫秒级的服务,差一个数量级 | 无 |
| CAN 1Mbps | 每秒七千帧上下,不够(需要一万四到两万八千帧) | 软件对时 |
| CAN FD | 勉强够 | 软件对时 |
| EtherCAT | 100Mbps 飞读飞写,300 字节的过程映像占线不到 5%,跑到 10kHz 都行 | 分布式时钟,微秒级硬件同步 |
选 EtherCAT 有三个原因。分布式时钟是硬件同步,误差不到 1 微秒,双臂那种一条抓一条放的配合靠的就是它,不是靠软件里留半秒余量保平安。市面上关节模组和伺服的协议主流就是它,选型面宽。RK3588 的原生网口跑主站是成熟路线。485 没有淘汰,退到维护口和慢速传感那边去,10 毫秒的周期够用。
接下来
系列往后走的顺序:先把躯干和立柱的机械设计写完,然后是关节模组选型、1kHz 的薄执行器、视觉链、软包抓手,这些是第一步;乱堆抓取和装卸车靠后,那是模型训练的主场;底盘和车厢再往后。每篇都带着具体的数字和踩过的坑。
下一篇从形态改判讲起,把龙门怎么输给立柱双臂的过程完整写一遍:双臂工业机器人:形态改判。
Author 软件开发大郭
LastMod 2026-09-13