首页 > 解决方案 > 使用凸网格作为碰撞几何体时退出代码 139

问题描述

我试图在德雷克中使用凸网格作为碰撞几何。在我的简单示例中,我有一个地平面作为第一个碰撞几何体,并从下面的 urdf 文件加载对象。哪里tri_cube.obj是凸网格drake/multibody/parsing/test/urdf_parser_test。当我运行模拟时,它会继续进行,直到立方体撞击地平面。然后它停止,我收到以下错误消息:Process finished with exit code 139 (interrupted by signal 11: SIGSEGV). 任何帮助将不胜感激。

<?xml version="1.0"?>
<robot name="my_ball">
  <material name="Black">
    <color rgba="0.0 0.0 0.0 1.0"/>
  </material>
  <link name="base_link">
    <inertial>
      <origin rpy="0 0 0" xyz="0.0 0.0 0.0"/>
      <mass value="5"/>
      <inertia ixx="0.05" ixy="0" ixz="0" iyy="0.05" iyz="0" izz="0.05"/>
    </inertial>
    <visual>
      <geometry>
        <mesh filename="tri_cube.obj" scale="1.0 1.0 1.0">
        </mesh>
      </geometry>
      <material name="Black"/>
    </visual>

    <collision name='collision'>
     <geometry>
       <mesh filename="tri_cube.obj" scale="1.0 1.0 1.0">
         <drake:declare_convex/>
       </mesh>
     </geometry>

    <drake:proximity_properties>
     <drake:mu_dynamic value="1.0" />
     <drake:mu_static value="1.0" />
    </drake:proximity_properties>
   </collision>
  </link>
</robot>

标签: pythondrake

解决方案


我有一个短期和长期的答案给你:

短期:将地面半空间替换为顶面与半空间边界共面的大盒子。

长期:FCL 有一个 bug 需要修补。它没有理由不能支持半空间凸接触。由于某些莫名其妙的原因,它未启用。因为它没有被启用,它最终会沿着一条明确不支持半空格的代码路径螺旋下降,然后默默地出现段错误。

我会更新整箱,当这种情况发生时,德雷克将继承善良。我可能需要几天的时间来修补、测试、审查并传播到 Drake。因此,如果时间框架不起作用,请使用短期“盒子”解决方案。

当 FCL 被修补并且该补丁反映在 Drake 中时,我会更新这个。


推荐阅读