该项目已在 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
。示例模拟显示在这里。
该项目包含一组用于四旋翼快速飞行的强大且计算高效的算法
所有规划算法以及其他关键模块(例如映射)都在fast_planner中实现:
除了文件夹fast_planner,一个轻量级的uav_simulator用于测试。
[hidecontent type="logged" desc="隐藏内容:登录后可查看"]
我们的软件是在 Ubuntu 16.04(ROS Kinetic) 和 18.04(ROS Melodic) 上开发和测试的。根据您的 Ubuntu 版本按照文档安装Kinetic或Melodic 。
我们使用NLopt来解决非线性优化问题。uav_simulator依赖于 C++ 线性代数库Armadillo。可以通过以下命令安装这两个依赖项,其中${ROS_VERSION_NAME}
是您的 ROS 版本的名称。
sudo apt-get install libarmadillo-dev ros_${ROS_VERSION_NAME}_nlopt
满足先决条件后,您可以将此存储库克隆到您的 catkin 工作区和 catkin_make。推荐一个新的工作区:
cd ${YOUR_WORKSPACE_PATH}/src
git clone https://github.com/HKUST-Aerial-Robotics/Fast-Planner.git
cd ../
catkin_make
如果您在此步骤中遇到问题,请先参考现有问题、拉取请求和谷歌,然后再提出新问题。
现在您已准备好运行模拟。
此步骤对于运行模拟不是强制性的。但是,如果您想在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
首先使用我们的配置运行Rviz :
<!-- go to your workspace and run: -->
source devel/setup.bash
roslaunch plan_manage rviz.launch
然后运行四旋翼模拟器和Fast-Planner。下面提供了几个示例:
在该方法中,运动动力学路径搜索在离散化控制空间中找到安全、动态可行且时间最短的初始轨迹。然后通过 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
来触发规划器:
如果您已成功运行模拟并希望在您的项目中使用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版本不同导致的编译错误,请先参考已有的issues、pull request、Google,再提出新的issue。无关紧要的问题将不会收到回复。
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]