德雷克的接触力学

时间:2021-03-16 14:22:22

标签: drake

我有一个关于 Drake 接触力学准确性的一般性问题。到目前为止,我已经尝试了一些不同的开源机器人模拟工具。在模拟两个网格物体之间的接触时,它们似乎都存在相同的问题,即物体不稳定并相互脱落。例如。在 Gazebo 中,我尝试堆叠两个网格物体(参见 https://youtu.be/_4qQh3pvAZ8)但没有成功。

我正在尝试使用强化学习来学习装配任务。 RL 在收敛到有效策略之前需要大量迭代(模拟)。由于 RL 需要在合理的时间内学习某些东西,因此无法提高准确性(通过减小步长),因为这也会增加太多计算时间。最后,唯一的解决方案是使用 Adams,这是一个(昂贵的)多体力学软件工具箱,在那里可以更自由地优化两个特定对象之间的接触。我还尝试了模拟器 Klampt,它的接触更准确,但它也在每个对象周围添加了一层。

今天我遇到了 Drake,并在视频中看到接触机制非常准确。但大多数对象似乎是非网格物体(块和柱状体),其行为更容易近似。所以我想知道 Drake 是否也表现出不准确的行为,比如视频,网格物体相互堆叠?此外,如果模拟的速度与现实世界的速度大致相同?

1 个答案:

答案 0 :(得分:2)

我无法具体评论可能导致您在其他应用程序(例如 Gazebo)中不稳定的原因,但我可以阐明 Drake 中的接触稳定性。

Drake 的默认接触模型是一个非常频繁实现的“点接触”模型(讨论 here)。给定两个接触的物体,检测到代表性碰撞几何形状之间的交点,并通过一对代表最大穿透量的点报告穿透量(并在该接触点施加力) .

对于平面上的球体,这是完全足够的,因为刚性球体和平面之间的接触是一个点。对于堆叠盒子,这是一个糟糕的近似值;两个堆叠的盒子之间的接触界面不是一个点,而是一个多边形,力将在整个接触界面上施加。将其表示为一个点会引入人工扭矩。

Drake 有一个额外的联系模型——目前正在开发中且不完整。它被称为“水弹性”接触,它不是通过测量单个点来表示接触,而是计算整个接触表面,将接触力分布在整个表面上。正如您可能想象的那样,这会导致更稳定的接触。但是,由于该模型并不完整,因此在如何使用它以及它何时真正提供价值方面存在一些限制。但是,该功能在 Drake 的公共 API 中可用,您可以自由研究它。可以在 here 中找到对特征的基本解释。

基于以上细节的一些进一步思考:

  1. 一般的非凸网格。

    • 对于点接触模型,不直接支持非凸网格。相反,它使用该网格的隐式凸包(这会对性能产生负面影响)。如果您知道网格是凸面的,您可以将其声明为凸面,并且 Drake 可以使用可以提高效率的技术。
    • 水弹性接触模型确实支持非凸网格,但它们必须用于严格的“刚性”对象。并且该模型仅计算软物体和刚性物体之间的接触。因此,如果您希望计算两个非凸面网格之间的接触,您将无法使用此模型。在当前状态下,您需要将事物建模为刚性网格和软基元之间的接触。 (例如,您可以创建一个“软”盒子作为桌子,并在其上稳定地放置任意数量的刚性非凸面网格,但是这些刚性对象之间的接触不稳定) .
  2. 稳定联系的技巧

    • 在与点接触模型接触时获得更好稳定性的一个“技巧”是更改碰撞几何体的表示。将小球体放在物体表面。目标是确保当它与其他物体接触时,您将在多个点接触。这里的挑战是放置球体,使有意义的接触通常至少会给您带来三个结果。