热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(学习笔记)机器人自主导航从零开始第六步——FARPlanner全局路径规划算法

本文参考资料:GitHub-MichaelFyangfar_planner:在已知和未知环境中导航的快速,可尝试的路线规划器https:

本文参考资料:

GitHub - MichaelFyang/far_planner:在已知和未知环境中导航的快速,可尝试的路线规划器icon-default.png?t=M1H3https://github.com/michaelfyang/far_planner【泡泡前沿专栏•重磅】全网首发,系列(四):CMU团队开发的全套开源自主导航算法——FAR Planner全局路径规划算法 (qq.com)icon-default.png?t=M1H3https://mp.weixin.qq.com/s?__biz=MzI5MTM1MTQwMw==&mid=2247525152&idx=1&sn=f917e31efcb48be92b9989b82efd7ca6&chksm=ec13dd24db64543291ce9d61a7855e1ccb4b2761c2c420fe3b5403e86795616504dfa744bb4f&scene=178&cur_album_id=1954649120803995651#rd


前言

(以下转载自【泡泡机器人SLAM】微信公众号)

        机器人路径规划(Route Planning)是一个经典问题。常见的方式类似与RRT基于采样(Sample-Based),或者 A*基于离散化搜索(Search-Based)的路径规划算法。同时这两种方法大多限制在已经地图条件下的路经规划计算。

        第三类基于环境特征(Feature-Based)的路径规划方法如Visibility Graph Planning, 其基于对环境特征的提取与几何关系分析生成路径图(Roadmap)再在生成的路径图上进行规划(Planning)。这种基于环境特征进行建图与规划的方式可生成理论最短路径。相比较与RRT其随机性而使其生成的路径图高度重叠(Redundence),稠密(Dense),而难以动态维护,基于环境特征所生成的Visibility Graph拥有更少的节点,可在环境变化发生时,或在未知环境中,随着机器人移动进行快速的动态更新,也最大限度降低路径规划的计算复杂度。

        然而这种基于环境特征的方式因为对环境输入的要求,很难被应用的实际中所以在一定程度上限制了其发展。本项目旨在建立一种可在现实环境中实时提取环境几何特征并动态建立Visbility Graph进行路径规划及导航的算法,同时该算法支持在没有已知地图的环境下根据实时传感器输入对路径图以及导航路径进行实时动态调整, 可在1-2ms实现对300m环境内的全局路径规划及动态调整。本项目所提算法是我们团队(Team Explorer, CMU&OSU)参加DARPA地下挑战赛 (Subterranean Challenge)使用的全局路径规划算法。


方法论

障碍物的几何提取 (Enclosed Polygons Extraction)

        为了生成Visibility Graph,需要从传感器输入信息中提取障碍物的封闭几何特征形成封闭的多边形 (Enclosed Polygon)。这里我们的传感器输入采用常见的点云图。首先,从点云中提取出障碍物的角点作为生成Enclosed Polygon的vertex point, 然后将vertex points连接形成闭合的多边形用来代表障碍物的几何形状。

动态可视性更新(Dynamic Visibility Update)

        我们采取动态维护的方式更新地图, 并建立全局Visibility Graph。对于未知环境,算法对每一帧传感器输入进行处理;提取障碍物Polygon特征,并通过检测vertex points之间的相互可视性(Visibility)建立一个局部 Visibity Graph用于全局Graph更新。这样,将建立大范围全局Visibility Graph的计算量分散,并且实现在未知环境下对环境的动态更新,使得Planner可以进行在未知环境下探索式地路进规划。

动态障碍(Dynamic Obstacle)物检测与路径更新

        通过对于多帧传感器输入的比较,检测环境中的动态障碍物(如:行人,车辆),算法会对受到动态障碍物遮挡的Graph进行更新,并在动态障碍物移开后恢复之前Graph内相对应vertex points之间的链接。

在未知环境中的尝试性(Attemptable)路径规划

        如导航点(Goal Point)处在当前没有先验地图(Prior Map)的环境中,算法会根据当前已知信息规划出多个可行路径进行尝试,并根据之后新环境信息进行更新。


应用场景

已知环境下的快速路径规划以及导航

        在已知环境中快速建立路径图(Visibility Graph)并进行路径规划,如在已知环境信息的工厂,配送中心的自主机器人路径规划及导航,同时系统可根据实时输入的环境以及出现的动态障碍物对于已知地图进行更新,并实时更新导航路径。用户可根据不同任务需且在此规划算法基础上设置更高层的任务规划算法,生成结合任务的时序导航点,实现并处理不同场景的任务需求。并且快速部署到现实机器人平台。

未知环境中的定向探索及导航

        在某些应用场景中例如搜救任务中,需要对未知环境中的某一特定区域进行搜索,该算法可根据当前已知环境障碍物信息规划出多个可行性路径进行尝试,并在探索前往目标位置过程不断更新优化路径,并在以探索区域建立全局路径地图,为后续机器人导航提供环境信息,比且可直接为后续其他机器人或人员提够到达目标区域的导航路径。

机器学习以及仿真训练

        该算法可生成基于环境特征的导航路径,可用于生成大量导航及动态环境数据用于网络训练。结合Matterport3D Potorealistic仿真环境及AI Habitat Engine可提供多种传感器输出,例如,RGB相机图片,深度图,语义图像以及LiDAR点云,  可以为例如,基于激光雷达或者视觉感知的状态估计, 局部避障,全局路径规划,探索等Sim-to-Real网络训练提供学习数据源。例如基于,训练基于网络的视觉导航及避障策略(Visual Planning Policy),训练端到端的定位及状态估计网络(End-to-End Localization network)。


用法

        (以下翻译自GitHub - MichaelFyang/far_planner)

        该存储库已在Ubuntu 18.04中使用ROS Melodic和Ubuntu 20.04与ROS Noetic进行了测试。按照上一个博客的说明设置开发环境。确保签出与计算机设置匹配的分支,编译并下载模拟环境。

要设置 FAR Planner,请克隆存储库:

git clone https://github.com/MichaelFYang/far_planner

在终端中,转到文件夹并进行编译:

cd far_planner
catkin_make

要运行代码,请转到终端中的开发环境文件夹,获取 ROS 工作区,然后启动:

cd autonomous_exploration_development_environment
source devel/setup.sh
roslaunch vehicle_simulator system_indoor.launch

打开一个新的终端,转到 FAR Planner 文件夹,获取 ROS 工作区,然后启动:

source devel/setup.sh
roslaunch far_planner far_planner.launch

        现在,用户可以通过按RVIZ中的"Goalpoint"按钮,然后单击一个点来设置目标来发送目标。车辆将导航到目标,并沿途建立能见度图(青色)。可见性图覆盖的区域变为可用空间。在自由空间中导航时,计划者使用构建的可见性图,而在未知空间中导航时,计划者尝试发现实现目标的方法。通过按"重置可见性图表"按钮,计划员将重新初始化可见性图表。通过取消选中"规划可尝试"复选框,规划师将首先尝试通过可用空间找到路径。路径将显示为绿色。如果这样的路径不存在,规划者将一起考虑未知空间。路径将显示为蓝色。通过取消选中"更新可见性图表"复选框,计划员将停止更新可见性图表。要从/向文件读取/保存可见性图表,请按"读取"/"保存"按钮。室内环境的可见性图表文件示例可在'src/far_planner/data/indoor.vgh'上找到。

在导航过程中的任何时候,用户都可以使用控制面板通过单击黑框中的来导航车辆。系统将切换到智能操纵杆模式 - 车辆尝试遵循虚拟操纵杆命令并同时避免碰撞。要恢复 FAR 计划器导航,请按"继续导航到目标"按钮或使用"目标点"按钮设置新目标。请注意,用户可以使用PS3 / 4或Xbox控制器而不是虚拟操纵杆。有关更多信息,请参阅我们的开发环境页面。

     

        要使用其他环境启动,请使用下面的命令行,并将""替换为开发环境中的环境名称之一,即'campus', 'indoor', 'garage', 'tunnel', 和'forest'。请注意,在校园环境中运行时,请在开发环境的"src/vehicle_simulator/launch"文件夹中的system_campus.launch中将 checkTerrainConn 设置为 true。

roslaunch vehicle_simulator system_.launch
roslaunch far_planner far_planner.launch

要在 Matterport3D环境中运行 FAR Planner,请按照开发环境页面上的说明设置 Matterport3D 环境。然后,使用下面的命令行启动系统和 FAR Planner。

roslaunch vehicle_simulator system_matterport.launch
roslaunch far_planner far_planner.launch config:=matterport

        用户可以选择定义自定义导航边界。为此,用户需要提供边界文件和轨迹文件。示例在"src/far_planner/data"文件夹中以"boundary.ply"和"trajectory.txt"的形式提供。文本编辑器可以查看这些文件。具体而言,边界文件包含用户定义的多边形,其中每个多边形都有一个索引。轨迹文件包含姿势,其中每个姿势都是一行,具有 x (m)、y (m)、z (m)、滚动 (rad)、俯仰 (rad)、偏航(rad)和从运行开始的时间持续时间(秒)。轨迹文件的格式与开发环境保存的轨迹文件的格式相同,并且需要包含至少一个姿势来确定导航边界的可遍历侧。用户可以使用下面的命令行在同一文件夹中生成可见性图形文件(提供为"boundary_graph.vgh"),该文件可以使用"读取"按钮加载到FAR Planner。

roslaunch boundary_handler boundary_handler.launch

配置

        FAR 规划器设置保存在 default.yaml 的 'src/far_planner/config' 文件夹中。对于 Matterport3D 环境,设置位于同一文件夹中的 matterport.yaml 中。


  • is_static_env(默认值:true) - 如果环境包含动态障碍物,则设置为 false。
  • is_attempt_autoswitch(默认值:true) - 设置为 false 可关闭从不可尝试的导航(对于已知环境)到可尝试的导航(对于未知环境)的自动切换。
  • is_viewpoint_extend(默认值:true) - 设置为 false 以停止将可见性图形顶点从对象扩展到远离对象以获得更好的视点。
  • is_pub_boundary(默认值:false) - 设置为 true 可将自定义导航边界发送到开发环境中的本地计划程序。


推荐阅读
  • 探索CNN的可视化技术
    神经网络的可视化在理论学习与实践应用中扮演着至关重要的角色。本文深入探讨了三种有效的CNN(卷积神经网络)可视化方法,旨在帮助读者更好地理解和优化模型。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本文深入探讨了HTML5中十五个重要的新特性,为开发者提供了详细的指南。 ... [详细]
  • 择要:Fundebug的JavaScript毛病监控插件同步支撑Vue.js异步毛病监控。Vue.js从降生至今已5年,尤大在本年2月份宣布了严重更新,即Vue2.6。更新包含新增 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 构建高性能Feed流系统的设计指南
    随着移动互联网的发展,Feed流系统成为了众多社交应用的核心组成部分。本文将深入探讨如何设计一个高效、稳定的Feed流系统,涵盖从基础架构到高级特性的各个方面。 ... [详细]
  • 深入探讨LeetCode上的一道经典算法题——判断一个整数是否为4的幂,提供高效解决方案。 ... [详细]
  • 本文简要介绍了如何使用 Python Elasticsearch DSL 进行基本和高级查询,包括连接 Elasticsearch、执行简单和复杂查询、聚合、排序及分页等。 ... [详细]
  • 基于51单片机的多项目设计实现与优化
    本文探讨了基于51单片机的多个项目的设计与实现,包括PID控制算法的开关电源设计、八音电子琴仿真设计、智能抽奖系统控制设计及停车场车位管理系统设计。每个项目均采用先进的控制技术和算法,旨在提升系统的效率、稳定性和用户体验。 ... [详细]
  • This article explores the process of integrating Promises into Ext Ajax calls for a more functional programming approach, along with detailed steps on testing these asynchronous operations. ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • ArcBlock 发布 ABT 节点 1.0.31 版本更新
    2020年11月9日,ArcBlock 区块链基础平台发布了 ABT 节点开发平台的1.0.31版本更新,此次更新带来了多项功能增强与性能优化。 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
author-avatar
mobiledu2502877277
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有