【问题标题】:Mesh based collision geometry in drake德雷克中基于网格的碰撞几何
【发布时间】:2020-10-04 15:54:09
【问题描述】:

我想基于物理引擎生成用于感知和抓取的数据集。我尝试将谷歌研究最近发布的以下 3D 模型 (https://app.ignitionrobotics.org/GoogleResearch) 导入 drake 并为各种鞋子创建分割数据集,即将网格放入 bin / 让它静止并读取 rgb / 深度和分割图像。

但是,在 drake 中将对象网格(.obj 文件)指定为碰撞几何体似乎不起作用,因为鞋子刚刚穿过垃圾箱并不断掉入深渊(附快照)。

我还注意到 YCB 对象具有使用简单框和点接触描述的碰撞几何形状。这是相同的可视化(您可能已经熟悉)。绿色是碰撞几何体。

如果我必须模拟上述情况,我是否需要为谷歌研究数据集中的所有对象描述简单的几何图形?如果是这样,它们是如何生成的?是否有一些工具可以用来生成它或者它是手动完成的?或者当网格用于碰撞几何时,我应该启用水弹性接触模拟吗?

如果它可以处理任何凸面网格,另一种方法是制作原始网格的凸包作为碰撞几何体。

作为替代方案,我尝试了与 pybullet 相同的方法。我用飞机代替了垃圾箱。 Pybullet 似乎正在处理正确地将网格指定为碰撞几何体。这是pybullet中数据的快照。

中间解决方案(尚未解决抓取部分):

在与 Sean 和 Russ 讨论后,我创建了三角形网格的凸包(使用 open3D),看起来使用这个凸包作为碰撞网格并将<drake:declare_convex/> 注释到网格标签,鞋子的姿势变得稳定。我认为这个解决方案足以让我使用 drake 生成感知数据。这是使用以下解决方案后的快照:

【问题讨论】:

  • 问题!你如何让合成相机深度数据工作?我的没有显示任何东西! (面具和RGB虽然做)。而且,你能以某种方式获得这些深度值吗?

标签: collision-detection drake


【解决方案1】:

你的观察是正确的。

Drake 目前不支持用于接触的任意网格(也称为“接近”角色)(仅适用于“插图”和“感知”)。事实上,如果您可以使用控制台,则可能会打印出警告,表明您可以使用该控制台。在添加该功能之前,您有以下选择:

  • 正如您在 YCB 数据中观察到的,引入简单的基元来近似网格。目前,没有公开的技术来生成简单的表示。这主要是一种临时的手工方法。
  • 加载代表真正凸多面体的 OBJ,并将 <drake:declare_convex> 标签添加为 <mesh> 几何的子代。这将通知 Drake 期待一个凸网格, 支持接触。因此,如果您可以轻松创建凸包,那可能是一个不错的方向。

很难推荐使用水弹性接触。它还没有为实际使用做好准备,并且有一些限制(这些限制可能对您来说太成问题)。如果您有兴趣进一步调查,我们可以进行探索。但就目前而言,我建议您对对象进行一些凸表示。

【讨论】:

  • 谢谢肖恩。当其他模拟器出现时,您(和其他 drake 开发人员)是否可以在这里添加您的想法,即为什么 drake 不处理一般网格(还)?对愿意为德雷克社区做出贡献以帮助改善情况的人有什么建议吗? (例如,提供一个脚本来调用像 meshlab 这样的工具来生成凸分解等?)或者我们甚至可以分享我们在引入新模型时遵循的部分指令?
  • 感谢肖恩和拉斯。 Open3D 似乎具有生成任意三角形网格的凸包的功能。听从了你的建议,现在它似乎在下降后稳定到了稳定的姿势。但是,这对抓握意味着什么?我无法用鞋领抓住鞋子,因为碰撞几何学不允许这样做?
  • 仅供参考,我相信 Bullet 还需要凸碰撞形状(至少对于移动的物体),但可能会自动为鞋子生成凸包。
  • 一般网格存在多重挑战。一个是它们是否是封闭流形的问题;有正确的“内”和“外”吗?没有它,你能做的最好的事情就是定义到 surface 的距离(严格来说是正的)并且你不能得到负距离(内部)。在计算上,即使它被正确关闭,计算非凸形状的穿透深度也要困难得多(更喜欢凸分解)。有办法解决这些问题,德雷克还没有付出代价。
  • 至于使用凸包:如果您的网格上有特征消失在 inside 包中,但它仍然是与之交互的重要特征,您需要做一个凸的分解。打破网格并创建凸包。为您提供所需功能的最少件数。
猜你喜欢
  • 2018-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多