如何在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
相关产品推荐
相关产品推荐

