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

如何在Drake系统构建后确定抽象输入端口的类型?

Drake抽象端口类型/结构的无连接确定方法
  • 用端口自带的GetType()直接拿类型:不管是向量端口还是抽象端口,调用B.get_input_port(端口索引).GetType()就能直接获取该端口的数据类型,完全不需要创建上下文或者评估端口,从根源避免未连接的报错。
  • 拿默认值推导结构:如果需要知道抽象端口的具体结构(比如内部数据格式),可以调用B.get_input_port(端口索引).get_default_value(),这个方法不需要端口连接就能返回预设的默认抽象值实例,通过这个实例就能直接复刻出对应结构的输出端口。
  • 实操示例代码:
    # 获取系统B第0个输入端口的类型
    port_type = B.get_input_port(0).GetType()
    # 获取该抽象端口的默认值实例
    default_abs_val = B.get_input_port(0).get_default_value()
    # 在系统A中声明对应结构的抽象输出端口
    A.DeclareAbstractOutputPort(
        "matched_output",
        # 用默认值克隆生成输出模板
        lambda: default_abs_val.Clone(),
        # 这里可以根据需求实现输出逻辑,示例直接用默认值
        lambda context, output: output.SetFrom(default_abs_val)
    )
    
  • 特殊情况处理:如果目标抽象端口没设置默认值,get_default_value()会报错,这时可以结合GetType()拿到的类型信息,用Drake的AbstractValue.Make()配合对应类型来生成模板实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:12:05