我一直在用水弹性接触来模拟钉入孔任务。模拟场景就像

蓝钉是一个柔顺的水弹性圆柱体,孔是一个刚性的水弹性网格。孔网的线框视图是

当我推倒木桩并在其上施加外力(左端向下的力,指向孔表面)时,我发现钉突然倾斜。


可以看出,钉头的左边部分穿透了孔的表面,从而产生了倾斜的角度。由于栓钉是一个柔顺的身体,所以预期会有穿透力。然而,让我困惑的是倾斜角和接触面。我所期望的是,接触面应该包含所有区域的渗透部分的钉,然而,我真正得到的只是一个条带。图示如下图所示。左边显示我真正得到的接触面,右边显示我期望的接触面。

由于孔表面和桩端之间的接触是表面对表面的接触,所以我预计,在孔表面和桩端接触后,钉将处于起跑线位置(垂直方向),尽管受到外力的影响,钉的倾斜角还是很小的。然而,由于接触表面是条,钉可以沿该条旋转,倾斜角度可能很大。一开始,我怀疑原因是我的洞的网格是稀疏的。然而,在我把更多的三角形添加到我的洞表面后,我得到了几乎相同的结果。增加水弹性模量也没有帮助。我还试着在钉的尖端加上小的碰撞球,就像点接触的情况。然而,我得到
RuntimeError: Bad tetrahedron. Cannot compute gradient.我应该做什么修改才能得到正确的接触面?或者有变通的方法可以使钉的穿透倾斜角在表面接触后变小?
我已经运行了ball and plate水弹性接触的例子,并发现板与平面之间的接触似乎没有这个问题。
非常感谢你的回答!
发布于 2022-05-19 15:23:15
(编辑):resolution_hint太小了(~1e-17),触发了德雷克的一个bug。下面是resolution_hint = peg_circumference / 20的结果

(原答覆):
您有一个公共分支,我可以用来复制错误吗?
我的第一个怀疑是你的resolution_hint太大了。给出了水弹性力学中使用的所有原始形状的内部网格表示,该参数控制网格的粗度。如果有一个非常大的分辨率提示,圆柱体的近似可能最终成为一个盒子。尝试一个较小的分辨率提示。
如果不起作用的话:
您是使用圆柱形原语作为您的钉子,还是使用带有drake:declare_convex标记的网格?我的另一个怀疑是,在钉网或孔网中的一些面的方向是相反的。
我们依赖于这样一种期望,即作为水弹性几何的网格具有一致的和向外定向的面法线。
https://stackoverflow.com/questions/72299376
复制相似问题