0

在这个repo中,@Gizatt 使用以下命令为 kuka iiwa 组装碰撞约束:
ik.MinDistanceConstraint(tree, collision_tol, list(), set())

在这里,list() 和 set() 表示什么。两者在这里似乎都是空的。

假设我的 RigidBodyTree 中有一个项目(项目 1)由 6 个物体(在一个 urdf 内)和另一个物体(项目 2)组成,它由一个物体(在一个单独的 urdf 内)组成,我只想检查碰撞在构成项目 1 和项目 2 的 6 个主体中的任何一个之间。有没有办法设置此功能,以便它不检查项目 1 中所有主体内的碰撞,而仅检查项目 1 和项目 2 之间的碰撞?

最后,当我使用这个函数时,我目前有以下错误:[2018-11-14 19:39:20.812] [console] [warning] Attempting to compute distance between two collision elements,至少其中一个是非凸的. 我接受了@gizatt 的建议,并使用 meshlab 将项目 1 中每个链接的网格转换为凸包,当我使用可视化器查看每个网格时,它们对我来说似乎都是凸的。但是我仍然收到此错误。还有其他原因会弹出此错误吗?

4

2 回答 2

0

该方法的文档在这里: https ://drake.mit.edu/pydrake/pydrake.solvers.ik.html?highlight=mindistanceconstraint#pydrake.solvers.ik.MinDistanceConstraint

greg 使用的最后两个论点是关于“活动”机构的。如果您想完全从碰撞计算中忽略某些物体,这将对您有所帮助。

如果要忽略某些碰撞对,请使用碰撞过滤器组: https ://drake.mit.edu/pydrake/pydrake.multibody.rigid_body_tree.html?highlight=collision%20filter#pydrake.multibody.rigid_body_tree.RigidBodyTree.DefineCollisionFilterGroup

我们的 RBT/Bullet 包装器假设每个网格都是凸的,除了静态/锚定几何。您似乎很可能收到该警告,因为您正在针对静态/锚定几何进行碰撞检查?

FWIW——关于多体树和刚体树的文档要完整得多,但是对于这个特定的查询,我认为你使用 RBT 是正确的——多体还没有。

于 2018-11-16T10:53:29.063 回答
0

在这里,list() 和 set() 表示什么。两者在这里似乎都是空的。

这些论点是历史文物,几乎从来都不是您想要使用的。我建议将它们留空,如您提供的示例所示。第一个限制约束只考虑由 指定的实体active_bodies_idx。第二个限制约束只考虑名称包含在中的碰撞组active_group_names。请注意,active_group_names参数的“碰撞组”概念与“碰撞过滤器组”概念不同。

有没有办法设置这个函数,使它不检查项目 1 中所有物体内的碰撞,而只检查项目 1 和项目 2 之间的碰撞?

你走在正确的轨道上。您想添加一个包含第 1 项中所有实体的碰撞过滤器组,然后将该碰撞组设置为忽略自身。以下代码需要AddCollisionFilterIgnoreTarget()PR #10085添加的绑定。

tree.DefineCollisionFilterGroup("1_filtergroup")

tree.AddCollisionFilterGroupMember("1_filtergroup", "base_link", 1_model_id)
# Repeat the previous line for all bodies in item 1.

tree.AddCollisionFilterIgnoreTarget("1_filtergroup", "1_filtergroup")

然后,您可以通过调用来创建具有所需行为的约束ik.MinDistanceConstraint(tree, collision_tol, list(), set())

最后,当我使用这个函数时,我目前有以下错误:[2018-11-14 19:39:20.812] [console] [warning] Attempting to compute distance between two collision elements,至少其中一个是非凸的. ...还有其他原因会弹出此错误吗?

正如@Russ Tedrake 提到的,所有附加到锚定(焊接到世界)主体的网格碰撞元素都将在 Bullet 后端转换为非凸网格对象,而不管原始网格的凸度如何。这是不幸的,但很可能不会得到解决,因为所有RigidBodyTree相关的代码都即将结束。出于 IK 的目的,您可以通过将网格连接到一个虚拟实体来解决此问题,该实体通过一个上下限均为 0 的棱柱或旋转关节连接到世界。这将迫使后端使用凸包的提供网格。然后,您需要从 IK 返回的配置中删除与虚拟关节对应的元素。

于 2018-11-26T16:39:03.397 回答