parsing - 如何跨模型实例定义碰撞过滤器组?
问题描述
当从单独的 URDF 加载的MultiBodyPlant
多个构建一个时ModelInstances
,有没有办法定义碰撞过滤器组以排除模型实例之间的碰撞?在多体 URDF 解析器中,加载碰撞过滤器组仅限于存在于同一模型实例中的那些。
我想做的是在 URDF A 中指定:
<drake:collision_filter_group name="model_a_group">
<drake:member link="link1"/>
<drake:member link="link2"/>
<drake:ignored_collision_filter_group name="model_b_group"/>
</drake:collision_filter_group>
并在 URDF B 中指定:
<drake:collision_filter_group name="model_b_group">
<drake:member link="link4"/>
<drake:member link="link5"/>
<drake:ignored_collision_filter_group name="model_a_group"/>
</drake:collision_filter_group>
但目前尝试这样做会导致以下错误:
abort: Failure at multibody/parsing/detail_urdf_parser.cc:238 in abort:
Failure at multibody/parsing/detail_urdf_parser.cc:238 in ParseCollisionFilterGroup():
condition 'collision_filter_group_b != collision_filter_groups.end()' failed.
解决方案
的范围drake:collision_filter_group
仅限于文件的范围。因此,足以防止机器人关节处的“假”碰撞,但不足以防止两个独立解析的机器人发生碰撞。
为了达到这个目的,您必须解析两个机器人,然后通过算法声明碰撞过滤器。
我现在没有太多时间,所以我将大致概述一下它的外观,然后在我稍后空闲时提供代码:
该方法。
- 解析两个 URDF (SDF)。
- 抓取模型实例“a”(链接1 和链接2)的主体,同样获取模型实例“b”(链接4 和链接5)的主体。
- 使用 MBP 接口获取
geometry::FrameId
与这些主体中的每一个相关联的信息。(我们将它们分别称为 frameA1、frameA2、frameB4、frameB5。 - 创建geometry::GeometrySet 的两个实例。
geometry_set_A = {frameA1, frameA2}
和geometry_set_B = {frameB4, frameB5}
。 - 调用
SceneGraph::ExcludeCollisionsBetween(geometry_set_A, geometry_set_b)
.
完毕
这应该让您初步了解如何进行。我会再来第二遍,提供具体的代码来完成稍后的任务。
推荐阅读
- html - Html Parser 边距为负
- android - 我正在创建 android 快捷方式,我希望默认打开一个启动活动
- java - 为什么即使在设置 JPanel 的大小后我的框布局也会改变大小
- unit-testing - 在 Java 中模拟 JNI 方法
- html - 这是虚拟文本,但我无法让每个评论 div 成行显示。其中有 3 个 'review1' 'review2' 'review3'
- c - 我做错了什么 ....?(计算每人的纸杯蛋糕数量)
- reactjs - 使用 React 在 ASP .NET Core 中分离前端和后端
- c# - 由 JsInterop 修改时未更新有界值
- c++ - 为什么按位 ~ 运算符会更改无符号字符的大小?
- r - 在 R ggplot2 中,如何删除图例。谢谢