引言

想象一下,一个机械臂在繁忙的工厂车间里快速移动。它需要从料箱中抓取零件并将其放置在传送带上,同时不能撞到料箱壁、传送带或它自己。为了规划这一动作,机器人依赖于碰撞检测器。

传统的运动规划器通过在离散的时间点对机器人的轨迹进行采样来工作——就像翻页动画书一样。它们会检查: “机器人在时间 \(t=0\) 时是否撞到了东西?在 \(t=1\) 时呢?”如果这两个时间点都是安全的,规划器就会假设路径是安全的。但是,在 \(t=0.5\) 时会发生什么呢?

如果机器人移动得很快或者障碍物很薄,机器人可能会在这两个时间戳之间“瞬间移动”穿过障碍物。这种现象被称为隧道效应误差 (tunneling error)

图 1: (a) 离散碰撞检测中的隧道效应误差示意图。仅沿机器人轨迹采样有限的航点可能会遗漏航点之间发生的碰撞 (由虚线圆圈高亮显示) 。(b) 扫描体碰撞检测 (SVCD)。SVCD 评估物体沿给定轨迹的扫描体 (粉色) 与障碍物之间的碰撞。

如图 1 所示,标准的离散碰撞检测 (a) 完全漏掉了碰撞。解决方案是扫描体碰撞检测 (Swept Volume Collision Detection, SVCD) 。 SVCD 不是检查点,而是检查机器人移动通过空间时占据的整个连续体积 (b)。

虽然 SVCD 在数学上更安全,但在历史上其计算成本非常高。在这篇文章中,我们将深入探讨 NeuralSVCD , 这是在 CoRL 2025 上提出的一种新方法,它使用神经网络来解决这个问题。通过学习像人类一样观察形状的方式: 关注局部细节和特定时刻,它成功地做到了比传统几何方法更快、更准确。

背景: 效率与准确性的权衡

为什么检查扫描体如此困难?核心问题在于我们如何表示 3D 形状以及我们如何计算它们之间的交集。

目前,机器人工程师基本上不得不在三种主要方法中做出选择:

  1. 凸分解 (精确但缓慢) : 你可以将复杂的物体分解成许多小的凸形状 (就像把礼物包在许多小盒子里) 。然后使用一种名为 GJK 的算法来检查这些盒子是否碰撞。这很准确,但 GJK 是一种串行算法——它涉及大量的“如果-那么”逻辑 (分支) ,这意味着它在喜欢并行处理的现代 GPU 上运行效果不佳。
  2. 球体近似 (快速但不准确) : 你可以用数百个球体填充物体。检查两个球体是否接触非常快,并且易于在 GPU 上并行化。然而,球体很笨拙。要表示锐利的边缘或薄板,你需要数千个微小的球体,否则你最终会得到一个过于“臃肿”的形状,导致在狭窄空间中出现虚假碰撞。
  3. 隐式函数 (准确但缓慢) : 你可以将物体表示为数学函数。虽然这支持任意轨迹,但要计算最深穿透的确切时刻,需要为数千个表面点解决复杂的优化问题。

图 2: (a) SVCD 问题定义。(b-d) 不同 SVCD 算法中使用的几何表示比较。

图 2 直观地展示了这些差异。凸包方法 (b) 严谨但计算量大。基于球体的方法 (c) 速度快但失去了几何保真度。NeuralSVCD 的作者提出了第四种选择 (d): 一种基于学习的方法,通过仅关注物体和轨迹的相关部分来识别“最大碰撞概率”。

核心直觉: 形状和时间局部性

NeuralSVCD 背后的研究人员意识到,要使神经网络有效地完成这项任务,他们不能只是将整个 3D 网格输入进去并祈祷好运。那将需要海量的数据,并且无法很好地泛化到新物体上。

相反,他们利用了两个关键的洞察: 形状局部性 (Shape Locality)时间局部性 (Temporal Locality)

形状局部性

碰撞检测器需要知道它正在看一个“茶壶”吗?并不需要。它只需要知道茶壶把手的特定曲线正在靠近桌子边缘。局部几何特征——角、边、平面——是通用的。未来派机器人上的锐角在几何上看起来与简单盒子上的锐角相似。

通过关注物体的局部斑块而不是全局形状,模型可以学会预测它从未见过的物体的碰撞,仅仅是因为它识别出了局部的表面特征。

时间局部性

同样,碰撞通常发生在瞬间。机器人五秒前的轨迹与它现在是否会坠毁无关。碰撞状态由物体最接近的轨迹的极短片段决定。

图 图 3: (左 - 形状局部性) 两对不同的物体具有完全不同的全局形状,但当我们关注圈出的接触区域时,它们具有非常相似的形状。 (右 - 时间局部性) 两条不同的物体轨迹共享相同的碰撞时刻,由矩形标记。

图 3 完美地说明了这一点。在左侧,两个完全不同的物体共享一个几乎相同的“接触区域”。在右侧,两条不同的轨迹共享相同的关键撞击时刻。NeuralSVCD 正是为了利用这些相似性而构建的。

方法: 深入 NeuralSVCD

NeuralSVCD 是一种编码器-解码器架构,旨在预测移动物体的扫描体与静态障碍物之间的碰撞概率。让我们逐步分解这个架构。

图 4: SVCD 流程概览。在编码期间 (顶部) ,标准网格 \\(\\mathrm { ( m e s h _ { m o v } }\\) 和 \\(( \\mathrm { { m e s h } _ { \\mathrm { { s t a t i c } } } ) }\\) 使用神经编码器转换为分布式潜在表示 (分别为 \\(\\mathcal { Z } _ { \\mathrm { m o v } }\\) 和 \\(\\mathcal { Z } _ { \\mathrm { s t a t i c } }\\)) 。每个表示 \\(\\mathcal { Z }\\) 由 \\(N\\) 个代表点 \\(( p _ { i } ^ { \\mathrm { s t a t i c } }\\) 和 \\(p _ { j } ^ { \\mathrm { m o v } } .\\) ,相关的半径为 \\(( r _ { i } ^ { s t a t i c }\\) 和 \\(r _ { j } ^ { m o v }\\) ) 的包围球,以及局部潜在向量 \\(( z _ { i } ^ { \\mathrm { s t a t i c } }\\) 和 \\(z _ { j } ^ { \\mathrm { m o v } }\\) ) 组成。在推理期间 (底部) ,给定潜在表示 \\({ \\mathcal { Z } } _ { \\mathrm { m o v } }\\) 和 \\(\\mathcal { Z } _ { \\mathrm { s t a t i c } }\\) 以及轨迹 \\(\\tau ( t ) : \\mathsf { [ 0 , 1 ] } \\to S E ( 3 )\\) (左下) ,我们最初评估所有可能的对 \\(\\{ ( i , \\bar { \\ j } ) \\ | \\ i , j \\in [ \\bar { 1 } , N ] \\}\\)。在宽阶段 (中间) ,我们使用包围球快速识别相交对 \\(( i , j )\\) 及其最大球体重叠时间 \\(t _ { i j } ^ { \\dagger }\\)。局部轨迹被定义为在 \\(\\xi ^ { t _ { i j } ^ { \\dag } } \\in \\mathbb { R } ^ { 6 }\\) 处的线性化运动,通过计算其一阶线性近似获得 (见黑框) 。在窄阶段 (右侧) ,对于所有识别出的碰撞候选对和时间 \\(( i , j , t _ { i j } ^ { \\dagger } )\\),神经 SVCD 解码器 \\(f _ { S V C D }\\) 基于输入 \\(( p _ { i } ^ { \\mathrm { s t a t i c } } , z _ { i } ^ { \\mathrm { s t a t i c } } ) , \\xi ^ { t ^ { \\dagger } } , \\tau ( t ^ { \\dagger } )\\) 和 \\(( p _ { j } ^ { \\mathrm { m o v } } , z _ { j } ^ { \\mathrm { m o v } } )\\) 细化碰撞预测。刚体的最终碰撞结果通过对所有识别出的对使用最大池化来聚合。

1. 编码器: 分布式潜在表示

NeuralSVCD 不是将整个物体压缩成一个向量,而是创建一个分布式表示

  1. 它使用最远点采样 (FPS) 在物体表面采样 \(N\) 个代表点 (确保均匀覆盖) 。
  2. 它在每个点周围定义一个“斑块” (使用半径 \(r\) 的包围球) 。
  3. 它在那个斑块的局部几何结构上运行一个神经编码器,以产生一个潜在向量 \(z\)

可以把这想象成在物体表面覆盖了智能传感器。每个传感器 (\(p_i\)) 知道它的位置、它的覆盖半径 (\(r_i\)),并拥有一个描述其“下方”表面形状的压缩代码 (\(z_i\))。

2. 宽阶段 (Broad Phase) : 用球体过滤

在检查移动物体和静态物体之间的碰撞时,理论上我们需要检查机器人的每一个“传感器”与障碍物的每一个“传感器”。那是 \(N^2\) 次检查!用一个沉重的神经网络来做这件事太慢了。

为了解决这个问题,作者使用了宽阶段 (Broad Phase) 过滤器。由于每个潜在点 \(p\) 都有一个半径 \(r\),他们首先简单地将物体视为球体的集合。他们计算这些球体的扫描体是否相交以及何时相交。

他们通过求解以下优化问题来找到两个球体最接近的时间 \(t^\dagger\):

公式

如果在这个最佳时间的球体间距离大于它们半径之和,我们就确定它们不会碰撞。我们可以立即丢弃这一对。这只留下了少数可能发生碰撞的候选对。

3. 窄阶段 (Narrow Phase) : 神经细化

现在我们有一对候选的局部斑块 (一个静态,一个移动) 和一个它们最接近的特定时间 \(t^\dagger\)。但球体是粗略的近似——仅仅因为球体重叠并不意味着实际表面发生了碰撞。

这就是神经网络( SVCD 解码器 )接手的地方。

  1. 线性化: 系统获取轨迹 \(\tau\) 并将其近似为线性运动 (恒定速度的直线) ,仅针对 \(t^\dagger\) 周围的瞬间。
  2. 解码器输入: 解码器接收两个潜在向量 (\(z_{static}, z_{mov}\))、它们的位置以及线性化的运动。
  3. 预测: 网络输出碰撞的概率。

实现不变性

这里的一个主要挑战是不变性 (Invariance) 。 如果你将整个世界旋转 90 度,碰撞结果不应该改变。然而,原始坐标完全变了。为了帮助网络泛化,作者对输入进行了预处理,使它们相对于被检查的点对。

图 8: 为实现不变性而进行预处理的示意图。情况 1 和 2 中两个物体之间的相对变换相同,但它们的全局变换不同。如果我们把这两个物体看作一个单一的复合刚体,我们可以指定坐标系 \\(\\{ \\phi ( x _ { 1 } ) \\}\\) 和 \\(\\{ \\phi ( x _ { 2 } ) \\}\\),其原点位于两个物体中心的中间点,方向由连接中心的线确定。然后我们对这些坐标系应用 \\(\\phi ( x _ { 1 } ) ^ { - \\bar { 1 } }\\) 和 \\(\\phi ( x _ { 2 } ) ^ { - 1 }\\),使它们位于世界坐标系的原点,并且方向与世界坐标系对齐,如底部所示。这一预处理步骤确保了无论物体的全局姿态如何,输入都是一致的。

如图 8 所示,系统基于这两个物体创建了一个标准参考系。无论碰撞发生在天花板还是地板上,神经网络“看到”的相对几何形状都是一样的。这在数学上通过以下预处理函数 \(\Phi(x)\) 来处理:

公式

这确保了网络纯粹关注碰撞的几何形状,而不是机器人的全局位置。

实验与结果

作者将 NeuralSVCD 集成到了 cuRobo (一种最先进的 GPU 加速运动规划器) 中,并将其与标准方法进行了比较。

准确性与效率

碰撞检测的“圣杯”是位于图表的左上角: 高准确性和极低的计算时间。

图 5: 我们的 SVCD 与其他基线方法在准确性与效率权衡方面的对比图,(左) 域内物体集,(右) 域外物体集。

图 5 中的结果令人震惊。

  • 蓝线 (Ours - Continuous) : NeuralSVCD 几乎立即 (大约 \(10^{-4}\) 秒) 飙升至接近 100% 的准确率。
  • 粉色/紫色线 (Convex Cell) : 这些方法很准确,但明显更慢 (更靠右) 。
  • 绿色/橙色线 (Sphere) : 这些方法相当快,但难以达到高准确率,因为球体无法捕捉细节 (它们在较低水平处停滞) 。

至关重要的是,右边的图表显示了分布外 (OOD) 物体——网络在训练期间从未见过的形状。NeuralSVCD 保持了它的性能,证明了“形状局部性”假设是有效的: 因为它学习了局部特征 (角、边) ,它可以轻松处理新的全局形状。

现实世界机器人任务

为了证明这不仅仅是模拟技巧,研究人员在图 7 所示的复杂规划任务上测试了该系统。

图 7: 我们提出的算法解决的三项机器人任务示意图。(a) 放入餐盘: UR5 机器人精确地将餐盘插入沥水架。(b) 孔轴装配: ARMADA [25],一个 12 自由度的双臂机械手,一只手臂拿着销钉,另一只手臂拿着插槽,精确地将销钉组装到指定的插槽中。(c) 矿道移动操作: 移动机械手将镐头运送到目标位置,小心地避开横梁和矿车等障碍物。每项任务都凸显了精确、无碰撞运动规划的重要性。

  1. 放入餐盘 (a): 这需要极高的精度。基于球体的方法通常在这里失败,因为为了适应架子槽之间的空间,球体必须非常小,需要数千个球体,这会扼杀性能。
  2. 孔轴装配 (b): 一项需要紧密协调的双臂任务。
  3. 矿道 (c): 在杂乱环境中的导航任务。

运动规划器最小化轨迹成本函数 \(C_{traj}\),其中包括平滑度项和碰撞成本项:

公式

通过使用 NeuralSVCD 计算 \(C_{SVCD}\) 项,规划器实现了显著更高的成功率。例如,在放入餐盘任务中, NeuralSVCD 达到了 99.3% 的成功率 , 而基于球体的方法 (使用 50 个球体) 仅达到 73.6%,并且经常卡住或导致碰撞。

结论

NeuralSVCD 代表了机器人运动规划向前迈出的重要一步。它成功地弥合了基于球体的检查的高速度与基于网格的检查的高准确性之间的差距。

通过将物体分解为分布式潜在斑块,该系统有效地“学习”了碰撞的几何形状。它不需要检查每一个多边形与每一个其他多边形。它使用快速球体过滤器来发现“险情”,然后使用高度专业化的神经网络根据局部几何形状做出最终判断。

对于机器人领域的学生和研究人员来说,这篇论文强调了一个宝贵的教训: 有时解决全局问题 (机器人轨迹) 的最佳方法是关注局部细节 (表面斑块和瞬间时刻) 。随着机器人进入更杂乱、非结构化的环境——比如我们的家——这种高效、连续的碰撞检测对于安全性将至关重要。