gpt4 book ai didi

c++ - 对在Boost.statechart中完成的所有正交状态使用react

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:48 25 4
gpt4 key购买 nike

我正在研究基于状态机的机器人控制程序。虽然程序使用Qt状态机框架,但我也尝试使用Boost.statechart(BS)作为理论练习和学习/评估库的方式来实现它。

在Qt版本中,我在多个地方使用了以下模式:复合状态具有并行嵌套的子图,每个子图最终都达到最终状态。当所有并行子状态都完成时,父状态会发出“ finished()”信号,这会导致计算机转换到下一个顶级状态。例如。 (当心:伪图):

Idle -calibRequest-> Calibrate( calibrate_camera | calibrate_arm ) -finished-> Idle


calibrate_*状态又在其中具有嵌套状态,例如 S -trigger[calibrated?]-> F,其中 F是最终状态。当两个 calibrate_*状态都达到各自的 F状态时, finished信号使状态机转换为 Idle

Qt的并行子状态类似于BS的正交嵌套状态。起初,我虽然说“终止”是BS与最终状态的类似物,但实际上并非如此。这更像是“终止状态机,除非还有正交的东西去”-一旦终止所有正交状态,父状态也将终止,而没有任何过渡的机会。在终止时发布事件也无济于事,因为没有状态可以传递这些事件。

我最终实现了“最终状态”,该状态在到达时会发布一个通知事件,并在父状态下对此事件做出反应-检查所有正交状态是否都已达到其最终事件并进行转换。这基本上是Qt State Machine方法的重新实现,但是每次我需要这种模式时都必须重做。但是,也许我只是习惯于一种实现这种效果的方法,以至于我没有其他选择?

最佳答案

我不知道这是否对您有帮助,但是我已经实现了一个替代的C ++状态机框架:STTCL
sttcl :: ConcurrentCompositeState <>类将跟踪已完成(正交状态)区域,并在所有区域完成后自动完成。终结可以由实现类进行挂钩。

世界银行
贡瑟

关于c++ - 对在Boost.statechart中完成的所有正交状态使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6264146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com