智元机器人 具身智能一面:数据管线与 Sim2Real
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 请你先做一个自我介绍,重点讲一下你在具身智能或者机器人方向上做过的最深的一个项目。
- 你这个项目里机器人本体是什么?自由度多少?用的什么传感器?
- 你项目里的数据是怎么采集的?遥操、动捕还是仿真生成?
- 采集频率多少?数据量多大?存储格式是什么?
- 数据怎么标注的?按时间轴还是按帧粒度?标注成本多高?
- 如果标注有噪声,你怎么清洗?有没有自动化质检?
- 你训练用的什么模型?输入输出分别是什么?
- 模型参数量多大?推理跑在端侧还是云端?延迟多少?
- 如果让你做模仿学习,你选 ACT 还是 Diffusion Policy?为什么?
- 这两种方法在数据效率上有什么区别?你实际对比过吗?
- 如果演示数据只有几十条,怎么防止过拟合?
- 数据增强你做过哪些?对机器人任务有效吗?
- 你项目里的动作空间是关节角还是末端位姿?为什么这么选?
- 如果末端位姿和关节角互相转换,会遇到什么问题?
- 运动学逆解多解的时候你怎么处理?选哪个解?
- 如果目标不可达,你怎么让机械臂优雅地失败而不是硬撞?
- 你项目里的规划器用的什么?RRT 还是优化方法?
- 规划频率多少?和控制器怎么配合?
- 如果环境中出现动态障碍物,你怎么重新规划?
- 你怎么做碰撞检测?用的什么库?精度怎么样?
- 仿真环境用的什么?MuJoCo、Isaac 还是 PyBullet?
- Sim2Real 你做过哪些工作?域随机化做了哪些维度?
- 如果仿真里效果很好但真机上很差,你怎么排查?
- 你觉得 Sim2Real 最大的 gap 在哪里?怎么缓解?
- 你怎么评估一个机器人策略的好坏?成功率还是别的指标?
- 评测集怎么构建?多少条?覆盖哪些场景?
- 如果让你从零搭建一个具身智能数据 pipeline,你会怎么做?
- 数据、训练、部署三个阶段你觉得哪个最难?为什么?
- 你怎么控制训练成本?GPU 用了多少?训练多久?
- 你怎么跟进具身智能领域的最新进展?最近看了什么论文?
- 反问:团队现在做的是哪个方向的机器人?
- 手撕:实现一个简单的正运动学函数,给定 DH 参数和关节角,求末端位姿。
《参考解析》
项目叙述的骨架:本体、传感器与数据闭环。 具身智能面试的入口题几乎都是「讲一个最深的项目」,而面试官真正在听的是三件事:你是否真的动过硬件、数据从哪来、以及你如何判断做得好不好。所以开场要把本体讲清(自由度配置、末端执行器、控制接口)、传感器清单(相机型号与内外参、有无力/触觉、IMU 频率)、以及控制栈的分层(感知、规划、控制各自频率)。数据采集方式决定了后面很多结论的适用边界:遥操作(主从臂或 VR/手柄)成本高但质量好、动作与本体强耦合;动捕(光学或惯性)精度高但需要标定且易受遮挡;仿真数据量大但分布有偏。存储格式建议提一句实践:以「轨迹(episode)+ 时间同步的观测-动作对 + 元数据(任务描述、成功标记、采集条件)」组织,常见是 HDF5 / MCAP / ROS bag 转换而来,注意多传感器时间戳对齐与丢帧处理——这比格式本身更重要,因为时间不同步是模仿学习效果差的常见隐性原因。
数据标注、噪声清洗与自动化质检。 机器人数据里的「标注」多数不是人工框选,而是成功/失败判定、阶段切分(接近、抓取、放置)、以及少量关键帧标注;按帧粒度标成本极高,通常按时间段或事件标,再用平滑与插值落到帧上。噪声来源主要有四类:传感器噪声(深度空洞、丢帧)、人工演示抖动(末端轨迹抖)、时间戳漂移、以及标注错误(把失败演示标成成功)。清洗要自动化优先:用物理一致性检查(关节速度/加速度是否超限、末端是否穿透物体、力传感器是否出现不符合接触的时刻)、统计离群检测(轨迹长度、时长、平滑度的分位数过滤)、以及交叉验证(同一任务多次演示的方差过大就人工复核)。质检流水线建议做成可复现的脚本化步骤并记录每一步过滤掉了多少数据——被过滤掉的比例本身就是数据质量的指标。另外要留一份「难例集」,把模型失败的 episode 留下来专门用于诊断,而不是一律清掉。
模型选型与端云部署的取舍。 ACT(Action Chunking with Transformers)与 Diffusion Policy 的差别可以按「生成建模方式 + 推理代价 + 数据效率」来讲。ACT 一次预测一段动作(chunk)以缓解时序上的多峰与抖动问题,主干是 CVAE + Transformer,推理是单次前向,延迟低、易上端侧;Diffusion Policy 用扩散过程建模动作分布,对多模态演示(同一场景多种合理动作)表达能力更强、通常更稳,但推理需要多步去噪,延迟高一个量级。数据效率上,演示很少(几十条)时 ACT 往往更快收敛,因为它对分布的建模更粗、参数化更直接;Diffusion 在数据量中等以上、任务存在多模态时优势明显。推理放在端侧还是云端取决于三个约束:控制频率要求(高于几十赫兹的闭环不适合跨网络)、可靠性(断网要能用)、以及算力成本;务实做法是视觉编码与策略主体下沉到端侧(用 TensorRT/ONNX 量化加速),重感知或大模型部分留在边缘服务器,并明确降级策略。参数量与延迟要给出实测口径:模型规模、输入分辨率、是否使用动作块、单次推理耗时与端到端控制周期。
小样本防过拟合与数据增强。 几十条演示下防过拟合的手段按性价比排:先做数据侧(时间对齐修正、去除静止冗余帧、动作块化让有效监督变多、把长任务切分成可复用的子技能以便跨任务共享数据),再动模型(缩小模型、视觉编码器冻结或只微调后几层、加入动作平滑与速度约束的正则、用预训练视觉主干),最后才是增强。机器人任务里有效的增强有:视觉侧的颜色/光照/背景替换(属于域随机化,对鲁棒性帮助最大)、相机位姿的小扰动(模拟标定误差)、以及动作侧的时间缩放与小幅度空间扰动(模拟人类演示的速度与位置差异)。要注意哪些增强会破坏物理一致性:镜像翻转在左右不对称任务上是错的,大幅度动作扰动可能让轨迹穿模,时间反向一般不成立。为了避免自欺,验证要按「未见过物体/未见过位置」划分留出集,而不是随机切分同一批轨迹的相邻帧——后者会因帧间高度相关而严重高估效果。
动作空间、逆解多解与不可达处理。 关节角与末端位姿各有代价:关节角空间直接对应控制器接口、不存在奇异与多解问题,但泛化到不同本体困难、且难以表达「在笛卡尔空间的意图」;末端位姿空间更接近任务语义、跨本体可迁移,但需要每步 IK,会遇到奇异位形、关节限位与多解。实践里常见的折中是「末端位姿作为策略输出、IK 作为确定性后处理」,并保持输出频率与 IK 求解频率匹配。IK 多解的选择准则要有明确优先级:优先关节限位内侧、优先离上一帧最近(保证轨迹连续、避免跳变)、避开奇异区域、必要时再按能耗或避障打分排序;不要每帧独立求解而不做连续性约束,那会表现为机械臂抖动。目标不可达时的「优雅失败」是工程细节:先做可达性判断(工作空间边界、关节限位、碰撞占位),不可达就返回明确的失败原因与最近可达位姿,用轨迹级的速度规划减速停止,而不是让位置控制器持续输出大误差把力顶上去;末端还可配合力控或阻抗模式限制接触力。
规划、碰撞检测与动态障碍。 规划器选择看场景:高自由度、障碍复杂、离线或低频重规划用采样式(RRT/RRT*、BiTRRT);需要平滑与动力学可行、且环境可参数化时用优化方法(CHOMP、TrajOpt、或基于 MPC 的局部规划)。工程上更常见的是分层:全局用采样规划给一条粗略路径,局部用优化或 MPC 做跟踪与避障。规划频率要和控制器对齐——通常控制器几百赫兹到一千赫兹,规划几赫兹到几十赫兹,中间靠轨迹插值与时间参数化衔接,绝不能把低频规划结果直接喂给高频位置环而不做平滑。碰撞检测用 FCL(或 MoveIt 的碰撞场景、Isaac/MuJoCo 自带的几何查询),精度取决于几何表示:包围盒快但保守、凸包折中、网格或 SDF 更准但更慢;实践中用「粗筛(AABB/球)+ 精查(网格/SDF)」的两级结构。动态障碍的处理要点是:维护一个短时预测(恒速或简单卡尔曼)并对未来一段时间的时空体做检测、用滚动时域重规划而不是每次从头规划、并且设置重规划触发条件(剩余时间不足、最小距离低于阈值),避免高频重规划导致的路径震荡。
Sim2Real 的 gap 与真机差的排查。 排查顺序建议从最可能、最容易验证的开始:①执行层——控制延迟、指令下发的时延与丢包、控制器参数与仿真不一致(PD 增益、摩擦补偿);②标定层——相机内外参、手眼标定、关节零位偏差;③模型层——质量惯量参数、电机模型、时延建模;④环境层——光照、材质摩擦、被控物体质量分布。域随机化要随机在「会影响策略决策、且真机确实有分布」的维度上:视觉(光照、纹理、背景、相机位姿与噪声)、物理(摩擦、质量、阻尼、执行器增益与延迟)、以及几何(物体尺寸与位姿)。随机的关键不是范围越大越好,而是覆盖真机的真实分布并保留任务可解性;过度随机会让策略变保守、成功率下降。最大的 gap 我的判断是「接触与延迟」:接触力学的建模误差(软硬接触、摩擦锥、形变)和系统时延很难在仿真里精确复现,而抓取、插入这类任务恰恰对它们极其敏感。缓解方向是混合方案——用真机少量数据做残差学习或在线自适应、把力/触觉反馈引入闭环、以及用实机在环的标定与系统辨识减小参数误差。
策略评估、数据管线与成本控制。 评估不能只看平均成功率:要按任务难度分层、给出成功判据(是否真的完成任务,而不是末端靠近)、统计重复次数(同一初始条件多次试验的方差)、以及鲁棒性维度(初始位姿扰动、光照变化、物体替换)。评测集按「已见物体已见位姿、已见物体新位姿、新物体、干扰场景」四层构建,每层若干条,这样才能定位泛化能力断在哪一层。从零搭数据管线,我会按「采集 → 时间同步与清洗 → 切分与标注 → 版本化存储 → 训练消费 → 失败回流」六段设计:关键是版本化(数据、代码、模型三者版本绑定,任何一次结果都能复现)和回流(真机失败样本自动进难例库并定期重训)。数据、训练、部署三个阶段里我倾向认为「部署」最难,因为它是唯一无法在离线环境里完全验证的一环,性能问题往往表现为环境相关的不确定性,排查成本最高;数据阶段最容易被低估,但它决定了效果上限。成本控制上,训练侧用混合精度与小规模先验证再放大、按需租卡而不是常驻、把视觉主干冻结减少训练量;推理侧用量化与批处理,同时明确「训练用了多少卡、多久、达到什么指标」的口径,避免只报总时长。
跟进领域进展与手撕正运动学。 跟进论文要有自己的筛选标准,比较有说服力的回答是「我关注哪几条线、每条的判断是什么」:例如通用操作策略的数据规模化(跨本体数据、动作空间统一)、世界模型与生成式仿真(用视频生成做数据增强与预测)、以及强化学习与模仿学习的结合(残差 RL 提升精细操作)。同时要说清从论文到落地的转化路径:先看是否开源、复现成本、在自有任务上的收益,避免只停在「我读过」。手撕正运动学这道题考的是 DH 参数的用法:标准 DH 下第 i 个连杆的变换是 Rz(θi)·Tz(di)·Tx(ai)·Rx(αi),把各连杆矩阵按顺序相乘得到基座到末端的齐次变换,取前三行三列为姿态(旋转矩阵,需要时再转欧拉角或四元数)、第四列为位置。实现细节要主动交代:是否包含基座与末端工具变换、关节类型(转动/移动)如何分支、角度单位与数值稳定性(小角度近似不要自己乱用);如果面试官追问结果异常,第一反应应该是检查 DH 表约定(标准 DH 与改进 DH 的坐标系定义不同)与角度单位,这是最常见的错因。