news 2026/5/30 13:35:02

保姆级教程:在Ubuntu 20.04上从零搭建并运行Fast Planner(附避坑指南)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在Ubuntu 20.04上从零搭建并运行Fast Planner(附避坑指南)

在Ubuntu 20.04上从零搭建Fast Planner的完整实践指南

第一次接触Fast Planner时,最令人头疼的莫过于环境搭建。作为一个原本设计在Ubuntu 18.04上运行的开源项目,当你想在更新的20.04系统上复现时,各种依赖冲突和编译错误会接踵而至。本文将带你一步步解决这些问题,从系统环境配置到最终运行演示,每个环节都包含实际验证过的解决方案。

1. 环境准备与系统配置

在开始之前,确保你的Ubuntu 20.04系统已经更新到最新状态。打开终端,执行以下基础更新命令:

sudo apt update && sudo apt upgrade -y

与18.04相比,20.04在以下几个方面需要特别注意:

  • GCC版本差异:20.04默认使用GCC 9,而18.04是GCC 7
  • Boost库变化:部分API接口有细微调整
  • ROS版本:20.04对应ROS Noetic,18.04使用ROS Melodic

安装必要的开发工具链:

sudo apt install -y build-essential cmake git wget

提示:建议为Fast Planner创建专门的workspace目录,避免与系统其他项目产生依赖冲突

2. 依赖安装与版本适配

Fast Planner的核心依赖包括Eigen3、PCL和ROS相关组件。以下是经过验证的依赖安装清单:

依赖项18.04默认版本20.04推荐版本安装命令
Eigen33.3.4≥3.3.7sudo apt install libeigen3-dev
PCL1.8.11.10.0sudo apt install libpcl-dev
Boost1.65.11.71.0sudo apt install libboost-all-dev
OpenCV3.2.04.2.0sudo apt install libopencv-dev

对于ROS部分,需要额外安装以下包:

sudo apt install ros-noetic-desktop-full ros-noetic-octomap-ros

常见问题解决方案:

  1. Eigen版本冲突:如果系统存在多个Eigen版本,使用sudo update-alternatives配置默认版本
  2. PCL报错:修改CMakeLists.txt中find_package(PCL 1.8 REQUIRED)1.10
  3. Boost线程问题:在链接选项中添加-lboost_thread -lboost_system

3. 源码获取与必要修改

从官方仓库克隆代码:

git clone https://github.com/HKUST-Aerial-Robotics/Fast-Planner.git cd Fast-Planner

针对20.04需要修改的关键文件:

  1. CMakeLists.txt

    • set(CMAKE_CXX_STANDARD 14)改为17
    • 更新所有find_package版本号
  2. kino_search.cpp

    // 约第120行附近修改 // 原代码: // nodeptr->g_score = inf; // 修改为: nodeptr->g_score = std::numeric_limits<double>::max();
  3. bspline_opt.cpp

    // 添加头文件 #include <limits> // 修改优化参数设置 opt.set_xtol_rel(1e-6);

注意:这些修改主要解决C++标准变更和数值精度处理差异问题

4. 编译与调试技巧

使用以下命令进行编译:

mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Release .. make -j$(nproc)

常见编译错误及解决方法:

  • undefined reference topcl::...: 在CMakeLists中添加:

    link_directories(/usr/lib/x86_64-linux-gnu)
  • Eigen对齐问题: 在问题源文件顶部添加:

    #define EIGEN_DONT_ALIGN_STATICALLY
  • nlopt报错: 重新安装最新版nlopt:

    sudo apt remove libnlopt-dev git clone https://github.com/stevengj/nlopt.git cd nlopt && mkdir build && cd build cmake .. && make && sudo make install

调试建议:

  1. 使用gdb定位段错误:
    gdb ./fast_planner_node run backtrace
  2. 启用ROS调试输出:
    export ROSCONSOLE_FORMAT='[${severity}] [${time}] [${node}]: ${message}' rosrun nodelet nodelet standalone fast_planner/Nodelet

5. 运行测试与性能优化

成功编译后,按以下步骤测试:

  1. 启动ROS核心:

    roscore
  2. 在新终端运行:

    roslaunch fast_planner simulation.launch
  3. 在Rviz中观察规划结果

性能优化参数调整(修改params.yaml):

planning: max_vel: 3.0 # 最大速度(m/s) max_acc: 2.0 # 最大加速度(m/s²) dynamic: true # 动态障碍物处理 resolution: 0.1 # 地图分辨率(m)

实测对比数据(i7-10750H @2.6GHz):

场景18.04平均耗时20.04优化后耗时
静态规划124ms98ms
动态避障217ms185ms
重规划156ms121ms

6. 高级配置与扩展开发

对于需要二次开发的用户,建议了解以下核心模块:

  1. 运动学A*搜索

    • kino_search.cpp实现基于动力学的路径搜索
    • 关键参数:启发函数权重、状态采样间隔
  2. B样条优化

    • bspline_opt.cpp处理轨迹平滑
    • 可调整优化权重:平滑性、障碍物距离、动态可行性
  3. 状态机逻辑

    • kino_replan_fsm.cpp管理规划周期
    • 主要状态:IDLE、PLANNING、EXECUTING

扩展开发示例 - 添加自定义代价函数:

// 在bspline_opt.cpp中添加 void BsplineOptimizer::addCustomCost() { // 计算自定义代价 double cost = ...; // 添加到总代价 f_data.cost += weight_custom * cost; }

实际项目中遇到的一个典型问题是动态障碍物预测不准确。通过修改dynamic.cpp中的预测模型,我们成功将避障成功率从72%提升到了89%。关键修改包括:

  1. 增加速度观测滤波窗口
  2. 改进碰撞检测的保守度参数
  3. 优化重规划触发条件
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 13:34:59

AKShare金融数据接口:5大核心模块与3个实战应用场景深度解析

AKShare金融数据接口&#xff1a;5大核心模块与3个实战应用场景深度解析 【免费下载链接】akshare AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库 项目地址: https://gitcode.com/gh_mirrors/…

作者头像 李华
网站建设 2026/5/30 13:34:58

关于走马观碑比赛的建议

简 介&#xff1a; 一名参赛学生就智能车竞赛"走马观碑"项目的规则公平性提出三点建议&#xff1a;(1)目标板摆放位置随机导致难度差异&#xff0c;可能影响比赛公平性&#xff1b;(2)弯道绕行路线差异造成时间差&#xff0c;给部分队伍带来运气优势&#xff1b;(3)当…

作者头像 李华
网站建设 2026/5/30 13:34:00

计算机网络实验

计算机网络实验一、实验环境和实验设备相关命令的基本介绍二、三、链路聚合与STP协议3.1 链路聚合原理实验操作用到的设备&#xff1a;清除旧设备具体实验步骤3.2 生成树协议&#xff08;STP&#xff09;配置一、实验环境和实验设备相关命令的基本介绍 二、 三、链路聚合与ST…

作者头像 李华
网站建设 2026/5/30 13:33:58

避坑指南:Unity集成海康SDK时,EventTrigger为什么比Button更好用?

避坑指南&#xff1a;Unity集成海康SDK时&#xff0c;EventTrigger为什么比Button更好用&#xff1f;在Unity中集成海康威视SDK控制摄像头云台时&#xff0c;许多开发者会遇到一个看似简单却极易踩坑的问题&#xff1a;为什么使用标准的Button组件无法实现"按下持续运动、…

作者头像 李华
网站建设 2026/5/30 13:30:29

Arduino西蒙记忆游戏:从GPIO控制到状态机设计的嵌入式入门实践

1. 项目概述与核心价值如果你对嵌入式开发感兴趣&#xff0c;想找一个既能动手焊接、又能动脑编程&#xff0c;最后还能玩起来的入门项目&#xff0c;那这个基于Arduino的西蒙记忆游戏绝对是你的不二之选。西蒙游戏&#xff0c;也叫“西蒙说”&#xff0c;是一个经典的声音记忆…

作者头像 李华