ROS1导航状态机与ROS2导航行为树

ROS1和ROS2导航框架中用到的各种底层算法基本相同,比如代价地图,全局路径规划和局部路径规划等,它们最大的不同在于整个系统框架设计。

一,ROS1 导航状态机

状态机

ROS1导航功能包move_base是一个状态机,从软件设计上来看,使用了典型的状态设计模式,如下图所示,机器人状态在PLANNING、CONTROLLING、CLEARING和FREE之间进行转换。

当收到NewGoal后,系统先进入PLANNING状态,进行全局路径规划,规划成功后进入CONTROLLING状态,进行局部路径规划,如果多次规划失败则进入CLEARING状态。在CONTROLLING状态下,如果失败时间不是很长,则会重新进入全局路径规划,如果在一个地方震荡,或者失败了很长一段时间,则系统也进入CLEARING状态,如果到点目标点,则进入FREE状态。 进入CLEARING后,机器人主要进行各种恢复(recovery)动作,包括原地旋转、清楚代价地图等,每成功进行一次恢复动作,系统重新进入PLANNING状态。

二,ROS2导航行为树

ROS2对整个导航框架进行了重写,引入了行为树对各个任务进行调度。行为树本质上也是一种有限状态机,但它极大地将软件进行了解耦,迎合松耦合、高内聚的软件设计思想。Ros2 导航到点的行为树如下:
行为树
ROS2导航行为树:https://navigation.ros.org/behavior_trees/index.html

行为树在结构上就是树形,有节点(此节点与ROS里的节点定义不一样,就是树状结构里的节点)的概念,根据功能,节点可分为:动作节点(Action Nodes),条件节点(Condition Nodes),装饰节点(Decorator Nodes)和控制节点(Control Nodes),其中控制节点又分为序列控制器(PipelineSequence)、恢复控制器(Recovery)和循环控制器(RoundRobin),这些分类,是将各种可能用到的处理逻辑抽象出来形成这些节点。

上图中蓝色方框代表一个动作节点,执行一个具体的动作,比例如ComputePathToPose执行全局路径规划,FollowPath执行局部路径跟随等;RateController是一个装饰器,表示系统会以该装饰器给定的频率调用其子树;绿色方块代表控制节点,黄色方框代表条件节点。

整个行为树顶层是一个Recovery控制节点,可分为左边导航子树和右边恢复子树,该类型控制节点表示,当左边导航子树返回SUCCESS,整个就是SUCCESS,左子树返回FAILED,则会触发右子树的Recovery尝试恢复,每进行一次Recovery,则重新执行一次左子树,直到下列条件满足则退出此次回复循环:
1, 右子树恢复次数达到number_of_retries次数;
2, 左子树返回SUCCESS;
3, 右子树返回FAILED。

NavigateWithReplanning是一个序列控制节点,它会先以RateController装饰节点规定的频率先执行左子树,待左子树返回SUCCESS则会执行右子树,其左右两个子树均是恢复节点,恢复节点的逻辑与前文介绍的一致,这样的序列表示只有全局规划成功了才可以执行局部路径跟随。

循环节点RoundRobin会从左到右依次执行各个节点,如果有一个返回SUCCESS,则该节点返回SUCCEESS,如果所有节点都返回FAILED,则该节点最终返回FAILED。

每一个ReactiveFallback控制节点左子树是一个条件节点GoalUpdated,表示如果目标被更新了,则该子树返回SUCCESS。

行为树通过自定义的节点和逻辑,使得调度逻辑和功能算法分开,减轻了功能算法过程中的相互依赖问题,更加方便团队合作开发。此外,ROS2中的行为树便于编辑,还可以在运行时进行可视化,方便开发者进行调试,详见链接ROS2中的行为树 BehaviorTree。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/871684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sip协议栈简介

SIP协议栈简介 SIP协议栈流程 数据链路层:当SIP消息从网络中传输到达TCP/IP协议栈时,首先被接收到的是数据链路层的数据帧。数据链路层会对数据帧进行解封装,得到网络层的IP数据报。 网络层:网络层会对IP数据报进行解析&#xf…

【GDCPC2024】【min_25筛】J.另一个计数问题

题目 传送门 思路 考场上的思路和正解差远了,属实是反演学魔怔了。 首先,对于所有的 x x x,它可以通过 2 x 2x 2x 和 2 2 2 连通,而 2 2 2 又可以和所有 m i n p ≤ ⌊ n 2 ⌋ minp\leq \left\lfloor\frac{n}{2}\right\…

浏览器插件利器--allWebPluginV2.0.0.16-alpha版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX插件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持chrome、FireFo…

江协科技51单片机学习- p27 I2C AT24C02存储器

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

Wikijs 部署教程

以下是一个 Wikijs 部署的简单教程,涵盖了使用 Docker 和直接安装两种方式: 方法一: 使用 Docker (推荐) Docker 是一个方便快捷的方式来部署 Wikijs,它可以避免许多手动配置步骤。 安装 Docker: 按照 https://docs.docker.com/…

JRE、JVM、JDK分别是什么。

JDK JDK的英文全称是Java Development Kit。JDK是用于制作程序和Java应用程序的软件开发环境。JDK 是 Java 开发工具包,它是 Java 开发者用来编写、编译、调试和运行 Java 程序的集合。JDK 包括了 Java 编译器(javac)、Java 运行时环境&…

【已解决】如何在一篇笔记中呈现另一篇笔记的内容,hover editor插件?obsidian

问题 问题:【已解决】如何让一篇笔记内容在另一篇的笔记里呈现? - 疑问解答 - Obsidian 中文论坛 如何在一篇笔记里,在插入内链接时,同时展示内链接的笔记中的内容? 比如: 哲学是一门[[学问]]这篇笔记…

2024年上半年信息系统项目管理师——综合知识真题题目及答案(第1批次)(3)

2024年上半年信息系统项目管理师 ——综合知识真题题目及答案(第1批次)(3) 第41题:在应用集成中,有多个组件帮助协调连接各种应用。其中()利用特定的数据结构,帮助开发人…

电脑硬盘里的文件能保存多久?电脑硬盘文件突然没了怎么办

在数字化时代,电脑硬盘作为我们存储和访问数据的重要设备,承载着无数珍贵的回忆、工作成果和创意灵感。然而,硬盘里的文件能保存多久?当这些文件突然消失时,我们又该如何应对?本文将深入探讨这两个问题&…

13-《鸭跖草》

鸭跖草 鸭跖草,拉丁学名:(Commelina communis),别名碧竹子、翠蝴蝶、淡竹叶等。属粉状胚乳目、鸭跖草科、鸭跖草属一年生披散草本。鸭跖草叶形为披针形至卵状披针形,叶序为互生,茎为匍匐茎&…

实验发现AI提高了个人创造力,但降低了整体创造力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【ingress-nginx】安装配置及Helm工具安装

【ingress-nginx】安装配置及Helm工具安装 安装时候需要用到一个工具——Helm【相当于linux中的yum工具】。 一,Helm安装 官网:https://helm.sh/docs/intro/install # 下载 wget https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz# 解压 tar -zxv…

【数据结构】初探数据结构面纱:栈和队列全面剖析

【数据结构】初探数据结构面纱:栈和队列全面剖析 🔥个人主页:大白的编程日记 🔥专栏:数据结构 文章目录 【数据结构】初探数据结构面纱:栈和队列全面剖析前言一.栈1.1栈的概念及结构1.2栈的结构选择1.3栈的…

Win10工具:批量word转png图片

首先声明这个小工具是小编本人开发的,无任何广告,会员收费机制等,永久使用。允许公司或个人使用,不允许倒卖,否则发现后会追究法律责任,毕竟开发不易。工具是用python开发的。 功能非常单一,就…

做过的试卷怎样才能去掉答案打印

对于做过的试卷,如想将其打印比较难以解决的困难就是“去除打印”。当然,目前应用上市场上也会有很多能够去除打印的应用软件,如“试卷擦除宝”这是一款专业的试卷擦除软件,能够擦除试卷上的手写笔迹,并将试卷转化为电…

python:绘制一元三次函数的曲线

编写 test_x3_3x.py 如下 # -*- coding: utf-8 -*- """ 绘制函数 y x^33x4 在 -3<x<3 的曲线 """ import numpy as np from matplotlib import pyplot as plt# 用于正常显示中文标题&#xff0c;负号 plt.rcParams[font.sans-serif] […

Games101——光珊化——深度缓存——shading着色 1

深度缓存 如何解决远近的问题&#xff0c;能正确的覆盖 按照画作来说&#xff0c;先画出远处的物体&#xff0c;再画出近处的物体&#xff0c;近处会将其覆盖&#xff0c;这种算法叫做画家算法 但事实上&#xff0c;排序不仅要花更多的时间&#xff0c;而且排序并不容易&…

RIP路由协议概述

RIP【Routing Information Protocol】 RIP是为TCP/IP 环境中开发的第一个路由选择协议标准 RIP是一个【距离——矢量】路由选择协议 当路由器的更新周期为30s到来时&#xff0c;向邻居发送路由表 RIP以跳数作为唯一度量值 RIP工作原理 RIP路由协议向邻居发送整个路由表信息RI…

农场资源的获取

一、网站 资源 二、搜索土壤资源 1、找到类别&#xff0c;点击Browse Texture 2、搜索、选择 3、搜索Brown Mud Dry 4、搜索Brown Mud 三、

[web]-图片上传、文件包含-图片上传

题目内容提示&#xff1a;上传图片试试吧&#xff0c;注意统一时区问题 打开页面如图&#xff0c;源码没有过滤&#xff0c;随便输入&#xff0c;进入上传目录 根据链接可以看到是文件包含&#xff0c;可以利用编码读取源码&#xff0c;这里只列出有用页面的编码&#xff08;?…