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

使用DirectTranscription时遇未连接几何查询端口错误求助

问题解决方法

你遇到的问题核心是:传给DirectTranscription的是单独的MultibodyPlant实例和它的上下文,但这个plant依赖SceneGraph提供几何查询能力,单独的plant上下文无法包含diagram内部的端口连接关系——哪怕你在diagram里已经连好了几何查询端口,单独提取的plant上下文也无法让DirectTranscription识别到这个连接。

修正步骤很简单,直接传递整个diagram和它的根上下文即可:

修改后的代码片段:

builder = DiagramBuilder()
plant: MultibodyPlant
plant, scene_graph = AddMultibodyPlantSceneGraph(
    builder, time_step=0.001)
parser = Parser(plant)
parser.AddModels("robot.sdf") 
plant.SetUseSampledOutputPorts(False)
plant.Finalize()

diagram = builder.Build()
root_context = diagram.CreateDefaultContext()

# 传入整个diagram和根上下文,指定要控制的plant系统
dirtran = DirectTranscription(
    diagram, root_context, 
    num_time_samples=21, 
    input_port_index=plant.get_actuation_input_port().get_index(),
    system_index=plant.get_system_index()
)
prog = dirtran.prog()
# 从根上下文获取plant的状态来初始化约束
plant_context = plant.GetMyContextFromRoot(root_context)
prog.AddLinearEqualityConstraint(
    dirtran.initial_state(), 
    plant.GetPositionsAndVelocities(plant_context)
)
Solve(prog)

之所以之前报错,是因为单独的plant实例脱离diagram后,无法访问SceneGraph提供的几何查询服务,而DirectTranscription在处理运动学约束时需要这个服务。传递整个diagram后,它就能正确识别并使用内部的端口连接了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:32:35