haskell - FRP 中的无扰动传输

标签 haskell frp arrows control-theory netwire

我可以构建一个PID controller在 Haskell FRP 库中 netwire使用为 Wire 提供的 ArrowLoop 实例中的 loop

我还可以使用 switch 实现 Controller 之间或 Controller 与手动输入之间的切换。

如何实现无扰动传输,例如使用解释的“跟踪”策略 here (或在任意数量的控制工程文章/书籍中)?如果性能良好,另一种策略可能是可以接受的,但跟踪方法对我的应用程序很有吸引力,因为它还解决了抗饱和问题。

我无法仔细查看框图,无法使其看起来像两个(或一个?)循环应用程序的类型。

最佳答案

每个图中都有两个循环。当找到循环来重新绘制图表时,这会很有帮助,以便所有输入进入所有元素的同一侧,所有输出离开相同的其他侧,并且如果可能的话,尽量减少线交叉。在这些图中,输入进入元素的底部、左侧或顶部,输出离开右侧。

整个系统有一个循环,将过程的输出输入到减法中进行误差比较:

Overall PID process

控制系统有一个回路,将选择 Controller (PID Controller 或手动控制)后的最终控制输出送入跟踪PID Controller 。整体输出是最右侧的输出。

Manually overridden PID Controller

跟踪 PID Controller 有两个循环。一是导数的反馈回路。导数的循环可能会在另一个组件中消失。另一个循环将PID Controller 的输出反馈到PID Controller 的输出和实际控制过程的控制输出之间进行比较。请注意,此图中 P、D 和 I 分支的顺序不同,以消除线交叉

Tracking PID controller

请注意,如果跟踪 PID Controller 将其自己的输出连接到 Track,则与第一次减法的差将为 0,并且积分分支将不会因添加 0 而改变。

关于haskell - FRP 中的无扰动传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24878471/

相关文章:

performance - 对于小矩阵,纯 Haskell 比 HMatrix 快 10 到 100 倍?

parsing - 将子例程放入解析器的优雅方法是什么?

haskell - 添加类型级自然数

javascript - 如何对 baconJS 中的 takeUntil 流使用react

javascript - 响应式(Reactive)编程与事件驱动编程有何不同?

haskell - 链接类型为 `a b [c]` 和 `a c d` 的箭头

haskell - 具有 kind * -> * 的类型的示例,该类型不能是 Functor 的实例

ios - 使用 ReactiveCocoa 重试异步操作

javascript - 通过键盘箭头在 4 个方向上浏览图像

r - 如何在ggplot2中绘制漂亮的箭头