logo Mr.Robota 具身智能学习手册 EN
第十五章:Challenge竞赛

2. 比赛问题清单与解决方案

这份清单把我们在理解、调试和发布过程中遇到的典型问题整理成可复用的排查路径。

2.1 把 Task B 误认为“只捡垃圾”

现象:一开始把任务理解为找到物体坐标,然后导航到目标点。

根因:把导航子问题当成了任务闭环,没有区分“发现目标”“靠近目标”“抓取成功”和“放置成功”。

解决:采用显式阶段状态机:SEARCH -> LOCALIZE -> APPROACH -> REACH -> CLOSE -> LIFT_VERIFY -> CARRY -> PLACE_VERIFY。每个阶段都记录输入、动作、退出条件和失败原因。

2.2 以为仿真中存在可直接读取的全局坐标

现象:使用环境中的对象位姿、对象列表或真值坐标来指导导航。

根因:仿真程序内部确实可能有这些状态,但它们不等于正式策略可以使用的 observation。

解决:把真值信息分成两条管线:

  • debug_only:允许输出真值距离、对象高度、夹爪状态,用于定位故障。
  • policy_input:只允许官方 observation 中的图像、深度、LiDAR 和 proprioception。

任何进入 policy 的字段都在 configs/observation_contract.yaml 中登记。正式测试时关闭真值读取,并用脱敏 observation 做接口检查。

2.3 加了环境相机后,结果看起来更清楚

现象:第三方视角可以看到全场,便于判断机器人有没有走偏。

根因:环境相机是可视化工具,不是官方机器人传感器。把它加入 observation 会改变任务边界。

解决:保留环境相机作为本地调试视频的第三条轨道,但不把它注册到策略 observation,不把其图像写入训练数据,不用它生成运行时目标坐标。详细边界见 环境相机与调试视角。

2.4 接近目标后分数很高,但物体没有被带走

现象:局部距离、触碰或接近代理指标变好,视频里机器人也碰到了目标;重启或移动到垃圾桶后物体并没有随夹爪移动。

根因:接触代理分数不等于抓取成功。可能只是机身、腿、夹爪基座或地面与物体发生接触。

解决:加入三个独立确认:

  1. 夹爪闭合后,物体与末端的相对距离在一段时间内保持稳定。
  2. 提升末端或基座后,物体高度同步增加,而不是留在地面。
  3. 机器人撤离目标区域后,物体仍跟随夹爪,直到垃圾桶释放。

评估日志同时保存接触、夹持、提起和放置状态,禁止只报一个距离分数。

2.5 机械臂动作能执行,但姿态不稳定

现象:腿部行走正常,机械臂出现抖动、末端偏置、夹爪扫过目标或动作维度错位。

根因:不同项目之间的关节顺序、动作缩放、零位、坐标系和末端定义不能直接复用。

解决:先做动作接口审计,再做单关节和末端校准:

  • 从官方环境读取 action space 的顺序和范围。
  • 逐个关节施加小幅动作,确认日志中的关节响应。
  • 在基座不动时测试末端位置变化。
  • 固定腿部,只校准机械臂与夹爪,再接入全身动作。
  • 将目标深度从相机坐标变换到机械臂基座坐标,并记录外参版本。

2.6 GPU 或 PhysX 报错后误判策略

现象:多个仿真进程并行运行时出现 PhysX kernel、CUDA context 或 early-state 日志;随后把这次结果当作策略失败。

根因:资源争用、残留进程、显存不足和策略行为可能同时出现,单凭最后几行日志不能归因。

解决:每次实验记录 GPU、进程、环境版本、seed、runner 和输出目录;先做单进程 smoke test,再扩大并行度。遇到异常时只处理本次实验拥有的进程,不进行无差别清理。将“环境启动失败”和“策略执行失败”分开计数。

2.7 外部项目能否直接迁移

结论:迁移算法结构,不迁移隐含假设。

可以借鉴:视觉搜索、360 度扫描、分层导航、末端相机锁定、全身 IK、抓取后状态机、结果日志。

不能直接复制:机器人 URDF/USD、关节顺序、相机内外参、动作维度、目标类别、地图坐标、奖励阈值和评测器字段。

每一项迁移都要补一张“原项目接口到 Task B 接口”的映射表,并通过传感器边界检查。