Introduction
《Demos — py_trees documentation》是 py_trees 官方文档提供的代码示例教程,包含了多个示例;
Study steps
- 探索性学习
- 总结归纳demo的作用
1. py-trees-demo-blackboard-namespaces:黑板命名空间的使用
2. py-trees-demo-blackboard-remappings:演示黑板重映射
3. py-trees-demo-context-switching:演示上下文切换
Claude:
这个 py_trees 演示代码展示的上下文切换机制,其主要应用场景是在机器人编程中。
比如在移动机器人领域,我们会定义不同的导航上下文,如避障、跟踪、寻路等。在不同的导航场景下,机器人需要加载不同的地图、参数、算法。
使用这个上下文切换机制,我们可以:
- 在一个行为树的一个分支下,先备份当前的导航上下文(如地图、参数等)
- 切换到新的导航上下文(加载新的地图、参数等)
- 执行这个导航场景需要的一系列行为
- 最终无论这个场景成功还是失败,都可以恢复原始的上下文
这样就可以很方便地在不同的导航上下文之间切换,而无需担心原始上下文被修改。
另一个应用场景是在家庭服务机器人中, 在执行完一个任务后,可以切换回默认上下文,避免之前为了完成某任务而改变的上下文状态影响到其他任务的执行。
所以这种上下文切换机制可以让复杂的机器人应用在不同的场景和任务之间更加流畅地切换,是行为树编程中的一个很有用的模式。
“上下文切换机制于函数栈概念非常类似”
Claude:
- 这里的上下文切换机制与编程中的函数栈概念非常类似。
- ContextSwitch 行为的 initialise() 方法在进入新的上下文前先将当前的上下文信息保存起来,这就像是在函数被调用前,将当前函数的局部变量等信息压入栈中。
- 然后在新的上下文(函数)执行完毕后,ContextSwitch 的 terminate() 方法将先前保存的上下文信息恢复回来,这就像是函数执行完后,从栈中弹出之前保存的上下文(局部变量等),返回到调用函数的状态。
- 所以这个上下文切换机制确实非常类似栈这种数据结构在函数调用时保存和恢复执行上下文的作用。
- 将上下文封装和保存起来,让不同的任务可以不相关地平滑切换,也是很多编程语言中函数调用的基础。这个演示代码很好地利用了这一概念来实现行为树的上下文切换。
- 行为树在许多方面的编程思想和概念都能找到对等的实现机制。这也是行为树能够灵活可靠地应用在机器人编程中的重要原因之一。
4. py-trees-demo-dot-graphs:渲染 dot graph
相关API
py_trees.behaviours.Behaviour.blackbox_level
:黑盒级别,用于在绘制结构图时控制黑盒折叠或展开子树的层级。