每当我在链接中添加潮间属性时,URDF模型就会不断消失?如何解决此问题



我正试图使用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,那将非常有帮助。

非常感谢。

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

如果你只想检查可视化,我建议你做

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

而不是模拟器步骤。

我已经开始为这个问题编写一个合适的教程了。现在这是一份草稿,但如果有帮助的话,你可以在这里找到。我打算让这成为一个真正的德雷克教程很快。

相关内容

最新更新