一句话定位
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,延续 shapenet 与 partnet 的 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):
| 数据集 | 类别 | 模型 | 可动部件 |
|---|---|---|---|
| Shape2Motion | 45 | 2,440 | 6,762 |
| RPM-Net | 43 | 949 | 1,420 |
| Hu et al. | — | 368 | 368 |
| RBO(真实采集) | 14 | 14 | 21 |
| 本文(PartNet-Mobility) | 46 | 2,346 | 14,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-CNN | 2D RGB | 53.0 |
| Mask R-CNN | 2D RGB-D | 52.8 |
| PartNet-InsSeg | PC XYZ | 36.1 |
| PartNet-InsSeg | PC XYZRGB | 37.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 / ResNet50 | 95.5% | 95.5% | 0.168 | 18.9 | 6.35 | 14.4 | 0.0645 |
| RGB-pc / PointNet++ | 95.4% | 95.5% | 0.195 | 18.5 | 7.75 | 20.8 | 0.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-exp | 14.7 / 18.7 / 21.2 / 27.3 | 0.61 / 0.63 / 0.66 / 0.66 |
| mobility-exp | 22.9 / 27.3 / 27.5 / 32.8 | 0.65 / 0.65 / 0.69 / 0.68 |
| visual-exp | 21.7 / 24.5 / 28.1 / 29.6 | 0.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 在门/抽屉开启上泛化差、门任务易过拟合、整体不及启发式;③(隐含)论文版仅刚体+关节,不含可形变/软体/流体仿真,渲染光追以时间为代价。
原始链接
- arXiv 摘要:https://arxiv.org/abs/2003.08515
- arXiv PDF:https://arxiv.org/pdf/2003.08515
- 项目主页:https://sapien.ucsd.edu/
- GitHub(haosulab/SAPIEN):https://github.com/haosulab/SAPIEN
- 文档:https://sapien-sim.github.io/docs/
- PyPI:https://pypi.org/project/sapien/
- 下游 benchmark ManiSkill:https://github.com/haosulab/ManiSkill
一手源存档(sources/)
- sapien—github-readme — GitHub
readme.md快照(含 1.0→3.0 完整 Change Log、引用信息) - arXiv 原文 PDF(2003.08515v1,含正文 + 补充材料标注流程/全类分割结果)不入 git,见上方 arXiv 链接