如何在pydrake中追溯输入端口所连接的输出端口?
如何追溯DiagramBuilder中输入端口的连接源
要自动获取控制器期望值输入端口对应的上游输出端口,你可以利用DiagramBuilder框架中端口的内置方法直接追溯连接关系,无需手动记录。以下是具体实现方式(以常用的Drake框架为例,不同框架的方法名可能略有差异,但核心逻辑一致):
获取目标输入端口:先拿到控制器的期望值输入端口实例。假设你的控制器对象是
controller,输入端口的名称为desired_value,可以通过框架提供的端口获取方法拿到它:// C++ 示例 const InputPort<double>& desired_input_port = controller->GetInputPort("desired_value");# Python 示例 desired_input_port = controller.get_input_port("desired_value")追溯连接的输出端口:通过输入端口的内置方法直接获取与之连接的上游输出端口:
// C++ 示例 const OutputPort<double>* connected_output_port = desired_input_port.GetConnectedPort(); // 可进一步获取输出端口所属的系统 if (connected_output_port != nullptr) { const System<double>& source_system = connected_output_port->get_system(); // 后续可对source_system或端口进行数据读取、记录等操作 }# Python 示例 connected_output_port = desired_input_port.get_connected_port() if connected_output_port is not None: source_system = connected_output_port.get_system() # 后续处理逻辑异常处理:注意如果输入端口未被连接,上述方法会返回空指针(C++)或
None(Python),实际使用时一定要添加判断,避免程序崩溃或报错。
这种方式完全依赖框架的连接管理机制,无需手动维护连接映射,当系统拓扑调整时代码也能自动适配,非常适合你的监控系统中动态获取期望值来源、计算误差并记录数据的需求。
内容的提问来源于stack exchange,提问作者Eric Cousineau
相关产品推荐
相关产品推荐

