【问题标题】:URDF model keeps disappearing whenever I add intertial properties to a link? How can I resolve this issue?每当我向链接添加内部属性时,URDF 模型都会消失?我该如何解决这个问题?
【发布时间】:2022-01-06 02:33:00
【问题描述】:

我正在尝试使用 pydrake 模拟一个简单的钟摆,并且在创建 urdf 文件以创建钟摆模型时遇到了一些问题。我没有 urdf 或 drake 的背景知识,并且愿意接受任何解决此问题的建议。

这是我目前的代码:

import os
from tempfile import mkdtemp

from pydrake.all import (
    AddMultibodyPlantSceneGraph,
    DiagramBuilder,
    Meshcat,
    MeshcatVisualizerCpp,
    Parser,
    Simulator,
)

from manipulation.meshcat_cpp_utils import (
  StartMeshcat, MeshcatJointSlidersThatPublish)


# Start the visualizer.
meshcat = StartMeshcat()


tmp_dir = mkdtemp()
model_file = os.path.join(tmp_dir, "test_model.urdf")


model_text = f"""\
<?xml version="1.0"?>
<robot name="materials">

  <material name="blue">
    <color rgba="0 0 0.8 1"/>
  </material>

  <material name="white">
    <color rgba="1 1 1 1"/>
  </material>

  <material name="green">
    <color rgba="0.0 0.8 0.0 1.0"/>
  </material>

 <link name="base">
    <visual>
      <geometry>
        <box size="0.5 0.5 0.1"/>
      </geometry>
    </visual>
    <inertial>
      <mass value="1"/>
    </inertial>
  </link>

  <joint name="world_2_base" type="fixed">
    <parent link="world"/>
    <child link="base"/>
     <origin xyz="0 0 0.5"/>
  </joint>

 <link name="arm">
    <visual>
      <geometry>
        <cylinder length="0.5" radius="0.01"/>
      </geometry>
      <material name="blue"/>
    </visual>
  </link>


  <joint name="base" type="revolute">
    <parent link="base"/>
    <child link="arm"/>
    <axis xyz="1 0 0"/>
    <origin xyz="0 0 -0.3"/>
  </joint>

 <link name="ball">
    <visual>
      <geometry>
        <sphere radius="0.1"/>
      </geometry>
      <material name="green"/>
    </visual>
  </link>

  <joint name="base2" type="fixed">
    <parent link="arm"/>
    <child link="ball"/>
    <origin xyz="0 0 -0.35"/>
  </joint>


</robot>
"""


# Write temporary file.
with open(model_file, "w") as f:
    f.write(model_text)


builder = DiagramBuilder()
plant, scene_graph = AddMultibodyPlantSceneGraph(builder, time_step=0.0)

# Add pendulum model.
model = Parser(plant, scene_graph).AddModelFromFile(model_file)
# - Weld base at origin.
base_link = plant.GetBodyByName("base", model)
#plant.WeldFrames(plant.world_frame(), base_link.body_frame())

plant.Finalize()
visualizer = MeshcatVisualizerCpp.AddToBuilder(builder, scene_graph, meshcat)
diagram = builder.Build()


simulator = Simulator(diagram)
simulator.set_target_realtime_rate(1.0)
simulator.AdvanceTo(5.0)

这段代码给了我一个黑色的meshcat屏幕。但是当我删除基本链接中的惯性标签时,我可以看到钟摆的模型。请让我知道我做错了什么。另外,如果您可以推荐一些资源来了解 urdf 和 drake,那将非常有帮助。

非常感谢。

【问题讨论】:

    标签: simulation robotics drake pendulum


    【解决方案1】:

    我认为问题在于你的手臂没有质量,所以当你去模拟它时,模拟是不明确的(可能你在状态变量中得到 NaN)。

    如果您只想检查可视化,我建议您这样做

    context = diagram.CreateDefaultContext()
    diagram.Publish(context)
    

    而不是模拟器步骤。

    我已经开始为此编写适当的教程。它现在非常草稿,但如果它对您有帮助,您可以找到它here。我打算很快将其作为真正的 Drake 教程之一。

    【讨论】:

      猜你喜欢
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 2020-02-14
      相关资源
      最近更新 更多