理解代数循环错误消息

时间:2018-06-12 08:05:46

标签: drake

当我的程序抛出一个代数循环错误,如下面的

terminate called after throwing an instance of 'std::runtime_error'
  what():  Algebraic loop detected in DiagramBuilder:
  A depends on
  B depends on
  C depends on
  D depends on
  E
Aborted (core dumped)

这是否意味着我有以下循环

A --> B --> C --> D --> E --> A

或者只是说在E检测到循环(而AD只是一些额外的背景),即

A --> B --> C --> D --> E --> (any one of A to D)

因为A的值绝对没有办法影响我系统中E的值......

1 个答案:

答案 0 :(得分:0)

鉴于您的抽象系统名称很难知道,但代数循环检查逻辑在这里:

https://github.com/RobotLocomotion/drake/blob/2b275fc6dd4c60ef72c9f4fa1d643a261e38125f/systems/framework/diagram_builder.h#L225

如果图中的循环依赖是真实的(就像在任何反馈循环中那样),那么你必须确保循环中至少有一个节点不是直接馈通"。请注意,大多数带有反馈的图表通过使工厂具有状态来破坏代数循环(输出取决于状态,而不是直接在输入上)。