行为树是ros2比较大的改动地方之一,替代了之前ros1中的状态机。行为树和状态机之前的差异这里不在做赘述,感兴趣的可以搜索相关的资料。

常见的行为树(bt)框架有C++版本的BehaviorTree.CPP库,和python版本的py_tree库。看个人喜好,因为我工作中写逻辑框架的时候需要快速实现并且可视化下框架结构后用于小组讨论,所以我在项目的初期甚至整个项目中也都是使用py_trees。

使用命令行安装

sudo apt install ros-foxy-py-trees                     # 树结构包

sudo apt install ros-foxy-py-trees-ros-viewer   # 查看树的结构脚本文件

行为树概念大致分为:

1. 行为 behavior;

2. 生命周期;

3. 黑板(blackboard);

4. 可视化行为树;

· 其中behavior算是框架中的最小粒度,一切操作逻辑和流程都可以使用behavior来描述(我是这么理解的)。

· 生命周期,py_tree中的生命周期其实已经涵在行为树中,理解生命周期中的每个节点对于行为树什么时候启动什么时候终止有很大的帮助,因此需要将生命周期概念和行为树放一起。

实际使用中自定义的behavior基本上会遇到以下7个状态(后面详细说明什么时候触发这些状态)

__init__

setup()

initialise()

tick()

update()

stop()

terminate()

· 黑板(blackboard) 是行为树中提出的一个概念,将一些需要交换数据的变量还有一些中间参数放到黑板上,其他的行为可以在上面读写。还是很形象的,我们上课的时候每个小朋友都是一个行为老师把内容写在黑板上,我们看到了内容就可以执行相应的行为(读书,默写啊什么)。

. 有的时候我们设计的行为树需要分享或者讨论,此时如果你拿一段代码给领导看,领导肯定头大,将所有的行为可视化往往是最佳方案。

先上一张和AGV业务相关的移动底逻辑模块框架,一般的时候总工绘制大的框架结构后,各部门会领取相应的模型进行任务逻辑搭建,下图是描述的是AGV视觉模块中一个子任务树。

这是一个简单的顺序执行的树结构,首先要判断前方没有障碍物才会让车调整位姿行驶到路中间,然后触发视觉检测二维码判断是否需要转弯还是直行,转弯和直行部分是抢占优先级,一旦触发转弯任务就不在进行直行。

通过图的方式表达逻辑能够方便修改和讨论逻辑上是否有BUG,比如因为业务的改动,只有直行这个模块,不需要转弯动作。可以直接在行为树中断开转弯子行为树即可。这对于一个简单的程序来说有点显得费力不讨好,但是一般的符合机器人系统有成千上万个行为组成,如果全部使用if..else while 写控制逻辑,维护和修改起来非常的麻烦。

机器人控制框架行为树py_trees <一、行为树介绍>相关推荐

  1. 线。段。树--树状数组-主席树

    简单了解一下线段树 以前写过的内容,搬运过来 线段树的应用场景:满足区间加法性质且多次查询,什么是区间加法性质,比如最大值,求和,树状数组.线段树.主席树依次. 线段树框架:建树--查询--更新... ...

  2. React:DOM树与虚拟DOM树(概念与区别)

    React:DOM树与虚拟DOM树(概念与区别) DOM的本质: 浏览器中的概念,用JS对象来表示页面上的元素,并提供了操作DOM对象的API: React中的虚拟DOM: 是框架中的概念,是程序员 ...

  3. 模板 - 树上问题(树的直径、动态查询树的直径、树的重心)

    整理的算法模板合集: ACM模板 目录 一.树的直径 树形DP 两次DFS / BFS(找到直径的两个端点) 二.动态修改树的边权并求每个时刻的直径(线段树) 三.树的重心 一.树的直径 树的直径满足 ...

  4. 解题报告:P3834 【模板】可持久化线段树 2(主席树)详解

    P3834 [模板]可持久化线段树 2(主席树) 题解 P3834 [[模板]可持久化线段树 2(主席树)] 1)静态求第k大数 可持久化线段树,不能用堆的方法存子结点了,所以用指针l表示左儿子r表示 ...

  5. 句法分析语料:宾州树库、UD树库

    句法分析语料:宾州树库.UD树库 目录 句法分析语料:宾州树库.UD树库 宾州树库 UD树库

  6. Boosting、Adaboost、AdaBoost模型的优缺点、提升树、梯度提升树GBDT

    Boosting.Adaboost.AdaBoost模型的优缺点.提升树.梯度提升树GBDT 目录 Boosting.Adaboost.AdaBoost模型的优缺点.提升树.梯度提升树GBDT Boo ...

  7. 决策树ID3、决策树C4.5、决策树CART、CART树的生成、树的剪枝、从ID3到CART、从决策树生成规则、决策树优缺点

    决策树ID3.决策树C4.5.决策树CART.CART树的生成.树的剪枝.从ID3到CART.从决策树生成规则.决策树优缺点 目录

  8. 暑假集训8.10-网络流套树剖套线段树

    题目:dtoj2797旅行商 其实就是裸的网络流套树剖套线段树其实代码不难码 emmmmmm我决定草率的直接上代码,这可能是一条无营养的博客.... #include<bits/stdc++.h ...

  9. 平衡查找树C语言程序,树4. Root of AVL Tree-平衡查找树AVL树的实现

    对于一棵普通的二叉查找树而言,在进行多次的插入或删除后,容易让树失去平衡,导致树的深度不是O(logN),而接近O(N),这样将大大减少对树的查找效率.一种解决办法就是要有一个称为平衡的附加的结构条件 ...

  10. 从B 树、B+ 树、B* 树谈到R 树

    作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由weedge完成,R 树部分由Frank ...

最新文章

  1. Java编写的五子棋小游戏
  2. [HDU] 5444.Elven Postman (堆)
  3. 5种SpringBoot热部署方式,你用哪种?
  4. 计算机科学陈国华,科学网—模式识别与智能系统是个什么专业? - 晏燕华的博文...
  5. mysql时间戳转日期
  6. 在微型计算机系统中 下列叙述正确的是,全国2011年10月高等教育自学考试计算机应用基础试题及答案...
  7. [NOIP2003] 提高组 洛谷P1041 传染病控制
  8. Linux能ping主机,但ping不了网关以及外网,显示包全丢失解决方案
  9. android+警告声音,android – 如何使用带有setAudioAttributes的警报音量播放铃声?
  10. [渝粤教育] 广东-国家-开放大学 21秋期末考试管理学原理★10013k1
  11. 2019年2月22日 深入理解计算机系统(CS:APP)第一章读书笔记
  12. cocos2dx中的层CCLayer
  13. 【器件知识】【设计】ESD专题-闩锁效应-大尺寸输出缓冲器
  14. m苹果放n篮子_m个苹果放入n个篮子
  15. 【转】未来10年经济走向及发展趋势
  16. 程序员转行一般是因为什么,会去哪些行业?
  17. 大话设计模式之设计原则
  18. 蚊虫叮咬后的去痒妙方大全
  19. mysql cursor nodata_mysql游标的使用 No data - zero rows fetched, selected
  20. STL vector :大理石在哪儿?

热门文章

  1. uefi 懒人版黑苹果_macOS Sierra 10.12.6(16G29) 变色龙引导懒人版CDR黑苹果镜像
  2. linux任务计划时间讲解,linux下计划任务详解
  3. 哈夫曼编码的理解(Huffman Coding)
  4. 我的Windows Server 2008激活
  5. 如何批量将 webp 格式的图片转换为 jpg 格式
  6. 《photoshopCS4中文版完全自学手册》视频教程
  7. 24-思科防火墙:ASA透明防火墙实验
  8. 网站接入qq客服在线聊天
  9. DM - Manager工具
  10. blackberry 7290 滚轮 垂直滚动