避坑指南:在Ubuntu 20.04上搞定Fast-Planner的完整配置流程(含nlopt源码安装与Segmentation fault修复)

张开发
2026/4/16 7:26:42 15 分钟阅读

分享文章

避坑指南:在Ubuntu 20.04上搞定Fast-Planner的完整配置流程(含nlopt源码安装与Segmentation fault修复)
Fast-Planner在Ubuntu 20.04上的终极配置指南从源码编译到稳定运行最近在机器人路径规划领域Fast-Planner凭借其高效的算法实现和优秀的实时性能成为许多研究者和开发者的首选工具。然而当我在Ubuntu 20.04系统上尝试部署这个开源项目时发现官方文档中的安装指南存在不少坑特别是对于ROS Noetic版本的用户。本文将分享我从零开始成功配置Fast-Planner的完整过程包括那些官方文档没有提及的关键细节和错误修复方法。1. 环境准备与源码获取在开始之前确保你的Ubuntu 20.04系统已经安装了ROS Noetic完整版。我建议使用全新的ROS安装避免与其他软件包产生冲突。以下是基础环境检查清单# 检查ROS版本 echo $ROS_DISTRO # 应该输出noetic # 检查g版本 g --version # 需要9.x或更高 # 检查Eigen3版本 pkg-config --modversion eigen3 # 需要3.3.7或更高获取Fast-Planner源码时我发现使用不同的终端工具会导致克隆失败。经过多次尝试以下方法最为可靠mkdir -p ~/fast_ws/src cd ~/fast_ws/src git clone --recursive https://github.com/HKUST-Aerial-Robotics/Fast-Planner.git cd ..提示如果遇到克隆速度慢的问题可以尝试在命令前加上GIT_SSL_NO_VERIFYtrue或者使用SSH方式克隆。2. 关键依赖项的安装与配置Fast-Planner依赖于两个核心数学库Armadillo线性代数和NLopt非线性优化。在Ubuntu 20.04上这两个库的安装方式需要特别注意。2.1 Armadillo的安装Armadillo的安装相对简单可以直接通过apt获取sudo apt install libarmadillo-dev安装完成后建议运行以下命令验证# 检查Armadillo版本 pkg-config --modversion armadillo2.2 NLopt的源码编译安装这是整个配置过程中最容易出问题的环节。在Ubuntu 20.04上通过ROS仓库安装的NLopt(ros-noetic-nlopt)会导致Fast-Planner无法生成轨迹。必须从源码编译安装cd ~ git clone https://github.com/stevengj/nlopt.git cd nlopt mkdir build cd build cmake -DNLOPT_CXXON .. make -j$(nproc) sudo make install安装完成后需要确认NLopt的头文件和库文件位置是否正确# 检查头文件 ls /usr/local/include/nlopt.h # 检查库文件 ls /usr/local/lib/libnlopt*3. 解决编译过程中的关键错误完成依赖项安装后进入工作空间尝试编译(catkin_make)会遇到几个典型错误。以下是详细的解决方案。3.1 C14标准问题Fast-Planner需要C14支持但默认配置可能使用C11。需要在所有相关包的CMakeLists.txt中进行修改查找所有CMakeLists.txt文件find ~/fast_ws/src -name CMakeLists.txt -type f在每个文件中找到类似set(CMAKE_CXX_FLAGS -stdc11)的行改为set(CMAKE_CXX_FLAGS -stdc14 ${CMAKE_CXX_FLAGS} -O3 -Wall)3.2 NLopt链接问题bspline_opt包的CMakeLists.txt默认查找ROS版本的NLopt需要修改为查找系统安装的版本。以下是修改后的关键部分find_package(NLopt REQUIRED) set(NLopt_INCLUDE_DIRS ${NLOPT_INCLUDE_DIR}) # 在target_link_libraries部分确保链接正确的库 target_link_libraries( bspline_opt ${catkin_LIBRARIES} ${NLOPT_LIBRARIES} )4. 运行时错误分析与修复即使编译成功运行时仍可能遇到两个关键错误Rviz中的/world问题和Segmentation fault。4.1 Rviz中的/world问题这个问题源于Ubuntu 20.04对ROS话题名称的处理方式变化。解决方法打开文件gedit ~/fast_ws/src/Fast-Planner/uav_simulator/Utils/odom_visualization/src/odom_visualization.cpp找到所有包含/world的字符串去掉前面的斜杠例如// 修改前 std::string world_frame /world; // 修改后 std::string world_frame world;4.2 Segmentation fault深度解析这是最棘手的运行时错误通常由函数返回值处理不当引起。需要修改两处关键代码第一处修改kinodynamic_astar.cpp// 修改前 int KinodynamicAstar::timeToIndex(double time) { int idx floor((time - time_origin_) * inv_time_resolution_); } // 修改后 int KinodynamicAstar::timeToIndex(double time) { int idx floor((time - time_origin_) * inv_time_resolution_); return idx; }第二处修改edt_environment.h和.cpp在头文件中修改函数声明// 修改前 bool interpolateTrilinear(double values[2][2][2], const Eigen::Vector3d diff, double value, Eigen::Vector3d grad); bool evaluateEDTWithGrad(const Eigen::Vector3d pos, double time, double dist, Eigen::Vector3d grad); // 修改后 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. 性能优化与调试技巧成功运行Fast-Planner后可以通过以下方式进一步提升性能和调试体验可视化调试工具# 安装有用的ROS工具 sudo apt install ros-noetic-rqt ros-noetic-rqt-common-plugins性能监控命令# 实时查看CPU和内存使用 top -H -p $(pgrep -d, planner_node)关键参数调整建议参数文件关键参数推荐值说明plan_manage.yamlmax_vel1.5-2.5最大飞行速度(m/s)plan_manage.yamlmax_acc0.5-1.2最大加速度(m/s²)bspline_opt.yamllambda_smooth0.1-0.3轨迹平滑度权重日志记录技巧# 启动时自动记录所有话题 rosbag record -a -O fast_planner_session.bag经过这些调整和优化Fast-Planner在Ubuntu 20.04上应该能够稳定运行。我在实际项目中应用这套配置流程成功部署了多个无人机路径规划系统运行时间最长的一个已经稳定工作超过200小时。

更多文章