这篇文章想解决的不是“哪家公司更领先”,而是一个更落地的问题:如果你想把一台类 Digit 的人形机器人真正放进仓内流程里跑完整班次,系统该怎么搭、状态该怎么切、出了问题怎么接管、怎么留证据复盘。对早期团队来说,最关键的工程判断通常不是先追求更多花哨技能,而是先把单一站点、单一班次、单一异常链路跑顺。
这篇适合谁
- 正在做仓储、物流、分拣、补货、上下料类 humanoid 原型的团队
- 已经有一台能完成单次搬运或 tote 转运 demo,但还跑不稳完整班次的团队
- 需要把 humanoid 接进 AMR、输送线、WMS/WES 或现场调度系统的人
- 想把“机器人会动”升级成“机器人能被运营”的工程负责人
先纠正几个很常见的误区
- 误区 1:只要单次成功率高,就能上线。
仓内真实问题常常出在班次切换、拥堵回退、工位堵塞、人工插手和恢复逻辑,不是单次抓放动作本身。 - 误区 2:先把机器人能力做强,再考虑系统对接。
很多项目真正拖慢进度的,是订单触发、站点占用、AMR 到位确认、工位放行信号和异常升级链路,而不是动作规划器本身。 - 误区 3:站点任务可以一直“在线调”。
如果没有明确状态机、任务边界和回放证据,线上调参只会让班次表现越来越不可解释。 - 误区 4:仓储 humanoid 的核心难点只是行走。
在很多封闭工位里,真正决定能不能交付的是站点节拍、排队逻辑、接口稳定性、人工接管成本和故障恢复时间。
关键实现判断
仓内 humanoid 第一阶段最稳的打法,通常不是追求“通用仓储机器人”,而是先做成一个站点化、班次化、可回退的系统:
- 站点化:先冻结 1 个具体站点,例如 AMR 到站后取 tote 放传送带,或者从缓存位转运到固定工位。
- 班次化:不要只看 10 次成功,要看 2 小时以上连续运行里的堵站、待机、误触发、人工恢复和日志可读性。
- 可回退:任何动作前都要能取消、降级、交还人工,不要把现场逼到“机器人不完成,流程就卡死”的局面。
公开案例里最值得借鉴的,不是某台机器人会不会搬箱子,而是它有没有被放进 AMR、输送线和上层 workflow controls 组成的完整站点里。对仓内 humanoid 来说,真正决定可运营性的,仍然是站点协同和异常恢复,而不是单机动作本身。
如果你现在还没有冻结站点任务、没有统一状态名、没有人工接管入口,或者班次失败后仍然只能靠值守工程师口头复盘,那项目大概率还停留在 demo 运营前阶段。下一步优先级通常不是继续加技能,而是先把任务边界、状态切换和异常证据链压成一个可交接的最小闭环。
分步实践指南
第 1 步,先把站点任务冻结到一句话能讲清
先把任务写成工程合同,而不是市场描述。一个合格的站点任务定义,至少要有下面这些字段:
- 触发条件,例如 AMR 停稳且对位完成,或缓存位传感器确认有物料
- 输入对象,例如 tote 尺寸范围、重量上限、把手/抓取区约束
- 输出结果,例如 tote 放上传送带且姿态满足后续工位要求
- 超时与放弃条件,例如等待 15 秒未对位则退出排队
- 人工接管入口,例如 UI 按钮、脚踏开关或站点 supervisor 服务
如果一句话里还包含“必要时顺便……”这类扩展条件,说明任务边界还没冻住。
第 2 步,把机器人状态切成少数几个运营可理解的模式
不要让现场看到几十个内部节点名。更实用的做法,是先把站点逻辑对外压成少数几种运营能读懂的状态:
- Unconfigured / 预备态:设备刚启动,尚未完成站点参数加载、自检和安全检查
- Inactive / 待命态:机器人在线但不抢任务,可以接受配置、校准或工位释放
- Active / 执行态:允许接单、行走、取放、回位
- Degraded / 降级态:允许站内回位、退出拥堵区,但不再接新任务
- Handover / 接管态:等待人工确认、远程辅助或现场恢复
这几个状态一旦定义好,上层调度、工位 UI 和日志检索都会清楚很多。真正重要的是,让外部系统永远知道机器人现在“能不能接任务、能不能继续、需不需要人”。
第 3 步,把 AMR / 输送线 / 上层系统接口先做成可模拟
这一步特别容易被忽视。很多团队把大部分时间花在机器人动作上,却没有先把外部接口模拟出来,结果现场联调一开始就卡死。
比较稳的做法是先准备三类接口:
- 任务入口:例如 REST、MQTT、ROS 2 service 或消息队列,输入任务号、目标站点、优先级
- 站点信号:AMR 到位、输送线可放行、缓存位占用、人工锁站、急停恢复
- 状态回传:接单、前往站点、等待对位、执行中、已完成、需接管、已退出
这一步最重要的不是接口名选什么,而是别让 WMS/WES 直接理解机器人内部动作树。中间一定要有一层 adapter,把任务语言翻译成站点动作,再把机器人细节压缩成运营能读懂的状态。
第 4 步,把“到站后做什么”拆成可重放的小阶段
如果到站后的逻辑还是一个黑盒大动作,线上出了问题你很难定位。建议至少拆成以下阶段:
- 进站与对位确认
- 目标物确认与最后一次重观察
- 取物执行
- 姿态稳定与转身/侧移
- 放物或交接
- 完成确认与清站
每个阶段都要写入开始时间、结束时间、成功/失败码、取消原因和接管标记。Agility 公开提到在工位堵塞时 Digit 会先把 tote 临时堆到旁边,再在输送线恢复后继续主流程。这个例子说明,真正能上线的系统不是“永远按理想路径做”,而是流程里有明确的旁路和恢复点。
第 5 步,先把几类高频异常做成模板,不要每次人工 improvisation
仓内项目最怕的不是偶发失败,而是每次失败都靠值守工程师临场发挥。建议最先固化以下异常模板:
- AMR 未准时到站,任务进入等待或重排
- 目标物偏移,允许一次重观察,不允许无限重试
- 输送线堵塞,转入缓存位或暂停接单
- 通道临时有人/车占用,允许短等待加一次回位,不做长期僵持
- 抓取后姿态不稳,立即转入安全放置点而不是硬送终点
- 机器人本体进入降级态,停止接新单,优先退回交接安全区
这些模板越早固化,后面人工接管成本越低,站点行为也越像一个可维护产品,而不是 demo 拼装体。
第 6 步,班次日志要能回答“为什么这 20 分钟吞吐掉下来了”
真正有用的日志,不是简单把所有 topic 全录下来,而是围绕班次诊断设计。建议至少保留四层证据:
- 任务层:任务号、站点、开始/结束、成功率、平均周期、取消原因
- 状态层:生命周期状态切换、接管开始/结束、降级原因
- 感知执行层:关键阶段图像、抓取/放置结果、位姿估计版本、动作结果码
- 系统层:电池、温度、通信延迟、网络断连、控制器错误
重点不是“录更多”,而是能在一次班次复盘里把任务号、状态切换和机器人内部事件对齐到同一条回放链路。
最容易翻车的地方
- 站点规则写在工程师脑子里,不写在接口里。结果一换班次或一换人,系统表现就漂。
- 任务失败没有可恢复终点。机器人卡在通道中央,既不退,也不交人。
- 等待态没有时间上限。一旦 AMR 延迟或输送线堵住,整个站点像“还活着但不出活”。
- 上层只看成功率,不看人工介入率。表面上 95% 成功,实际上每小时都要人工救场三次。
- 视觉/抓取版本在线热切换,没有回滚门槛。短期看像迭代更快,长期看班次表现不可比较。
怎么验证你真的搭对了
不要只做单次成功演示,至少补一轮面向班次的验证:
- 连续运行测试:在固定站点跑 2 到 4 小时,记录周期分布、暂停次数、人工接管次数
- 节拍波动测试:人为制造 AMR 提前/延迟、输送线短时堵塞、人工插单,观察系统是否降级而不是崩溃
- 异常恢复测试:把“目标偏移、到位失败、抓取滑脱、网络闪断”逐项注入,看是否能进入预定义模板
- 日志复盘测试:随机抽 5 次失败任务,要求非当班工程师也能仅靠日志和回放定位问题
- 接管成本测试:统计一次接管平均需要几步、几秒、是否必须特定工程师才能完成
只有当这些结果稳定了,才值得讨论多站点、多任务或更通用的仓储叙事。
下一步怎么做
- 先把一个工位做成“可连续跑班次”的最小闭环,再扩到第二个站点
- 把当前任务入口整理成 adapter,而不是把上层系统直接绑死在机器人内部节点上
- 把人工接管从“工程师 SSH 上去修”升级成标准化 supervisor 流程
- 开始沉淀 failure buckets,按站点、对象、时段和版本做复盘,而不是只按“成功/失败”二分