我有一个关于 Drake 接触力学准确性的一般性问题。到目前为止,我已经尝试了一些不同的开源机器人模拟工具。在模拟两个网格物体之间的接触时,它们似乎都存在相同的问题,即物体不稳定并相互脱落。例如。在 Gazebo 中,我尝试堆叠两个网格物体(参见 https://youtu.be/_4qQh3pvAZ8)但没有成功。
我正在尝试使用强化学习来学习装配任务。 RL 在收敛到有效策略之前需要大量迭代(模拟)。由于 RL 需要在合理的时间内学习某些东西,因此无法提高准确性(通过减小步长),因为这也会增加太多计算时间。最后,唯一的解决方案是使用 Adams,这是一个(昂贵的)多体力学软件工具箱,在那里可以更自由地优化两个特定对象之间的接触。我还尝试了模拟器 Klampt,它的接触更准确,但它也在每个对象周围添加了一层。
今天我遇到了 Drake,并在视频中看到接触机制非常准确。但大多数对象似乎是非网格物体(块和柱状体),其行为更容易近似。所以我想知道 Drake 是否也表现出不准确的行为,比如视频,网格物体相互堆叠?此外,如果模拟的速度与现实世界的速度大致相同?
答案 0 :(得分:2)
我无法具体评论可能导致您在其他应用程序(例如 Gazebo)中不稳定的原因,但我可以阐明 Drake 中的接触稳定性。
Drake 的默认接触模型是一个非常频繁实现的“点接触”模型(讨论 here)。给定两个接触的物体,检测到代表性碰撞几何形状之间的交点,并通过一对代表最大穿透量的点报告穿透量(并在该接触点施加力) .
对于平面上的球体,这是完全足够的,因为刚性球体和平面之间的接触是一个点。对于堆叠盒子,这是一个糟糕的近似值;两个堆叠的盒子之间的接触界面不是一个点,而是一个多边形,力将在整个接触界面上施加。将其表示为一个点会引入人工扭矩。
Drake 有一个额外的联系模型——目前正在开发中且不完整。它被称为“水弹性”接触,它不是通过测量单个点来表示接触,而是计算整个接触表面,将接触力分布在整个表面上。正如您可能想象的那样,这会导致更稳定的接触。但是,由于该模型并不完整,因此在如何使用它以及它何时真正提供价值方面存在一些限制。但是,该功能在 Drake 的公共 API 中可用,您可以自由研究它。可以在 here 中找到对特征的基本解释。
基于以上细节的一些进一步思考:
一般的非凸网格。
稳定联系的技巧