CMU - FarPlanning 代码速读

news2024/11/15 14:20:09

https://github.com/MichaelFYang/far_planner
https://www.cmu-exploration.com/

系统结构

image.png

  • Far Planner 属于 High-level planning module,进行全局规划,找到可行路径;
  • way_point发布给 Local plannerpath following

KeyPoint

Local-layer

  • 当前帧点云 ➡️ edge points ➡️ enclosed polygons ➡️ visibility graph
  • 动态障碍物
    • 将被遮挡的 visibility edges 删除;
    • 动态障碍物消失后,重新连接;
  • 点云提取多边形
    • 将点云映射到图像(鸟瞰图)上,黑色-可通行,白色-障碍物
      • 白色像素使用机器人尺寸进行膨胀均值滤波平滑
      • OpenCV 拓扑边缘点提取,输出 enclosed polygonsTopological structural analysis of digitized binary images by border following
      • 封闭多边形顶点稀疏化Algorithms for the reduction of the number of points required to represent a digitized line or its caricature
        • 顶点间内角用于量化障碍物曲率,内角太小的抛掉
      • image.png

Global-layer

  • 和 Local-layer 匹配,获得增量式更新
    • Local-layer 构建
      • 之前得到了封闭多边形,对 Edge 超过阈值的进行可视角度筛选;Edge 太短的角度噪声太大,没法选;
    • Local-Global 关联
      • 遍历 vertex,若两地图间的 vertex 位置重叠,则将其关联;
      • 关联后,更新 Global 中 vertex 的位置;Modern Methods for Robust Regression
        • 在 vertex 对应历史帧位置中挑选 inlier,然后对 inlier 求均值
      • Global 中长期未被关联的 vertex 根据投票删除
      • Local 中未被关联的 vertex 直接添加到 Global
      • Edge 更新
        • 若 Global 两点之间存在 Edge,则更新
        • 若不存在,则新增
      • 可视图更新
        • image.png
      • Talk 图
        • image.png

Planning on V-Graph

  • 在 Global-Layer 中添加 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rsy5uQxf-1684922016766)(null#card=math&code=P_{robot}&id=ID5nJ)]和 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dlYkMZ9t-1684922016693)(null#card=math&code=P_{goal}&id=Q9KPL)] 两个 vertex,并根据可视性连接 Edge;
  • 在 Global-Layer 中使用宽度优先搜索,找 robotgoal的可行最短路径
    • 与 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-okJ8FdWV-1684922016708)(null#card=math&code=P_{robot}&id=zpeCD)]能构成可视 Edge 的 vertex 构成 free space
      • 沿途所有 robot能看到的 vertex 均组成 free space
    • 其余 Global vertex 构成 unknown space【未探索区域】
  • 保存 V-Graph
    • 将带有 free space标识的 V-Graph 保存
    • 再次加载时,可选择是否
      • attemptable planning: 在 free space+ unknown space 中导航
      • non-attemptable planning:仅在 free space 中导航
      • image.png

Multi-layer

  • 用于飞行器场景,在 3D 空间中建立多个水平切片,并在每层切片构建多边形,跨层构建 3D 可见性;
  • image.png

Terrain traversability analysis module

  • 分割障碍物(obs)、地面(free)

Modules

外围模块

FARMaster

ContourDetector contour_detector_;	// 轮廓检测 - 处理当前帧点云
DynamicGraph graph_manager_;		// 全局图 nav_graph_
GraphPlanner graph_planner_;		// 可视图上的 Planning 模块
ContourGraph contour_graph_;		// 基于轮廓构造的局部图,并与全局图匹配

主要线程

  • PlanningCallBack()
    • 定时器线程,约 2.5 Hz
    • 在接收 Goal 任务之后,周期性执行可视图路径规划
  • Loop()
    • ROS 定时线程,2.5 Hz
    • 主要用于 V-Graph 的维护

  • NavNode
    • is_odom表示机器人当前位姿插入图中的 Node
      • 会随机器人位姿移动,属于 free node
      • 每次更新均为重新初始化
    • is_navpoint表示局部导航点,可探测范围内的一个临时目标点
      • 属于 free node
    • is_active表示与机器人很近的点、或邻近点【有点像 frontier
      • is_nearby,距离小于车身直径
      • 在 odom_node 的邻近点(connect_nodes)栈内
      • 当前点的邻近点都是 is_active
    • is_contour_match 是轮廓上的点

DynamicGraph::UpdateNavGraph

  • near_nav_graph_->extend_match_nodes_ 包含 边界点 和 active
  • new_nodes_当前帧检测到的 vertex,且没有 Global 匹配项;


GraphPlanner::UpdateGraphTraverability 生成两套代价地图


GraphPlanner::PathToGoal


Refs

  • 轮廓检测算法
    • Simplify Polylines with the Douglas Peucker Algorithm
  • far_planner 源码阅读笔记
  • 机器人自主导航从零开始第六步——FAR Planner全局路径规划算法
  • https://www.cmu-exploration.com/development-environment

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

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

相关文章

帮公司面了个要21K的测试,结果.....

深耕IT行业多年,我们发现,对于一个程序员而言,能去到一线互联网公司,会给我们以后的发展带来多大的影响。 很多人想说,这个我也知道,但是进大厂实在是太难了,简历投出去基本石沉大海&#xff0…

arm嵌入式系统下,手把手教你移植pppoe拨号客户端,使用pppoe拨号上网

移植pppoe拨号客户端 一、概述二、移植过程1、内核配置2、pppd工具编译3、pppoe工具编译 三、配置pppoe参数四、创建节点信息五、pppoe服务器搭建 一、概述 PPPoE(英语:Point-to-Point Protocol Over Ethernet),以太网上的点对点协…

Windows GUI自动化控制工具之python uiAutomation

对 Windows GUI进行自动化控制的工具有很多,比如pywinauto、pyautogui、pywin32、Autoit、airtest、UIAutomation等,UI Automation API是微软提供的自动化框架,可在支持 Windows Presentation Foundation (WPF) 的所有操作系统上使用&#xf…

Niagara—— Niagara Editor界面

目录 一,菜单栏 二,工具栏 三,预览面板 四,参数面板 五,系统总览面板 六,暂存区面板 七,选择面板 打开Niagara Editor: 双击Niagara发射器或系统;右击Niagara发射…

Qt--事件分发器

写在前面 在 Qt 中,事件分发器(Event Dispatcher)是一个核心概念,用于处理 GUI 应用程序中的事件。事件分发器负责将事件从一个对象传递到另一个对象,直到事件被处理或被取消。 每个继承自QObject或QObject的类都可以在本类中重写bool even…

基于 Amazon API Gatewy 的跨账号跨网络的私有 API 集成

一、背景介绍 本文主要讨论的问题是在使用 Amazon API Gateway,通过 Private Integration、Private API 来完成私有网络环境下的跨账号或跨网络的 API 集成。API 管理平台会被设计在单独的账号中(亚马逊云科技提供的是多租户的环境),因为客观上不同业务…

生于零售的亚马逊云科技,如何加速中国跨境电商企业出海?

导读:跨境电商进入精耕细作的新阶段。 作为中国企业出海的重要领域之一,近几年跨境电商行业处在快速发展中。商务部数据显示,2022年中国跨境电商出口达1.55万亿,同比增长11.7%。2023年1-2月,跨境电商进出口总额同比增长…

【wpf】视觉树上找元素的注意事项

前言 我们通过 VisualTreeHelper类 可以在视觉树上找元素,下面提供几个封装好的方法: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using Sy…

分析| Flutter 3.10版本有哪些变化?

Flutter是Google推出的一款用于构建高性能、高保真度移动应用程序、Web和桌面应用程序的开源UI工具包。Flutter使用自己的渲染引擎绘制UI,为用户提供更快的性能和更好的体验。Flutter还提供了丰富的构建工具、库和插件,使开发人员能够更快地构建应用程序…

从浅入深理解序列化和反序列化

文章目录 什么是java序列化什么情况需要使用 Java 序列化为什么要序列化序列化和反序列化过程如下RPC 框架为什么需要序列化序列化用途序列化机制可以让对象地保存到硬盘上,减轻内存压力的同时,也起了持久化的作用序列化机制让Java对象可以在网络传输 实…

LINUX 提权 脏牛CVE-2016-5195

这里写复现过程,不写原理 Linux内核 > 2.6.22(2007年发行,到2016年10月18日才修复) 靶场环境是vluhub上的。网卡自己配置好 nmap扫一下 80端口开的,上去 52.136 再扫 1898开放 访问开干 是个cms msf上线找这…

【VictoriaMetrics】VictoriaMetrics单机版批量和单条数据写入(opentsdb格式)

VictoriaMetrics单机版支持以opentsdb格式的数据写入包含linux形式和postman形式,写入支持单条数据写入以及多条数据写入,下面操作演示下如何使用 1、首先需要启动VictoriaMetrics单机版服务 注意,如果支持opentsdb协议需要在启动单机版VictoriaMetrics的时候加上opentsdbH…

一、尚医通微信登录

文章目录 一、登录需求1、登录需求 二、微信登录1、OAuth21.1OAuth2解决什么问题1.1.1 开放系统间授权1.1.2图例1.1.3方式一:用户名密码复制1.1.4方式二:通用开发者key1.1.5方式三:颁发令牌 1.2 OAuth2最简向导1.2.1 OAuth主要角色1.2.2最简向…

就业内推 | 国企招运维、网安,五险一金全额缴,最高15k

01 北京安信创业信息科技发展有限公司 🔷招聘岗位:网络运维岗 🔷职责描述: 1、负责北区数据中心、总部数据中心、部本部、21家在京直属事业单位内网网络系统的日常运行维护工作。 2、负责网络故障的应急处置。 3、负责网络系统…

决策树及决策树的划分依据(ID3、C4.5、CART)

一、决策树是什么? 决策树是一种基于树状结构的机器学习算法,用于解决分类和回归问题。它是一种自上而下的递归分割方法,通过对特征空间的递归划分来构建一个树形模型,用于进行预测和决策。在决策树中,每个内部节点表…

Redis概述

前言 为什么要使用Redis? ​ 如果熟悉JVM底层的话,就能了解Java程序的运行大多数都是基于对内存的操作,读取、并更、清理,并同时保证数据的可靠性。即使是数据库,例如MySQL几乎都是基于对缓冲区的操作,只是通过后台…

(常见)数据模型

文章目录 数据模型概述一、数据模型概要1.模型、建模与抽象2.数据模型3.两类数据模型 二、数据库模型的组成要素1.数据结构2.数据操作3.数据的完整性约束 三、概念模型1.概要2.基本概念3.概念模型的表示方法 常用数据模型一、层次模型1.简介2.数据结构3.数据操纵与完整性约束4.…

二叉搜索树中第K小的元素

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 示例 1: 输入:root [3,1,4,null,2], k 1 输出:1 示例 2: 输入&am…

List、Set、Map的区别?

List 是一个有序集合,里面可以存储重复的元素Set 是一个不能存储相同元素的集合Map 是一个通过键值对的方式存储元素的,键不能重复 Java 容器分为Collection 和Map 两大类,Collection 集合的子接口有Set、List、Queue 三种子接口。其中&#…

CSDN MD编辑器跳转方法及字体格式

一、点击关键语句跳转指定位置 在CSDN写文章的时候,写的文章过长往往会让读者很难找到自己想看的部分,这时候有个 跳转到指定位置功能 就非常的便利。CSDN在MD编辑器上(富文本编辑器只有一种)就提供了两种跳转到指定位置的方法: 一、目录跳转…