Drake插销入孔任务中compliant-hydroelastic接触触发is_triangle()断言失败
问题分析与解决方案:Drake Peg-in-Hole仿真中Compliant Hydroelastic接触断言失败
问题原因
你遇到的condition 'is_triangle()' failed断言错误,核心原因是Drake的Compliant Hydroelastic接触模块仅支持三角形网格碰撞几何之间的交互。当直接将box(夹爪)、cylinder(插销)这类基础几何设置为compliant-hydroelastic类型时,仿真引擎无法将其转换为符合要求的三角网格接触表面,触发底层断言检查失败,导致MeshCat冻结、程序终止。
换回schunk_wsg_50_no_tip夹爪后无报错,是因为该模型采用点接触离散碰撞,不依赖Hydroelastic的三角网格接触逻辑,但点接触的摩擦接触面积极小,无法提供足够约束,因此出现插销滑动问题。
解决方案
1. 替换为三角网格碰撞几何(推荐)
将夹爪的box、插销的cylinder转换为三角网格格式的几何文件(如.obj、.stl),再在SDF中设置为compliant-hydroelastic类型:
- 用CAD工具(Blender、SolidWorks等)导出基础几何为三角网格,确保网格闭合且所有面均为三角形;
- 在SDF中修改碰撞几何定义,示例如下:
<collision name="finger_collision"> <geometry> <mesh> <uri>file:///path/to/your/finger_mesh.stl</uri> <scale>1 1 1</scale> </mesh> </geometry> <drake:proximity_properties> <drake:compliant_hydroelastic/> </drake:proximity_properties> </collision>
2. 调整Hydroelastic参数(可选)
为三角网格添加resolution_hint参数,控制网格细分精度,平衡仿真性能与接触精度:
<drake:proximity_properties> <drake:compliant_hydroelastic resolution_hint="0.01"/> </drake:proximity_properties>
3. 临时混合接触方案(快速验证)
若暂时无法替换网格,可采用混合接触模式:
- 将夹爪设置为
rigid-hydroelastic类型,插销保留compliant-hydroelastic; - 或为夹爪保留点接触,同时调高摩擦系数(如
mu=1.0),临时缓解插销滑动问题,但此方案无法解决根本的接触精度问题。
补充说明
- Drake官方明确说明,Compliant Hydroelastic仅支持三角网格碰撞几何,使用基础几何会触发未定义行为;
- 采用三角网格的Compliant Hydroelastic接触后,接触面积更大,摩擦约束更稳定,可彻底解决插销在夹爪间滑动的问题。
内容的提问来源于stack exchange,提问作者Ye Zhang
相关产品推荐
相关产品推荐

