
1. 环境准备与源码获取在Ubuntu 20.04上部署Fast-Planner之前我们需要先搭建好基础环境。这个环节看似简单但实际操作中很多开发者都会在这里栽跟头。我建议使用全新的Ubuntu 20.04系统进行操作避免之前安装的软件包造成冲突。首先确保你的系统已经安装了ROS Noetic这是Fast-Planner必需的运行环境。安装命令如下sudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-noetic-desktop-full安装完成后别忘了初始化rosdep并设置环境变量sudo rosdep init rosdep update echo source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrc接下来创建工作空间并获取Fast-Planner源码。这里有个小技巧一定要使用系统自带的终端进行操作我在测试中发现使用Terminator等第三方终端工具克隆源码时经常会出现问题。mkdir -p fast_ws/src cd fast_ws/src git clone https://github.com/HKUST-Aerial-Robotics/Fast-Planner.git cd ..2. 关键依赖安装与配置Fast-Planner依赖两个核心数学库Armadillo线性代数计算和NLopt非线性优化。这两个库的安装方式直接影响后续编译能否成功。2.1 安装Armadillo库Armadillo的安装相对简单直接通过apt安装即可sudo apt install libarmadillo-dev安装完成后可以通过以下命令验证是否安装成功pkg-config --modversion armadillo2.2 安装NLopt库NLopt的安装就比较麻烦了这也是大多数开发者遇到的第一个大坑。在Ubuntu 20.04上虽然可以通过ros-noetic-nlopt直接安装但实测会出现兼容性问题导致程序虽然能编译通过却无法生成正确轨迹。必须通过源码编译安装git clone https://github.com/stevengj/nlopt.git cd nlopt mkdir build cd build cmake .. make -j$(nproc) sudo make install安装完成后需要确认NLopt的头文件和库文件路径是否正确。执行以下命令检查ls /usr/local/include/nlopt.h ls /usr/local/lib/libnlopt.so如果找不到这些文件可能需要手动设置环境变量export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH3. 编译过程中的常见错误及修复完成环境配置后就可以开始编译Fast-Planner了。但别高兴太早这里会遇到一系列编译错误我挨个带大家解决。3.1 C14标准问题Fast-Planner需要C14标准支持但默认配置可能使用的是C11。这会导致大量编译错误错误信息通常包含this requires C14之类的提示。解决方法是在所有CMakeLists.txt文件中修改编译标准。具体需要修改以下文件fast_ws/src/Fast-Planner/CMakeLists.txtfast_ws/src/Fast-Planner/bspline_opt/CMakeLists.txtfast_ws/src/Fast-Planner/fast_planner/CMakeLists.txt在每个文件中找到类似set(CMAKE_CXX_FLAGS -stdc11)的行改为set(CMAKE_CXX_FLAGS -stdc14 ${CMAKE_CXX_FLAGS} -O3 -Wall)3.2 NLopt链接问题即使正确安装了NLopt编译时仍可能报错找不到NLopt库。这是因为bspline_opt模块的CMake配置默认查找的是ros-noetic-nlopt而我们是通过源码安装的。需要修改fast_ws/src/Fast-Planner/bspline_opt/CMakeLists.txt文件find_package(NLopt REQUIRED) set(NLopt_INCLUDE_DIRS ${NLOPT_INCLUDE_DIR})同时确保链接部分正确target_link_libraries( bspline_opt ${catkin_LIBRARIES} ${NLOPT_LIBRARIES} )4. 运行时错误分析与解决经过上述修改后编译应该能通过了。但别急着庆祝运行时还会遇到几个致命错误。4.1 Rviz中的/world问题启动仿真后Rviz窗口可能会报错找不到/world。这是因为Ubuntu 20.04对话题名称中的斜杠更敏感。解决方法打开fast_ws/src/Fast-Planner/uav_simulator/Utils/odom_visualization/src/odom_visualization.cpp文件找到所有包含/world的字符串去掉前面的斜杠。例如// 修改前 odom_pub nh.advertisenav_msgs::Odometry(/world, 50); // 修改后 odom_pub nh.advertisenav_msgs::Odometry(world, 50);4.2 Segmentation fault问题这是最棘手的运行时错误通常表现为程序突然崩溃并报Segmentation fault (core dumped)。根据我的调试经验主要问题出在几个函数的返回值处理上。第一个需要修改的是timeToIndex函数。打开fast_ws/src/Fast-Planner/fast_planner/path_searching/src/kinodynamic_astar.cpp文件找到int KinodynamicAstar::timeToIndex(double time) { int idx floor((time - time_origin_) * inv_time_resolution_); }这个函数声明返回int但实际上没有return语句修改为int KinodynamicAstar::timeToIndex(double time) { int idx floor((time - time_origin_) * inv_time_resolution_); return idx; }第二个需要修改的是edt_environment.h和edt_environment.cpp中的两个函数。将它们的返回值类型从bool改为void并移除所有return语句// 在edt_environment.h中修改 void interpolateTrilinear(double values[2][2][2], const Eigen::Vector3d diff, double value, Eigen::Vector3d grad); void evaluateEDTWithGrad(const Eigen::Vector3d pos, double time, double dist, Eigen::Vector3d grad);然后在cpp文件中做相应修改确保函数实现与声明一致。5. 成功运行与验证完成上述所有修改后重新编译并运行cd fast_ws catkin_make source devel/setup.bash roslaunch fast_planner rviz.launch在另一个终端运行仿真roslaunch fast_planner simulation.launch现在你应该能在Rviz中看到无人机模型并且可以通过点击目标点来规划路径了。如果一切正常无人机应该能够平滑地飞向目标点不会出现崩溃或轨迹异常的情况。我在实际部署过程中发现有时候即使按照上述步骤操作仍然可能出现奇怪的问题。这时候建议彻底清理后重新编译cd fast_ws rm -rf build devel catkin_make另外如果遇到性能问题可以尝试调整Fast-Planner的参数配置文件位于fast_ws/src/Fast-Planner/fast_planner/param目录下。特别是planning.yaml中的参数可以根据你的硬件配置和需求进行优化。