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

使用Drake设计LQR控制器时遭遇抽象值端口错误的咨询

问题解答

错误含义解析

  • 抽象值端口指的是该端口传输的数据并非数值向量类型(如float/double数组),而是Drake定义的抽象数据结构(比如SceneGraph的几何查询结果、场景图消息这类非数值型数据)。
  • Linearize函数底层依赖的FirstOrderTaylorApproximation只能处理数值向量类型的输入输出端口,因为线性化需要对数值计算雅克比矩阵,抽象类型无法进行求导运算,因此触发该错误。

代码问题分析

你直接对绑定了SceneGraph的MultibodyPlant调用Linearize,此时系统会包含SceneGraph相关的抽象输入/输出端口,这些端口不属于动力学分析需要的数值端口,导致线性化工具误将抽象端口纳入处理范围。

修复方案

修改Linearize调用,明确指定要线性化的输入端口(驱动输入端口)和输出端口(状态输出端口),避免包含抽象端口:

# 替换原Linearize调用代码
actuation_port = plant.get_actuation_input_port()
state_output_port = plant.get_state_output_port()
linear = Linearize(plant, context, 
                   input_port_indexes=[actuation_port.get_index()],
                   output_port_indexes=[state_output_port.get_index()])

另外,你代码中MatrixGain(-K )这一行是无效冗余代码,直接保留controller = builder.AddSystem(MatrixGain(-K))即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:13:18