
[英]How to properly use MultibodyPlant::CalcGravityGeneralizedForces in pydrake?
[英]How to use minDistanceConstraint in pydrake
在这种回购 ,@Gizatt使用下列命令来组装碰撞约束库卡iiwa:
ik.MinDistanceConstraint(tree,crash_tol,list(),set())
在这里,list()和set()表示什么。 两者似乎在这里都是空的。
假设我在RigidBodyTree中有一个项目(项目1)由6个实体(在一个urdf内)和另一个对象(项目2)组成,由一个主体(在一个urdf中)组成,我只想检查碰撞在组成项目1和项目2的6个实体中的任何一个之间。是否可以设置此功能,以便它不检查项目1中所有实体内的碰撞,而仅检查项目1和项目2之间的碰撞。 ?
最后,当我使用此函数时,当前出现以下错误:[2018-11-14 19:39:20.812] [控制台] [警告]试图计算两个碰撞元素之间的距离,其中至少一个是非凸的。 我接受了@gizatt的建议,并使用meshlab将项目1中每个链接的网格转换为凸包,当我使用可视化工具查看每个网格时,它们对我来说都是凸的。 但是我仍然收到此错误。 还有其他原因会弹出此错误吗?
该方法的文档在这里: 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-关于multibodytree和刚性bodytree的文档要完整得多,但是对于这个特定的查询,我认为您使用RBT是正确的-multibody还不存在。
在这里,list()和set()表示什么。 两者似乎在这里都是空的。
这些参数是历史工件,几乎永远都不是您想要使用的参数。 我建议按照您提供的示例将其保留为空。 第一个将约束限制为仅考虑由active_bodies_idx
指定的active_bodies_idx
。 第二个方法将约束限制为仅考虑名称包含在active_group_names
的冲突组。 请注意,“碰撞组”的理念为active_group_names
说法是不一样的“碰撞过滤器组”的概念。
有没有一种方法可以设置此功能,以便它不检查项目1中所有物体之间的碰撞,而仅检查项目1和项目2之间的碰撞?
您在正确的轨道上。 您要添加一个包含项目1中所有实体的碰撞过滤器组,然后将该碰撞组设置为忽略自身。 以下代码需要PR #10085添加的AddCollisionFilterIgnoreTarget()
绑定。
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] [控制台] [警告]试图计算两个碰撞元素之间的距离,其中至少一个是非凸的。 ...还有其他原因会弹出此错误吗?
正如@Russ Tedrake提到的那样 ,无论原始网格的凸度如何,所有附加到锚定 (焊接到世界)物体的网格碰撞元素都将转换为Bullet后端中的非凸网格对象。 这是不幸的,但是很可能无法解决,因为所有与RigidBodyTree
相关的代码RigidBodyTree
。 出于IK目的,您可以通过将网格附加到通过上下限均为0的棱柱形或旋转关节连接到世界的虚拟物体上来解决此问题。这将迫使后端与凸包一起使用提供网格的数量。 然后,您需要从IK返回的配置中删除与虚拟关节相对应的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.