Skip to content

踩坑GitHub google-deepmind/mujoco11 天前

MuJoCo mj_ray射线穿过网格共享边时漏检返回-1或错误距离 ​

本文由 AI 根据公开内容整理,可能有误,请以原文为准:mj_ray misses a ray that passes exactly through a shared edge of a mesh (non-watertight ray-triangle test)(GitHub google-deepmind/mujoco #3698)

状态:有绕过办法

问题 ​

在MuJoCo 3.6.0中,当mj_ray射线精确穿过mesh geom两个三角形的共享边时,因浮点精度误差导致重心坐标落在两个三角形外部而被同时拒绝,函数返回-1或穿透至后方表面。例如对棱柱顶点发射射线,预期命中距离0.96却返回1.04或-1。

环境 ​

MuJoCo 3.6.0 Python bindings,Linux x86_64系统;涉及src/engine/engine_ray.cc中ray_triangle函数(行132-198)及barycentric accept/reject逻辑(行173)。

解决办法 ​

  1. 关注并合并PR #3704,该补丁将原有的2x2线性求解重心坐标测试替换为Woop, Benthin & Wald (2013)提出的Watertight边缘函数公式,包含边缘函数为零时的双精度回退机制,保持原有API签名与语义不变。
  2. 若需临时规避,避免让射线原点或方向向量精确对齐mesh顶点或共享边,可对射线起点施加微小随机扰动(如1e-7量级)以避开数值奇异点。
  3. 验证修复效果可运行新增回归测试用例RayTest.RayMeshSharedEdge,该测试复现了共享边漏检现象并在应用补丁后通过。

讨论原作者:@gal-echo-labs 等,版权归原作者所有。

来源

本页事实对应的公开页面,以原文为准。

  1. GitHub google-deepmind/mujoco #3698:mj_ray misses a ray that passes exactly through a shared edge of a mesh (non-watertight ray-triangle test)访问 2026-10-26