这篇文章要解决的不是“哪家公司更重要”,而是如果你要做人形机器人上肢搬运原型,第一版到底该怎么定任务包线、机械结构、抓手、顺应控制和验证顺序。它适合想做仓库或制造场景上半身搬运任务的团队。最关键的工程判断是:这类项目成败通常不取决于你是不是一开始就做出“最像人手的人形机器人”,而取决于你有没有先把负载包线、肩肘工作空间、末端夹具和接触顺应这四件事冻结下来。
这篇适合谁
- 正在做人形机器人搬箱、上料、料框转运、挂件搬运等上肢任务的人
- 已经有一台样机,但上肢任务总在负载、发热、碰撞、轨迹失败里反复的人
- 想判断第一版该优先投在肩肘结构、夹具、控制,还是数据与验证链上的团队
先纠正几个很常见的误区
误区 1:只要整机能站、能走,上肢搬运任务自然就能做
很多项目真正卡住的不是下肢,而是上肢工作空间、夹具稳定性、负载引起的姿态扰动和热降额。整机会动,不代表上肢能连续搬运。
误区 2:先把灵巧手做满,再谈工业搬运
如果你的目标是搬箱、提篮、挂袋、抓托盘边缘,第一版更重要的是抓取几何、夹具容错、腕部顺应和 TCP 标定,不是二十多个手指自由度。
误区 3:负载能力只看“能举多重”
静态举起 10 公斤和在 8 小时轮班里反复抓取、转身、放置,是完全不同的问题。真正该冻结的是任务包线,不是宣传数字。
误区 4:有了轨迹规划器,就等于解决了操作问题
规划器负责给你一条能走的路,但接触瞬间的顺应、夹具滑移、箱体偏心、货架误差和人工接管路径,仍然要靠你在系统层补齐。
关键实现判断:先冻结任务包线,再决定肩肘结构和控制边界
我更建议把第一版上肢搬运原型拆成四张表:
- 物体表:重量范围、尺寸范围、把手/边缘/接触面类型、允许压痕与否
- 空间表:取放高度、可达深度、货架间隙、转身半径、允许借力点
- 节拍表:单次循环时长、连续运行时长、每小时动作数、热停机上限
- 恢复表:没抓稳怎么办、卡货怎么办、超力怎么办、人工从哪一步接管
如果这四张表不先定,后面肩部自由度、减速器规格、夹具形态、轨迹控制方式都会不断返工。Apptronik 在 Apollo 上强调的近期开仓储和制造场景、面向高 payload、可量产和安全协作,本质上也是先把可落地任务边界收窄,而不是先追“什么都能干”。
分步实践指南
第 1 步,先把任务做成“上肢搬运单元”,不要一开始就做泛化双臂
第一版建议只选 1 到 2 类典型物体,比如周转箱、料盒、挂袋、纸箱。然后明确:
- 抓取是单手还是双手
- 是提举、推送、抽拉,还是取出后再摆正
- 放置时是精准插入、粗放落点,还是需要接触对齐
如果你还没把这一层冻结,就别急着谈“通用操作能力”。第一版能稳定完成 3 个动作脚本,比会讲 30 种未来场景更有价值。
第 2 步,肩肘结构先围绕工作空间和力矩路径设计,而不是围绕“像人”
工业搬运上肢最常见的失败,是可达空间看起来够,但一带负载就姿态别扭、肘部过近奇异位形、腕部力矩爆掉。比较现实的做法是:
- 肩部优先保证前向伸手、侧向避障、近身收纳三个姿态区间
- 肘部优先保证带载时不过早进入折叠极限
- 腕部不要堆过多自由度,先保证末端姿态微调和接触顺应
- 重执行器、减速器、电池尽量往躯干收,不要把热源和惯量全堆在前臂
如果你的任务大多是从胸口以下到肩高之间搬运,很多团队第一版并不需要把腕部做成“全能手腕”,反而更该把肩肘的负载稳定性和维护便利性做好。
第 3 步,夹具先服务于任务闭环,不要默认灵巧手就是终局
对很多仓储和制造搬运任务,第一版末端可以先从更保守的方案起步:
- 平行夹爪,适合尺寸比较稳定的箱体、托盘边缘、小型料盒
- 带导向面的钩挂式夹具,适合袋装、把手、孔位类物体
- 软垫接触面或被动顺应结构,适合存在轻微错位和姿态偏差的放置任务
这里最该盯的是三件事:夹具到底靠摩擦、几何约束还是包络来稳定;TCP 是否容易标定;失手后能不能快速恢复,而不是每次都靠人工复位。
第 4 步,把“轨迹跟踪”和“接触顺应”分成两层,不要混成一套控制
很多人一上来就想用同一套控制器同时解决靠近、抓取、提起、碰撞、插入和放置,结果哪一段都不稳。更靠谱的做法是:
- 非接触段用稳定的关节轨迹跟踪,把大段移动做稳
- 接触前最后几厘米切到更柔和的笛卡尔顺应或阻抗模式
- 接触发生后用力/位混合判断是否继续推进、回退还是请求人工接管
ros2_control 的 joint_trajectory_controller 很适合承担第一层,把关节空间轨迹、时间插值和接口类型先定住。它明确支持 position、velocity、effort 等不同组合,这一点对人形机器人很重要,因为你的肩肘链不一定所有关节都跑同一种接口。
而在接触段,可以参考 libfranka 的 Cartesian impedance 示例里那种“弹簧-阻尼”式顺应思路。它有两个非常值得借鉴的工程判断:第一,顺应参数必须明确区分平移和转动刚度;第二,碰撞阈值不能只为了“别误停”一味调高,否则现场一旦碰到偏置或卡料,代价很大。
第 5 步,规划器负责把动作拆成可验证阶段,不要让一条大轨迹包打一切
MoveIt Task Constructor 的 pick-and-place 教程有个很好的工程价值,它不是把抓取看成一条连续魔法轨迹,而是拆成当前状态、接近、生成抓取姿态、闭合夹具、抬起、移动、放置、撤离这些阶段。对人形机器人上肢搬运同样如此。
如果你把动作拆成阶段,就能分别验证:
- 是接近姿态不好,还是 TCP 对不准
- 是夹具闭合策略有问题,还是抓后提举姿态不稳
- 是货架间隙太小,还是放置时接触顺应太硬
这比反复播放一条“偶尔能成功”的整段轨迹有用得多。
第 6 步,验证顺序一定要分层,不要直接把人形整机拉到现场碰运气
我建议至少按下面顺序走:
- 台架层:单关节发热、减速器间隙、制动和编码器一致性
- 单臂层:空载轨迹、固定负载轨迹、末端重复精度、停电与恢复
- 夹具层:不同尺寸和偏心物体的抓取成功率、滑移率、夹具磨损
- 整机层:上肢动作对躯干姿态和基座稳定性的影响
- 场景层:连续循环、错位物体、半卡住、低电压、热降额、人工接管
只要你跳过前 3 层,直接进整机现场,问题就会缠成一团,很难知道到底是机械、控制、规划还是场景误差在害你。
最容易翻车的地方
- 把 payload 当成任务能力:能提起不代表能连续搬、能放准、能安全恢复。
- 忽略偏心载荷:很多箱体不是重心居中,腕部和前臂热得比你预想快得多。
- 肩肘奇异位形出现在常用工作区:理论可达,实际一靠近货架就变得难控。
- TCP 和夹具接触面长期漂移:换一次夹爪垫、拧一次螺丝,抓取成功率就掉。
- 接触段过硬:提举稳,放置和插入却总是顶住、磨蹭、打滑。
- 恢复路径没设计:失败后不是回退重试,而是整机僵在半空里等人救场。
怎么验证你真的搭对了
不要只看 demo 视频,至少盯这几类指标:
- 同一类物体连续 100 次循环的成功率,而不是最好的一次
- 带载 30 分钟或 1 小时后的关节温升、降额和节拍变化
- TCP 标定后换班再启动,抓取成功率有没有明显漂移
- 轻微错位、半插入、单侧先接触时,系统是平稳修正还是直接硬顶
- 失败后能否在 1 到 2 个动作内自动回退,还是必须人工拆困
- 人工接管是否有明确入口,接管后日志里能否看清失败前因后果
如果这些数据还没有,说明你现在更像是在做“偶发可演示动作”,还不是稳定的搬运上肢系统。
下一步怎么做
- 先选 1 个高频物体,把任务包线写成表,不要继续口头描述。
- 把肩肘常用工作区和带载姿态先用仿真扫一遍,再决定减速器和连杆布局。
- 先用保守夹具把 100 次连续搬运做出来,再决定要不要上更复杂的手部。
- 把“接近, 抓取, 提举, 放置, 撤离, 失败回退”做成阶段化状态机和日志事件。