一句话定位

CVPR 2020 提出的面向部件级(part-level)交互的物理仿真环境:三件套 = ①SAPIEN Engine(基于开源 Nvidia PhysX 4.1 + ROS 控制接口的刚体/关节仿真引擎)②SAPIEN Asset(PartNet-Mobility 数据集——2,346 个可仿真铰接物体、14,068 个可动部件、46 类常见室内物体,带运动轴/运动范围/物理属性标注)③SAPIEN Renderer(OpenGL 4.5 光栅化 + OptiX 光线追踪双管线)。它把仿真粒度从”场景-物体”推进到”场景-物体-部件”,是后来 ManiSkill 系列 benchmark 的底层引擎与资产来源,也是当代铰接物体操作研究的奠基性基础设施。

背景与定位

论文命名的范式是 part-based interactive simulation:家用助理机器人要完成”开冰箱取物""拉抽屉""拧瓶盖”等任务,本质是对铰接物体的可动部件做操作;而 2020 年前的仿真环境要么只做场景导航(habitat、Gibson、MINOS——静态物理、真实照片渲染、几乎无物体交互),要么用游戏引擎做粗粒度状态触发式交互(AI2-THOR、VirtualHome——“open refrigerator”这类高层指令或邻近触发,底层物理被过度简化为直接施力/力矩),要么是全物理引擎但内容单薄的 RL 环境(OpenAI Gym+MuJoCo、DeepMind Control Suite、DoorGym),或商业软件绑定、任务中心化、缺乏多样性的 RLBench(V-REP 后端)。

作者的三点差异化定位(论文 Table 1):

  • 仿真粒度:SAPIEN 是唯一标注为 Scene-Object-Part 级别的环境(其余是 Scene 或 Scene-Object);物理为 Dynamic,渲染 Customizable,接口 Python+C++。
  • 引擎选择:直接构建在开源 Nvidia PhysX API 之上,性能/接口对标 PyBullet,刻意避开游戏引擎的架构负担与 MuJoCo/V-REP 的商业授权壁垒
  • 内容规模:自建 PartNet-Mobility,延续 shapenetpartnet 的 3D 模型血脉,把”可动部件”数量做到同类数据集的数量级之上。

它是同组 partnet(Mo et al. CVPR 2019,细粒度部件分割基准)的自然延伸——把静态部件层级树补上运动学,变成可物理仿真的铰接资产;并成为下游 maniskill 机器人操作 benchmark 的引擎与资产底座(one-line 所述)。

模型架构

SAPIEN 不是一个训练出来的模型,而是一套仿真系统架构,C++ 实现核心 + Python 封装 API,三大组件如下。

1) SAPIEN Engine(物理仿真 + 控制)

  • 物理后端:选用 PhysX 4.1(开源、简洁、面向机器人设计)做刚体运动学与动力学。
  • 三套 body-joint 系统,覆盖不同精度/速度权衡:
    • Kinematic joint system:父子关系的运动学物体,不受小外力影响,适合仿真极重的物体。
    • Dynamic joint system:用 PhysX joint 把刚体拉向约束,适合不需精确控制的复杂物体。
    • PhysX articulation:专为机器人设计,原生支持精确力控、P-D 控制、逆动力学,代价是速度相对慢。
  • ROS 接口,三级抽象:①最底层直接对关节施加力/力矩(类 OpenAI Gym,简单但难迁移真机)②基于 ros_control 的关节空间/笛卡尔空间控制器(力/关节/速度/轨迹控制器,控制器会像真机一样因目标不可达而失败)③基于 MoveIt 的运动规划(无碰撞地把机械臂移到目标 6-DoF 位姿)。
  • 同步/异步双模式:同步模式由 client 控制仿真步进(RL 训练常用,仿真与算法耦合);异步模式让仿真像真实世界一样独立运行,client 通过 TCP/IP 用与真机相同的 sensor/controller 接口通信,仿真时间戳作为真实时钟代理——仿真机器人可复用真机代码,零额外配置在仿真/真机间迁移

2) SAPIEN Asset(内容层)

  • PartNet-Mobility 数据集(详见”数据”)+ 机器人模型 + 场景布局。
  • URDF Loader:每个物体(含 PartNet-Mobility 模型与机器人模型)配套 URDF 文件;为精确接触仿真,用 V-HACD 凸分解把网格拆成凸块;物理属性(摩擦、阻尼、密度)随机化或手工设定到合理范围;机器人模型另提供 C++/Python 逐件搭建 API 以规避 URDF 的繁琐。

3) SAPIEN Renderer(渲染层)

  • 默认光栅化管线:OpenGL 4.5 + GLSL shader,暴露给 client 应用以最大化可定制性;采用 deferred lighting,输出 RGB / albedo / normal / depth / 相机空间语义分割;光照用 Oren-Nayar 漫反射模型 + GGX 镜面模型
  • 可替换为光线追踪:用 Nvidia OptiX 编写的 ray tracer 替换 OpenGL 框架,产出物理精确图像(代价是渲染时间)。
  • 渲染接口完全可定制,甚至允许接入全新渲染管线。

演进说明:论文版渲染基于 OpenGL/OptiX;开源仓库后续(SAPIEN 2.x/3.0)已全面改为 Vulkan 渲染器(SapienRenderer),并加入 GPU 加速的主动立体深度传感器仿真(Zhang et al. 2023 T-RO《Close the Optical Sensing Domain Gap by Physics-Grounded Active Stereo Sensor Simulation》)。本页主体依据 2020 论文,演进细节见”创新点与影响”。

数据

PartNet-Mobility 数据集是 SAPIEN 的核心资产,也是论文最大的一手贡献。

  • 规模2,346 个 3D 铰接物体模型,14,068 个可动部件(movable parts),覆盖 46 类常见室内物体。
  • 来源:模型采自 3D Warehouse(SketchUp),按 shapenet / partnet 的方式组织。
  • 运动类型标注(3 类)
    • hinge(铰链,绕轴旋转,如门)
    • slider(滑轨,沿轴平移,如抽屉)
    • screw(螺旋,hinge+slider 组合,如瓶盖、转椅)
    • hinge/slider 标注运动极限(角度、长度);screw 标注运动极限 + 两个自由度是否耦合。
  • 结构约束:每个 joint 有父子关系,连通刚体+关节的集合称为 articulation,要求关节构成单根树结构(多数物理引擎对树状关节支持好);每个可动部件再赋类别专属语义标签。
  • 标注工具:自研 Web 端 QA 式标注系统,利用 PartNet 层级树自动生成”当前子树是否有相对运动”的穷尽式问题,保证标注者只要正确回答就不会漏标任何可动部件、也不会遇到冗余问题,且输出天然满足树属性、可直接仿真。
  • 与同类铰接数据集对比(论文 Table 2)
数据集类别模型可动部件
Shape2Motion452,4406,762
RPM-Net439491,420
Hu et al.368368
RBO(真实采集)141421
本文(PartNet-Mobility)462,34614,068

作者强调:模型数与 Shape2Motion 相当,但可动部件标注数量远超(14,068 vs 6,762),且带纹理与运动范围限制——这两点是数据集”可仿真”的关键(Shape2Motion 无纹理、无运动限制,无法直接物理仿真)。

  • 感知任务数据划分:全部 2,346 物体 / 46 类,按 75% 训练(1,772 shapes)/ 25% 测试(574 shapes)。每个物体从上半球随机采 20 个视角渲染成 512×512 的 RGB / RGB-D 图。运动属性任务用其中 640 个模型 / 10 类子集(779 扇门 + 529 个抽屉),沿用相同 train/test 划分。

训练方法

论文本身不训练大模型,而是用 SAPIEN 生成数据 / 环境来跑三类基准任务,方法要点如下。

① 可动部件检测(感知):把 SAPIEN 渲染的 RGB/RGB-D 喂给两个现成 SOTA——Mask R-CNN(2D,区域提议网络出 2D 部件掩码)与 PartNet-InsSeg(3D,PointNet++ 提特征 + 点云全景分割)。用相机内参把 2.5D RGB-D 反投影成 3D partial scan 供 PartNet-InsSeg。评测指标为逐部件类别 AP(IoU 阈值 0.5)再对所有部件类别求 mAP。

② 运动属性估计(感知):ResNet-50(输入 5 通道 = RGB-D + 目标部件掩码)与 PointNet++(相机空间 RGB 点云,每图采 10,000 点)联合预测 14 维运动向量 m =(Tr, Tt 旋转/平移概率;pr 旋转轴 pivot;dr 旋转轴方向;dt 平移轴方向;xdoor/xdrawer 门/抽屉的归一化关节位姿)。损失 = 轴对齐余弦损失 + pivot 到真值轴距离损失 + 关节类型 BCE + 门/抽屉位姿 L2,按 hinge/slider 有效性掩码求和。

③ 机器人交互(控制),两大子任务 door-opening / drawer-pulling:

  • 启发式:drawer 用点云 + 真值分割检测抓取位姿再用速度控制器拉到关节极限;door 先抓把手小角度开门,再用 **PBVS(位置视觉伺服)**跟踪并夹住门缘旋转开门。
  • 强化学习:采用 Soft Actor-Critic(SAC),分别在 2/4/8/16 扇门或抽屉上训练、在其余未见物体上测泛化;三种状态表示——raw-exp(全场景部件位置/速度)、mobility-exp(目标部件运动轴 6D 位姿+平均法向+关节角/速度)、visual-exp(前视相机 RGB-D + 目标部件掩码)。多物体并行交互、共享 replay buffer;训练 1M 交互步后在未见物体上每个测 20 episodes。抓取初始位姿由启发式方法生成;奖励 = 目标部件逼近关节极限为正、夹爪脱把为负。

Infra(训练 / 推理工程)

  • 性能剖析(论文 3.4):SAPIEN Engine 在其操作任务上约 5000 Hz;OpenGL 模式渲染约 700 Hz
  • 测试硬件:一台笔记本,Ubuntu 18.04,2.2 GHz Intel i7-8750 CPU + Nvidia GeForce RTX 2070 GPU(单机单卡即可跑,凸显轻量)。
  • 实现:核心 C++(效率)+ Python wrapper(易用);物理 PhysX 4.1;渲染 OpenGL 4.5/GLSL 与 OptiX;控制基于 ros_control 与 MoveIt。
  • 感知/RL 基线的训练 GPU 数量、GPU-hours、并行/精度:论文未披露(重点是仿真器本身而非训练规模)。
  • 部署形态:README 显示需 Linux + NVIDIA/AMD/Intel GPU,PyPI pip install sapien 安装;支持无显示器服务器离屏渲染(仅需 libegl1/libxext6)与 Xvfb+VNC 虚拟桌面。

评测 benchmark

全部结果来自论文一手表格。

可动部件检测(Table 4,AP% @IoU 0.5,全类 mAP)

算法输入全类 mAP
Mask R-CNN2D RGB53.0
Mask R-CNN2D RGB-D52.8
PartNet-InsSegPC XYZ36.1
PartNet-InsSegPC XYZRGB37.1

结论:两法在小部件(table wheel/caster、button、switch、handle)上都很差(常为 0),在尺寸均衡的类(fan、faucet)上较好——而小部件恰是交互的关键,留待后续算法。

运动属性估计(Table 5)

输入/算法H acc.S acc.Ho err(m)Ha err(°)Sa err(°)door err(°)drawer err(m)
RGB-D / ResNet5095.5%95.5%0.16818.96.3514.40.0645
RGB-pc / PointNet++95.4%95.5%0.19518.57.7520.80.0918

结论:运动类型分类精度都很高;slider 轴预测误差低于 hinge;ResNet50 整体优于 PointNet++(作者归因于参数量更大,但直觉上 3D 信息本应更易在 3D 数据上预测,指出未来应改进 3D 轴预测)。

机器人交互——启发式:drawer-pulling 用真值视觉信息达 95.3% 成功率;door-opening 用 PBVS 达 81.8% 成功率

机器人交互——RL(SAC,Table 6;门=最终角度,抽屉=成功率)

表示door test(2/4/8/16)drawer test(2/4/8/16)
raw-exp14.7 / 18.7 / 21.2 / 27.30.61 / 0.63 / 0.66 / 0.66
mobility-exp22.9 / 27.3 / 27.5 / 32.80.65 / 0.65 / 0.69 / 0.68
visual-exp21.7 / 24.5 / 28.1 / 29.60.59 / 0.60 / 0.61 / 0.60

结论:mobility-exp 表示整体最优;门任务上 RL 倾向过拟合训练物体(训练集越大训练性能越降,但测试泛化随训练物体增多而改善);抽屉相对稳定(抽屉更易拉、每步模式一致);总体 RL 在这些任务上仍不如启发式,泛化与效率是未来方向。

横向对比(Table 1):Habitat(Scene/静态+/真实照片/导航)、AI2-THOR(Scene-Object/Unity/导航+)、OpenAI Gym-MuJoCo(Scene-Object/OpenGL 固定/学习-机器人)、RLBench(Scene-Object/V-REP)、SAPIEN(Scene-Object-Part / 可定制渲染 / 学习-视觉-机器人 / Python+C++)。

创新点与影响

  • 把仿真粒度推到部件级:首个大规模支持”场景-物体-部件”三级铰接物体物理交互的开源环境,让”检测部件→估计运动学→操作部件”的完整机器人视觉-交互闭环成为可跑的研究对象。
  • PartNet-Mobility 成为事实标准资产:2,346 模型 / 14,068 可动部件 / 46 类、带纹理与运动限制的可仿真铰接数据集,被后续大量铰接操作、关节参数估计、跨物体泛化工作沿用。
  • 开源 PhysX + ROS 路线:避开游戏引擎与商业软件壁垒,单机单卡 5000 Hz 引擎 / 700 Hz 渲染,同步/异步双模式使仿真与真机代码可无缝互换。
  • 后续演进为 Embodied AI 平台:开源仓库(GitHub 794★,Apache License)已迭代到 SAPIEN 3.0——重构为实体-组件系统(ECS)、支持 PhysX 5 GPU 仿真、渲染改 Vulkan(SapienRenderer) 并支持光追、加入 GPU 加速主动立体深度传感器仿真maniskill 机器人学习 benchmark 直接构建其上,用其 GPU 并行做大规模 RL 环境。
  • 作者自陈局限:①感知算法对小部件(按钮/开关/把手)检测严重不足;②RL 在门/抽屉开启上泛化差、门任务易过拟合、整体不及启发式;③(隐含)论文版仅刚体+关节,不含可形变/软体/流体仿真,渲染光追以时间为代价。

原始链接

一手源存档(sources/)

  • sapien—github-readme — GitHub readme.md 快照(含 1.0→3.0 完整 Change Log、引用信息)
  • arXiv 原文 PDF(2003.08515v1,含正文 + 补充材料标注流程/全类分割结果)不入 git,见上方 arXiv 链接