开源
Fast-Planner:实现四旋翼快速飞行规划算法
来源:元经纪     阅读:778
网站管理员
发布于 2023-03-16 07:09
查看主页

概述

Fast-Planner的开发旨在在复杂的未知环境中实现四旋翼快速飞行。它包含一组精心设计的规划算法。将来会有更多功能和有趣的方法。

1. 快速入门

该项目已在 Ubuntu 16.04(ROS Kinetic)和 18.04(ROS Melodic)上进行了测试。以Ubuntu 18.04为例,运行以下命令进行设置:

  sudo apt-get install libarmadillo-dev ros-melodic-nlopt
  cd ${YOUR_WORKSPACE_PATH}/src
  git clone https://github.com/HKUST-Aerial-Robotics/Fast-Planner.git
  cd ../ 
  catkin_make

您可以查看详细说明来设置项目。编译后,您可以通过以下方式启动可视化:

  source devel/setup.bash && roslaunch plan_manage rviz.launch

并开始模拟(在新终端中运行):

[rihide]
  source devel/setup.bash && roslaunch plan_manage kino_replan.launch

您会在 中找到随机地图和无人机Rviz。您可以使用该工具选择无人机要到达的目标2D Nav Goal。示例模拟显示在这里

2. 算法与论文

该项目包含一组用于四旋翼快速飞行的强大且计算高效的算法

  • 运动动力学路径搜索
  • 基于 B 样条的轨迹优化
  • 拓扑路径搜索和路径引导优化
  • 感知感知规划策略(出场)

所有规划算法以及其他关键模块(例如映射)都在fast_planner中实现:

  • plan_env:在线映射算法。它以深度图像(或点云)和相机姿势(里程计)对作为输入,进行光线投射以更新概率体积图,并为规划系统构建欧氏符号距离场 (ESDF)。
  • path_searching:前端路径搜索算法。目前它包括一个尊重四旋翼动力学的运动动力学路径搜索。它还包含一个基于采样的拓扑路径搜索算法,以生成多个拓扑独特的路径来捕获 3D 环境的结构。
  • bspline:基于 B 样条的轨迹表示的实现。
  • bspline_opt:使用 B 样条轨迹的基于梯度的轨迹优化。
  • active_perception:感知感知规划策略,使四旋翼能够主动观察并避开未知障碍物,以在未来出现。
  • plan_manage:调度和调用映射和规划算法的高级模块。启动整个系统的界面,以及配置文件都包含在这里。

除了文件夹fast_planner,一个轻量级的uav_simulator用于测试。

3.设置和配置

[hidecontent type="logged" desc="隐藏内容:登录后可查看"]

先决条件

  1. 我们的软件是在 Ubuntu 16.04(ROS Kinetic) 和 18.04(ROS Melodic) 上开发和测试的。根据您的 Ubuntu 版本按照文档安装KineticMelodic 。

  2. 我们使用NLopt来解决非线性优化问题。uav_simulator依赖于 C++ 线性代数Armadillo。可以通过以下命令安装这两个依赖项,其中${ROS_VERSION_NAME}是您的 ROS 版本的名称。

sudo apt-get install libarmadillo-dev ros_${ROS_VERSION_NAME}_nlopt

建立在 ROS 之上

满足先决条件后,您可以将此存储库克隆到您的 catkin 工作区和 catkin_make。推荐一个新的工作区:

  cd ${YOUR_WORKSPACE_PATH}/src
  git clone https://github.com/HKUST-Aerial-Robotics/Fast-Planner.git
  cd ../
  catkin_make

如果您在此步骤中遇到问题,请先参考现有问题拉取请求谷歌,然后再提出新问题。

现在您已准备好运行模拟

使用 GPU 深度渲染(可选择跳过)

此步骤对于运行模拟不是强制性的。但是,如果您想在uav_simulator中运行更逼真的深度相机,则需要安装CUDA 工具包。否则,将使用不太现实的深度传感器模型。

uav_simulator中的local_sensing包可以选择使用 GPU 或 CPU 渲染深度传感器测量值。默认情况下,它在 CMakeLists 中设置为 CPU 版本:

set(ENABLE_CUDA false)
# set(ENABLE_CUDA true)

但是,我们强烈推荐 GPU 版本,因为它生成的深度图像更像真实的深度相机。要启用 GPU 深度渲染,请将 ENABLE_CUDA 设置为 true,并记住根据您的显卡设备更改“arch”和“code”标志。您可以在此处检查正确的代码。

    set(CUDA_NVCC_FLAGS 
      -gencode arch=compute_61,code=sm_61;
    ) 

CUDA的安装请到CUDA ToolKit

4. 运行模拟

首先使用我们的配置运行Rviz :

  <!-- go to your workspace and run: -->
  source devel/setup.bash
  roslaunch plan_manage rviz.launch

然后运行四旋翼模拟器和Fast-Planner。下面提供了几个示例:

运动动力学路径搜索和 B 样条优化

在该方法中,运动动力学路径搜索在离散化控制空间中找到安全、动态可行且时间最短的初始轨迹。然后通过 B 样条优化改进轨迹的平滑度和间隙。要测试此方法,请运行:

  <!-- open a new terminal, go to your workspace and run: -->
  source devel/setup.bash
  roslaunch plan_manage kino_replan.launch

通常情况下,你会在 中找到随机生成的地图和无人机模型Rviz。这时,您可以使用该2D Nav Goal工具触发计划器。当点击 中的一个点时Rviz,会立即生成一条新的轨迹并由无人机执行。下面显示了一个示例:

本文详细介绍了相关算法。

拓扑路径搜索和路径引导优化

该方法的特点是在独特的拓扑类中搜索多个轨迹。由于该策略,可以更彻底地探索解决方案空间,避免局部最小值并产生更好的解决方案。同样,运行:

  <!-- open a new terminal, go to your workspace and run: -->
  source devel/setup.bash
  roslaunch plan_manage topo_replan.launch

然后你会发现生成的随机地图可以使用2D Nav Goal来触发规划器:

5. 在您的应用程序中使用

如果您已成功运行模拟并希望在您的项目中使用Fast-Planner,请浏览文件 kino_replan.launch 或 topo_replan.launch。包含并记录了您在使用过程中可能会更改的重要参数。

请注意,在我们的配置中,深度图像的大小为 640x480。为了获得更高的地图融合效率,我们进行下采样(在 kino_algorithm.xml 中,skip_pixel = 2)。如果您使用分辨率较低的深度图像(如 256x144),您可以通过设置 skip_pixel = 1 来禁用下采样。此外,depth_scaling_factor 设置1000,这可能需要根据您的设备进行更改。

最后,对于设置问题,如ROS/Eigen版本不同导致的编译错误,请先参考已有的issuespull requestGoogle,再提出新的issue。无关紧要的问题将不会收到回复。

6.更新

  • 2020年10月20日:Fast-Planner扩展应用于快速自主探索。检查此回购以获取更多详细信息。

  • 2020年7月5日:我们将在未来发布论文: RAPTOR: Robust and Perception-aware Trajectory Replanning for Quadrotor Fast Flight (提交给TRO,审核中)的实现。

  • 2020 年 4 月 12 日:ICRA2020 论文的实施:Robust Real-time UAV Replanning Using Guided Gradient-based Optimization and Topological Paths可用。

  • 2020 年 1 月 30 日:体积映射与我们的规划器集成。它以深度图像和相机姿势对作为输入,进行光线投射以融合测量结果,并为规划模块构建欧氏符号距离场 (ESDF)。

已知的问题

编译问题

在 Ubuntu 20.04 上运行此项目时,需要 C++14。请在所有 CMakelists.txt 文件中添加以下行:

set(CMAKE_CXX_STANDARD 14)

意外崩溃

如果规划器在触发 2D Nav Goal 后死亡,则可能是由 ros-nlopt 库引起的。在这种情况下,我们建议卸载它并按照官方文档安装nlopt。然后在bspline_opt 包的 CMakeLists.txt中,更改关联行以链接 nlopt 库:

find_package(NLopt REQUIRED)
set(NLopt_INCLUDE_DIRS ${NLOPT_INCLUDE_DIR})

...

include_directories( 
    SYSTEM 
    include 
    ${catkin_INCLUDE_DIRS}
    ${Eigen3_INCLUDE_DIRS} 
    ${PCL_INCLUDE_DIRS}
    ${NLOPT_INCLUDE_DIR}
)

...

add_library( bspline_opt 
    src/bspline_optimizer.cpp 
    )
target_link_libraries( bspline_opt
    ${catkin_LIBRARIES} 
    ${NLOPT_LIBRARIES}
    # /usr/local/lib/libnlopt.so
    )  

[/hidecontent]

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 开源
雷峰塔下真的有压了千年的白色虫子:发现时还活着
雷神屏幕挂灯l1pro上架京东:支持双光源设计
《王者荣耀》狐妖小红娘联动皮肤来了:2款最低97.6元
gurman揭示苹果超薄iphone原因
相约中国,就是相约未来——数字生态,未来已来

首页

分类

定制方案

消息

我的