You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Meshcat轨迹可视化报错:C++对象所有权问题及替代方案咨询

错误原因

你遇到的RuntimeError是因为最初创建的scene_graph已经被第一个DiagramBuilder构建的diagram接管了所有权,PyBind11不再拥有它的控制权,所以没法再把它加到新的DiagramBuilder里。

两种可视化轨迹的替代方法

方法1:直接回放轨迹到原Diagram

不用重新搭建系统,直接用原有的diagram和scene_graph,遍历轨迹的每个状态并渲染:

trajectory = dircol.ReconstructStateTrajectory(result)
times = trajectory.get_segment_times()
states = trajectory.vector_values(times)

# 初始化原场景的可视化器
visualizer = PlanarSceneGraphVisualizer(
    scene_graph, xlim=[-4, 4], ylim=[-2, 2], show=True
)
context = diagram.CreateDefaultContext()

# 逐个时间点更新状态并绘制
for t, x in zip(times, states.T):
    diagram.get_mutable_context(context).SetTime(t)
    plant.get_mutable_state_input_port().FixValue(context, x)
    visualizer.draw(context)

方法2:重新构建Plant和SceneGraph

既然原scene_graph不能复用,就重新建一套相同的Plant和SceneGraph来加载模型,再连接轨迹源:

trajectory = dircol.ReconstructStateTrajectory(result)

# 重新构建Multibody Plant和SceneGraph
builder = DiagramBuilder()
plant_new, scene_graph_new = AddMultibodyPlantSceneGraph(builder=builder, time_step=0)
parser = Parser(plant_new)
ConfigureParser(parser)
parser.AddModelsFromString(minigolf_urdf, 'urdf')
plant_new.Finalize()

# 轨迹源连接到姿态转换模块
source = builder.AddSystem(TrajectorySource(trajectory))
pos_to_pose = builder.AddSystem(
    MultibodyPositionToGeometryPose(plant_new, input_multibody_state=True)
)
builder.Connect(source.get_output_port(0), pos_to_pose.get_input_port())
builder.Connect(
    pos_to_pose.get_output_port(),
    scene_graph_new.get_source_pose_port(plant_new.get_source_id()),
)

# 添加可视化器并运行
visualizer = builder.AddSystem(
    PlanarSceneGraphVisualizer(
        scene_graph_new, xlim=[-4, 4], ylim=[-2, 2], show=True
    )
)
builder.Connect(scene_graph_new.get_query_output_port(), visualizer.get_input_port(0))

diagram_new = builder.Build()
context_new = diagram_new.CreateDefaultContext()
diagram_new.ForcedPublish(context_new)
visualizer.run()

内容的提问来源于stack exchange,提问作者Ben Kang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:52:17