如何解决记录多个Meshcat可视化工具
我想记录多个具有不同前缀ID的Meshcat可视化工具,以便最终将它们保存到一个HTML文件中,以便以后与之交互。我希望不同的可视化可以相互叠加,并能够选择/取消选择不同的可视化。
这里是问题的最小重复。我希望有两个相互重叠的可视化可视化。但是,我最终只看到其中一个被记录了。当我播放录音时,另一个障碍似乎停留在终点位置
import meshcat
from pydrake.common import FindResourceOrThrow
from pydrake.multibody.plant import (
AddMultibodyPlantSceneGraph)
from pydrake.multibody.parsing import Parser
from pydrake.systems.analysis import Simulator
from pydrake.systems.framework import DiagramBuilder
from pydrake.systems.meshcat_visualizer import (
ConnectMeshcatVisualizer,)
v = meshcat.Visualizer()
file_name = FindResourceOrThrow(
"drake/examples/multibody/cart_pole/cart_pole.sdf")
builder = DiagramBuilder()
cart_pole,scene_graph = AddMultibodyPlantSceneGraph(builder,0.0)
Parser(plant=cart_pole).AddModelFromFile(file_name)
cart_pole.Finalize()
vis = ConnectMeshcatVisualizer(builder=builder,prefix="vis",scene_graph=scene_graph,open_browser=False)
vis2 = ConnectMeshcatVisualizer(
builder=builder,prefix="vis2",open_browser=False)
vis2.set_name("vis2")
diagram = builder.Build()
diagram_context = diagram.CreateDefaultContext()
cart_pole_context = diagram.GetMutableSubsystemContext(
cart_pole,diagram_context)
cart_pole.get_actuation_input_port().FixValue(cart_pole_context,.02)
simulator = Simulator(diagram,diagram_context)
simulator.set_publish_every_time_step(False)
vis.start_recording()
vis2.start_recording()
simulator.Advanceto(100)
vis.stop_recording()
vis2.stop_recording()
vis.publish_recording()
vis2.publish_recording()
# f = open("saved.html","w")
# f.write(v.static_html())
# f.close()
解决方法
这是一种解决方案。我不喜欢它,但是它实现了既定目标。注意更改:
- 仅保存和发布一个动画
- 在
MultibodyPlant
中为模型命名,为每个模拟用户使用不同的名称 - 设置
delete_prefix_on_load=False
,以免清除旧的几何图形
import meshcat
from pydrake.common import FindResourceOrThrow
from pydrake.multibody.plant import (AddMultibodyPlantSceneGraph)
from pydrake.multibody.parsing import Parser
from pydrake.systems.analysis import Simulator
from pydrake.systems.framework import DiagramBuilder
from pydrake.systems.meshcat_visualizer import (
ConnectMeshcatVisualizer,)
animation = None
for i in range(3):
file_name = FindResourceOrThrow(
"drake/examples/multibody/cart_pole/cart_pole.sdf")
builder = DiagramBuilder()
cart_pole,scene_graph = AddMultibodyPlantSceneGraph(builder,0.0)
Parser(plant=cart_pole).AddModelFromFile(file_name,f"plant{i}")
cart_pole.Finalize()
vis = ConnectMeshcatVisualizer(builder=builder,scene_graph=scene_graph,delete_prefix_on_load=False,open_browser=False)
if animation:
vis._animation = animation
diagram = builder.Build()
diagram_context = diagram.CreateDefaultContext()
cart_pole_context = diagram.GetMutableSubsystemContext(
cart_pole,diagram_context)
cart_pole.get_actuation_input_port().FixValue(cart_pole_context,.02)
simulator = Simulator(diagram,diagram_context)
simulator.set_publish_every_time_step(False)
vis.start_recording()
simulator.AdvanceTo(10)
vis.stop_recording()
animation = vis._animation
vis.publish_recording()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。