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

pydrake中builder.Connect()报错“无法将Python实例转换为C++类型”排查

问题原因分析

你遇到的类型转换错误,核心是输出端口和输入端口的抽象值类型不匹配——尽管打印端口时显示的模板参数都是float,但底层的抽象值容器类型存在差异:

  • 输出端口:使用alloc=SpatialForce时,Drake会自动将其包装为Value[SpatialForce]类型的抽象值(Value是Drake对具体类型的通用包装器)。
  • 输入端口:AbstractValue.Make(SpatialForce())创建的是AbstractValue的直接实例,其底层存储SpatialForce,但容器类型是AbstractValue而非Value[SpatialForce]。

Drake的端口连接要求两端的抽象值类型严格一致,这种容器类型的差异导致了C++类型转换失败。

解决方案

修正任意一端的端口声明,让两边的抽象值容器类型匹配即可,两种可选方式:

方式1:调整输出端口的alloc参数

将输出端口的alloc改为返回AbstractValue.Make(SpatialForce())的lambda,确保和输入端口类型一致:

producer.DeclareAbstractOutputPort("output", alloc=lambda: AbstractValue.Make(SpatialForce()), calc=fake_calc)

方式2:调整输入端口的model_value参数

将输入端口的model_value改为Value[SpatialForce](),匹配输出端口的Value容器类型:

consumer.DeclareAbstractInputPort("input", model_value=Value[SpatialForce]())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:45:26