Python 使用凸面网格作为碰撞几何体时退出代码139

Python 使用凸面网格作为碰撞几何体时退出代码139,python,drake,Python,Drake,我试图在drake中使用凸面网格作为碰撞几何体。在我的简单示例中,我将地平面作为第一个碰撞几何体,并从下面的urdf文件加载对象。其中,tri_cube.obj是来自drake/multibody/parsing/test/urdf_parser_test的凸网格。当我运行模拟时,它将继续进行,直到立方体撞击地平面。然后它停止,我得到以下错误消息:进程结束,退出代码139(被信号11:SIGSEGV中断)。任何帮助都将不胜感激 <?xml version="1.0"?> <ro

我试图在drake中使用凸面网格作为碰撞几何体。在我的简单示例中,我将地平面作为第一个碰撞几何体,并从下面的urdf文件加载对象。其中,
tri_cube.obj
是来自
drake/multibody/parsing/test/urdf_parser_test
的凸网格。当我运行模拟时,它将继续进行,直到立方体撞击地平面。然后它停止,我得到以下错误消息:
进程结束,退出代码139(被信号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>

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

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

长期:FCL有一个需要修补的bug。它没有理由不能支持半空间凸面接触。由于某些无法解释的原因,它没有启用。因为它没有被启用,它最终会沿着一条显式不支持半个空格的代码路径螺旋上升,然后默默地对错误进行分段

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


当FCL被修补并且该修补反映在Drake中时,我将更新此内容。

您能详细说明如何添加地平面吗?@Sean我正在使用
plant.RegisterServiceAlGeometry()
plant.RegisterCollisionGeometry()
shape=HalfSpace()
。代码与这个问题相关的代码几乎相同。我将看看是否可以在本地复制此代码。快速更新——seg故障来自FCL(可能是由于数据Drake正在传递)。在我得到答案/解决方案之前,我必须深入研究。发布问题:我用一个盒子替换了半个空间,它可以工作。谢谢你的帮助!这件事已经过去了。德雷克大师就是这样。您应该能够调回一半的空间,并获得预期的结果(以及性能的轻微提升)。