热门标签 | 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 可将自定义导航边界发送到开发环境中的本地计划程序。


推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文探讨了2012年4月期间,淘宝在技术架构上的关键数据和发展历程。涵盖了从早期PHP到Java的转型,以及在分布式计算、存储和网络流量管理方面的创新。 ... [详细]
  • 本文探讨了如何在iOS开发环境中,特别是在Xcode 6.1中,设置和应用自定义文本样式。我们将详细介绍实现方法,并提供一些实用的技巧。 ... [详细]
  • [论文笔记] Crowdsourcing Translation: Professional Quality from Non-Professionals (ACL, 2011)
    Time:4hoursTimespan:Apr15–May3,2012OmarZaidan,ChrisCallison-Burch:CrowdsourcingTra ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 在现代Web应用中,当用户滚动到页面底部时,自动加载更多内容的功能变得越来越普遍。这种无刷新加载技术不仅提升了用户体验,还优化了页面性能。本文将探讨如何实现这一功能,并介绍一些实际应用案例。 ... [详细]
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社区 版权所有