fuel无人机自主探索代码解读3——fast_exploration_fsm.cpp【状态机】

news2025/6/24 8:49:58

一、概述

fast_exploration_fsm.cpp订阅实时定位和目标点信息,每隔0.01s执行一次状态机,进行状态切换;每隔0.05s执行一次碰撞检测,按需进行重新规划;每0.5s执行一次边界回调定时器,对于处于WAIT_TRIGGER和FINISH状态的规划器进行边界生成、视点计算和代价求解等。核心为执行变量state_。

二、主要函数及作用

1、FastExplorationFSM::init

作用:
1、fsm参数及数据初始化
2、探索管理类及规划可视化类的初始化
3、状态机变量初始化
4、ros中订阅发布及定时器的声明

2、FastExplorationFSM::FSMCallback

作用:0.01s执行一次状态机切换判断,本质是根据各种触发条件完成规划器在各状态间的转移,具体状态切换过程见下图

3、FastExplorationFSM::callExplorationPlanner

作用:根据当前起点位置 起点速度  起点加速度  起点航向【yaw  yaw‘  yaw“】进行全流程的探索规划。
     如果探索规划成功【当前位置、速度、加速度、yaw-----》最优视点【位置、yaw】】,则进行fd_->newest_traj_【最新局部轨迹】的赋值:
     b样条曲线次数、起始时间、索引id、局部轨迹位置b样条控制点位置和节点向量、局部轨迹yaw的b样条的控制点和时间间隔
流程:                  1、基于当前帧点云的区域生长边界搜索、pca主成分分析拆分、过时边界删除,得到临时边界簇【珊格坐标、体素滤波后珊格坐标、AABB包围框的下边界、AABB包围框的上边界、平均位置】
                       2、临时边界视点信息【位置、yaw【边界相对于视点位置】、可视珊格数】计算,并将其分裂为有效边界【按照可视边界珊格数进行视点排序】和无效边界,并进行【有效边界的索引更新】
                       3、进行TSP的全局引导路径生成,基于dijsktra的局部视点修正,得到局部规划的终点位置和yaw【某视点位置与yaw】
                       4、以当前点为起点,3中给点视点为终点,采用nlopt进行全参数的局部轨迹规划、b样条的yaw轨迹优化,更新局部轨迹信息【local_data_中除了start_time_未更新】
返回值:1、NO_FRONTIER:空间没有有效边界      2、FAIL:探索规划的起点和终点之间不存在A*无碰路径        
       3、FAIL:无碰A*路径的长度在最近和最远距离阈值范围之间:基于动力学路径搜索得到全局路径,采样后基于fast planner使用nlopt得到优化后的局部轨迹控制点位置、时间间隔,失败
       4、SUCCEED:成功完成本次探索规划

4、FastExplorationFSM::visualize

作用:
1、进行当前有效边界【立方体序列,涉及多余的失效边界的清空】的可视化显示【/planning_vis/frontier】
2、进行局部轨迹b样条采样点【时间间隔:0.01】和控制点【此处不显示】的可视化显示【球列:/planning_vis/trajectory】

5、FastExplorationFSM::clearVisMarker

作用:函数体为空

6、FastExplorationFSM::frontierCallback

作用:0.5s的边界回调定时器,当探索规划器状态机处于WAIT_TRIGGER和FINISH,进行环境边界簇更新、视点计算、cost计算、有效边界簇的可视化显示

7、FastExplorationFSM::triggerCallback

作用:子目标点序列订阅。若状态机当前状态为WAIT_TRIGGER,且目标点有效【大于-0.1时】,则状态机的当前状态由WAIT_TRIGGER-----》PLAN_TRAJ

8、FastExplorationFSM::safetyCallback

作用:0.05s执行一次的安全检测定时器:当前状态机处于EXEC_TRAJ状态,且与当前位置的6m范围内局部轨迹存在发生碰撞的轨迹点,则状态切入PLAN_TRAJ

9、FastExplorationFSM::odometryCallback

作用:odom定位的订阅【经过话题重映射】。无人机当前位置、速度、航向四元数及yaw的更新、标志位置于true【表明接受过定位数据】

10、FastExplorationFSM::transitState

输入:状态机的新状态值  字符串
作用:状态机的当前状态值更新为给定状态,并打印相关状态转移信息

三、状态机:状态转移图

在这里插入图片描述

四、FUEL链接

1、fuel无人机自主探索代码解读1——map_ros.cpp【地图ros接口】
2、fuel无人机自主探索代码解读2——sdf_map.cpp【占据栅格地图、膨胀占据栅格地图、ESDF】

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

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

相关文章

nacos注册中心配置中心

文章目录 1.Nacos安装与简单使用1.1. Nacos安装指南Windows安装下载安装包解压端口配置启动访问 Linux安装安装JDK上传安装包解压端口配置启动 1.2.服务注册到nacos使用步骤引入依赖配置nacos地址重启 示例父工程pom.xmluser-servicepom.xmlapplication.ymlUserApplicationUser…

杨校老师项目之基于SpringBoot的理发店的预约管理系统

原系统是SSMJSP页面构成,先被修改为SpringBoot JSP页面 自助下载渠道: https://download.csdn.net/download/kese7952/89417001,或 点我下载 理发师信息: 理发师详细信息 公告信息 员工登录: 管理员登录

Python的网络请求

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在上一节中多次提到了URL地址与下载网页,这两项是网络爬虫必备而又关键的功能,说到这两个功能必然会提到HTTP。本节将介绍在P…

关于投标中的合理均价基准差径靶心法(KIMI回答)

投标中的合理靶心法到底是什么呢?用了KIMI来进行回答:

python-jenkins调用流水线设置“丢弃旧的构建”(discard old builds)

背景 Jenkins任务执行,随之构建次数增多,构建日志所占磁盘大小不断增大,需要配置清除策略。 而 discard old builds 就是配置丢弃旧的构建;若是我们使用python-jenkins 调用修改配置该如何设置? 调用设置 这里是按…

液晶拼接屏企业应该采取哪些措施来提升整体竞争力和市场地位呢?

步入智能科技时代以来,商显行业面对着各式各样的挑战,人工智能、AI大模型等整合中,液晶拼接屏企业应该采取哪些措施以提升整体竞争力和市场地位。下面小编个人观点简单说一下;下是一些关键的措施: 首先,加…

web端即时通信技术

web端即时通信技术 对于IM/消息推送这类即时通讯系统而言,系统的关键就是“实时通信”能力。所谓实时通信有以下两层含义 客户端可以主动向服务端发送信息。 当服务端内容发生变化时,服务端可以实时通知客户端。 HTTP局限 Http是客户端/服务器模式中…

Linux文件系统讲解!

一、Linux文件系统历史 1、在早期的时候Linux各种不同发行版拥有自己各自自定义的文件系统层级结构。 2、当我用Red hat转向玩Debian时,我进入/etc我都是懵的。 3、后来Linux社区做了一个标准、FHS(文件系统标准层次结构)。来帮助Linux系统的…

Android 13 高通设备热点低功耗模式(2)

前言 之前写过一篇文章:高通热点被IOS设备识别为低数据模式,该功能仿照小米的低数据模式写的,散发的热点可以达到被IOS和小米设备识别为低数据模式。但是发现IOS设备如果后台无任何网络请求的时候,息屏的状态下过一会,会自动断开热点的连接。 分析 抓取设备的热点相关的…

windows下编译linux的go程序报错gcc_linux_amd64.c: In function ‘_cgo_sys_thread_start‘:

报错解决 执行报错 报错解决 其他补充 windows下编译linux 64位程序 set GOARCHamd64 set GOOSlinux set CGO_ENABLED0 go build手把手教你实现Golang跨平台编译 报错解决其他补充windows下编译linux 64位程序Windows下编译Mac平台64位可执行程序:Linux 下编译…

NewspaceAi之GPT使用新体验

GPT功能 使用地址:https://newspace.ai0.cn/ 上车 挂挡 踩油门,一脚到底,开始你的表演 问题1:你能做什么详细告诉我? 下面内容是GPT的回答 当然!作为一个基于GPT-4架构的AI,我能够在许多方面为…

成功在服务器liunx-ubantu上安装pytorch

sudo pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118参考链接: 教程(部分参考) Pytorch官网

算法设计与分析 实验1 算法性能分析

一、实验目的 1、掌握选择排序、冒泡排序、合并排序、快速排序、插入排序算法原理 2、掌握不同排序算法时间效率的经验分析方法,验证理论分析与经验分析的一致性。 二、实验概述 排序问题要求我们按照升序排列给定列表中的数据项,目前为止&#xff0c…

kafka原理简介

Kafka是由LinkedIn开发的一个分布式发布/订阅的消息系统和一个强大的队列,使用Scala编写,它以可扩展和高吞吐率而被广泛使用。 Kafka适合离线和在线消息消费。 Kafka消息保留在磁盘上,并在群集内以master-flower方式实现数据同步,…

RPA-UiBot6.0控制与运行机器人 —工作任务智能调度自动运行

前言 来也产品文档中心 来也产品文档中心 (laiye.com)https://documents.laiye.com/ 友友们你们是否曾因为例行性工作的繁琐而苦恼?是否想要让机器人帮你自动执行这些任务?小北的这篇博客将为友友们揭示其中的奥秘,让我们一起学习如何通过RP…

动手学深度学习33 单机多卡并行

单机多卡并行 更多的芯片 https://courses.d2l.ai/zh-v2/assets/pdfs/part-2_2.pdf 多GPU训练 https://courses.d2l.ai/zh-v2/assets/pdfs/part-2_3.pdf 当transformer模型很大,有100GB的时候只能用模型并行。 数据并行,拿的参数是完整的&#xff1f…

202479读书笔记|《你是人间的四月天》——谁又能参透这幻化的轮回, 谁又大胆的爱过这伟大的变幻?

202479读书笔记|《你是人间的四月天》——谁又能参透这幻化的轮回, 谁又大胆的爱过这伟大的变幻? 散文诗歌书信 《你是人间的四月天(果麦经典)》作者林徽因,才女的散文,诗歌,书信集选。很值得一…

IINA for Mac v1.3.5 音视频软件 安装教程(保姆级)

Mac分享吧 文章目录 效果一、准备工作二、开始安装1、双击运行软件,将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功 三、运行测试1、打开软件,测试2、查看版本号 **安装完成!&#xf…

泉州职业技术大学2024Java期末题库【基础题】

1.根据输入的表示星期几的数字,对应输出它的英文名称。 考察内容:Switch语句的掌握 public class test1 {public static void main(String[] args) {//switch语句复习//创建对象java.util.Scanner input new java.util.Scanner(System.in);//提示输入语句System.ou…

Python Runtime指标采集

一、背景 最近在复盘Python的相关内容,到了监控相关部分发现,例如像Golang采集Runtime相关指标,我们可以使用Golang的Promethues客户端SDK进行采集metrics指标。 这些指标就包括了程序的CPU利用率、内存使用率、内存使用字节数、协程数量、GC耗时、GC发生…