【Py_trees】《Demos — py_trees documentation》学习笔记

本文介绍了py_trees库的几个示例教程,特别是上下文切换机制,它模仿函数栈在机器人编程中的应用,如移动机器人导航和家庭服务机器人的任务切换。还提到了黑板命名空间和重映射,以及如何通过dot-graphs可视化行为树结构。
摘要由CSDN通过智能技术生成

Introduction

《Demos — py_trees documentation》是 py_trees 官方文档提供的代码示例教程,包含了多个示例;

Study steps

  1. 探索性学习
  2. 总结归纳demo的作用

1. py-trees-demo-blackboard-namespaces:黑板命名空间的使用

2. py-trees-demo-blackboard-remappings:演示黑板重映射

3. py-trees-demo-context-switching:演示上下文切换

Claude:
这个 py_trees 演示代码展示的上下文切换机制,其主要应用场景是在机器人编程中。
比如在移动机器人领域,我们会定义不同的导航上下文,如避障、跟踪、寻路等。在不同的导航场景下,机器人需要加载不同的地图、参数、算法。

使用这个上下文切换机制,我们可以:

  1. 在一个行为树的一个分支下,先备份当前的导航上下文(如地图、参数等)
  2. 切换到新的导航上下文(加载新的地图、参数等)
  3. 执行这个导航场景需要的一系列行为
  4. 最终无论这个场景成功还是失败,都可以恢复原始的上下文


这样就可以很方便地在不同的导航上下文之间切换,而无需担心原始上下文被修改。
另一个应用场景是在家庭服务机器人中, 在执行完一个任务后,可以切换回默认上下文,避免之前为了完成某任务而改变的上下文状态影响到其他任务的执行。
所以这种上下文切换机制可以让复杂的机器人应用在不同的场景和任务之间更加流畅地切换,是行为树编程中的一个很有用的模式。

“上下文切换机制于函数栈概念非常类似”

Claude:

  • 这里的上下文切换机制与编程中的函数栈概念非常类似。
  • ContextSwitch 行为的 initialise() 方法在进入新的上下文前先将当前的上下文信息保存起来,这就像是在函数被调用前,将当前函数的局部变量等信息压入栈中。
  • 然后在新的上下文(函数)执行完毕后,ContextSwitch 的 terminate() 方法将先前保存的上下文信息恢复回来,这就像是函数执行完后,从栈中弹出之前保存的上下文(局部变量等),返回到调用函数的状态。
  • 所以这个上下文切换机制确实非常类似栈这种数据结构在函数调用时保存和恢复执行上下文的作用。
  • 将上下文封装和保存起来,让不同的任务可以不相关地平滑切换,也是很多编程语言中函数调用的基础。这个演示代码很好地利用了这一概念来实现行为树的上下文切换。
  • 行为树在许多方面的编程思想和概念都能找到对等的实现机制。这也是行为树能够灵活可靠地应用在机器人编程中的重要原因之一。

4. py-trees-demo-dot-graphs:渲染 dot graph

相关API

py_trees.behaviours.Behaviour.blackbox_level:黑盒级别,用于在绘制结构图时控制黑盒折叠或展开子树的层级。

代码分析

functions

main() -> None
185 - if py_trees.utilities.which("xdot")::判断是否安装了xdot工具
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值