当前位置: 首页 > news >正文

fastlio配置与过程中遇到的问题

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

🚀 Fast-LIO 安装与运行指南

我之前已经创建并使用原有的工作空间 catkin_ws,如果没有创建一个。
使用环境 ubantu20.04 ros1 noetic版本

我作的是要在已有的 ~/catkin_ws 中编译 原版 FAST-LIO(来自 HKU-MARS 官方仓库)。

最终下载官方文档中的示例文件:建议安装前阅读一下

https://drive.google.com/drive/folders/1CGYEJ9-wWjr8INyan6q1BZz_5VtGB-fP

官方git地址:建议安装前阅读一下

https://github.com/hku-mars/FAST_LIO

下面是一份 基于你现有工作空间的完整安装步骤


🔹 在 ~/catkin_ws 中安装 FAST-LIO(原版)

1. 进入工作空间

cd ~/catkin_ws/src

2. 克隆 FAST-LIO

git clone https://github.com/hku-mars/FAST_LIO.git

此时 ~/catkin_ws/src 下会多出 FAST_LIO 文件夹。


3. 安装依赖

如果你已经装了 ROS,一般会自带 PCL 和 Eigen,无需重复安装。只需查看具体版本等,版本之间还有适配问题,编译fastlio时候出问题建议先看后面出现过的问题。一般pcl会要求eigen是3.3.10的或以上,这里第一部安装的或者原有的多半版本较低,后面如果报错在解决也可以。

(1) Eigen

sudo apt install libeigen3-dev

(2) PCL

Ubuntu 20.04 默认 PCL=1.10.0,一般满足需求:

sudo apt install libpcl-dev

(3) Sophus(必需)

cd ~/catkin_ws/src
git clone https://github.com/strasdat/Sophus.git
cd Sophus
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install

(4) Livox-SDK & Livox ROS Driver

⚠️ 如果要用 Livox 激光雷达,必须安装。

# SDK
cd ~/catkin_ws/src
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install# ROS Driver
cd ~/catkin_ws/src
git clone https://github.com/Livox-SDK/livox_ros_driver.git
cd ~/catkin_ws
catkin_make

然后写入 ~/.bashrc,避免忘记 source:

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

4. 编译 FAST-LIO

回到工作空间根目录:

cd ~/catkin_ws
catkin_make

5. 运行 FAST-LIO

(1) Source 环境变量

source ~/catkin_ws/devel/setup.bash

(2) 启动 FAST-LIO

假设你用 Livox Avia 激光雷达:

roslaunch fast_lio mapping_avia.launchlihongli@lhl:~/catkin_ws$ roslaunch fast_lio mapping_avia.launch
... logging to /home/lihongli/.ros/log/abdd0ad6-8938-11f0-be04-3b4e646d99e9/roslaunch-lhl-6754.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.started roslaunch server http://lhl:45857/SUMMARY
========

在另一个终端播放 rosbag 数据:

rosbag play 你下载的或者自己的数据名字.bag
lihongli@lhl:~/Rosbag_Example$ rosbag play outdoor_Mainbuilding_10hz_2020-12-24-16-38-00.bag 

源码的测试数据下载地质:https://drive.google.com/drive/folders/1CGYEJ9-wWjr8INyan6q1BZz_5VtGB-fP 任意一个即可。


5. 注意事项

  1. 编译顺序

    • 先安装 Eigen / PCL
    • 再编译 Livox SDK + Livox ROS Driver
    • 最后编译 FAST-LIO
  2. 环境变量

    • 每次开新终端记得 source,建议写到 ~/.bashrc
  3. Sophus

    • 如果没有 Sophus,需要先安装:

      git clone https://github.com/strasdat/Sophus.git
      cd Sophus
      mkdir build && cd build
      cmake ..
      make
      sudo make install
      

📌 建议你按照我整理的步骤来操作,能大概率一次跑通。

Sophus版本问题、cmake版本问题、sim3问题

**

首先千万不要升级cmake,因为后面很多包都指定他的版本,贸然升级会带来很多麻烦。

**
看到了 👍,你这里 Sophus 报错:

CMake Error at CMakeLists.txt:1 (cmake_minimum_required):CMake 3.24 or higher is required.  You are running version 3.16.3

这是因为 系统自带的 CMake (3.16.3, Ubuntu 20.04 默认版本) 太低,而 Sophus 的最新版要求 CMake ≥ 3.24


解决方案有两个方向:

✅ 方案 1:使用老版本的 Sophus(推荐)

FAST-LIO 并不需要 Sophus 的最新版,用旧版本即可。
~/catkin_ws/src 下删除原来的 Sophus,然后切换到合适的 tag:

cd ~/catkin_ws/src
rm -rf Sophus
git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout a621ff  # 这个版本常用于 FAST-LIO,兼容 CMake 3.16
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install

✅ 方案 2:升级 CMake(不太推荐)

如果你坚持用 Sophus 最新版,需要升级 CMake。Ubuntu 20.04 默认是 3.16,可以手动升级:

sudo apt purge cmake
sudo snap install cmake --classic
cmake --version   # 应该会显示 3.28+

然后重新编译 Sophus。


🚀 建议

我推荐 方案 1(换旧版 Sophus),这样不需要动 CMake,和 ROS/FAST-LIO 的兼容性最好。

要不要我帮你直接查一下 最适合 FAST-LIO 的 Sophus 版本号,然后你就按我给的版本去 git checkout

最后解决成功的方法是切换Sophus到旧版本,然后会报sim3的错误,不要注释和删除文件,将cmakelist中的 一行注释调。

#ADD_DEFINITIONS("-Wall -Werror -Wno-unused-variable

-Wno-unused-but-set-variable -Wno-unknown-pragmas ")

SET(PROJECT_NAME Sophus)PROJECT(${PROJECT_NAME})
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)SET (CMAKE_VERBOSE_MAKEFILE ON)IF( NOT CMAKE_BUILD_TYPE )SET( CMAKE_BUILD_TYPE Release )
ENDIF()IF (CMAKE_COMPILER_IS_GNUCXX )SET(CMAKE_CXX_FLAGS_DEBUG  "-O0 -g")SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG ")#ADD_DEFINITIONS("-Wall -Werror -Wno-unused-variable#                -Wno-unused-but-set-variable -Wno-unknown-pragmas ")
ENDIF()################################################################################
# Add local path for finding packages, set the local version first
set( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" )
list( APPEND CMAKE_MODULE_PATH "${CMAKE_ROOT}/Modules" )################################################################################
# Create variables used for exporting in SophusConfig.cmake
set( Sophus_LIBRARIES "" )
set( Sophus_INCLUDE_DIR ${PROJECT_SOURCE_DIR} )#################################################################################SET (INCLUDE_DIRS "../eigen3.1/")
find_package( Eigen3 REQUIRED )
INCLUDE_DIRECTORIES( ${EIGEN3_INCLUDE_DIR} )
SET( Sophus_INCLUDE_DIR ${Sophus_INCLUDE_DIR} ${EIGEN3_INCLUDE_DIR} )SET (SOURCE_DIR "sophus")
SET (CLASSES  so2se2se3so3scso3sim3
)SET (SOURCES)FOREACH(class ${CLASSES})LIST(APPEND SOURCES ${SOURCE_DIR}/${class}.cpp ${SOURCE_DIR}/${class}.h)
ENDFOREACH(class)LINK_LIBRARIES (${PROJECT_NAME} ${LIBS})set( Sophus_LIBRARIES ${Sophus_LIBRARIES} ${LIBS} )INCLUDE_DIRECTORIES(${INCLUDE_DIRS})
ADD_LIBRARY(${PROJECT_NAME} SHARED ${SOURCES})ADD_EXECUTABLE(test_so2 sophus/test_so2.cpp)
ADD_EXECUTABLE(test_se2 sophus/test_se2.cpp)
ADD_EXECUTABLE(test_so3 sophus/test_so3.cpp)
ADD_EXECUTABLE(test_scso3 sophus/test_scso3.cpp)
ADD_EXECUTABLE(test_se3 sophus/test_se3.cpp)
ADD_EXECUTABLE(test_sim3 sophus/test_sim3.cpp)
ENABLE_TESTING()ADD_TEST(test_so2 test_so2)
ADD_TEST(test_se2 test_se2)
ADD_TEST(test_so3 test_so3)
ADD_TEST(test_scso3 test_scso3)
ADD_TEST(test_se3 test_se3)
ADD_TEST(test_sim3 test_sim3)##############################################################################
# Get full library name
GET_TARGET_PROPERTY( FULL_LIBRARY_NAME ${PROJECT_NAME} LOCATION )
set( Sophus_LIBRARIES ${Sophus_LIBRARIES} ${FULL_LIBRARY_NAME} )
set( Sophus_LIBRARY_DIR ${PROJECT_BINARY_DIR} )################################################################################
# Create the SophusConfig.cmake file for other cmake projects.
CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/SophusConfig.cmake.in${CMAKE_CURRENT_BINARY_DIR}/SophusConfig.cmake @ONLY IMMEDIATE )
export( PACKAGE Sophus )INSTALL(DIRECTORY sophus DESTINATION ${CMAKE_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.h" )
INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib )

Eigen 版本过低问题,与PCL不兼容

error: ‘Index’ is not a member of ‘Eigen’; did you mean ‘flann::Index’?
for (Eigen::Index ni = 0; ni < relative_coordinates.cols (); ni++)

从新的错误日志来看,核心问题是 Eigen 版本与 PCL 版本不兼容,导致编译器无法识别 Eigen::Index 类型。以下是具体分析和分步解决方法:

一、错误原因解析

错误日志中关键信息:

error: ‘Index’ is not a member of ‘Eigen’; did you mean ‘flann::Index’?
for (Eigen::Index ni = 0; ni < relative_coordinates.cols (); ni++)
  • Eigen::IndexEigen 3.3.9 及以上版本 才引入的类型(用于表示矩阵/向量的索引,替代传统的 int)。
  • 你的环境中可能安装了 低版本 Eigen(如 3.3.7 或更早),而当前使用的 PCL 1.10 版本依赖 Eigen::Index,导致类型未定义错误。

二、解决步骤(核心:升级 Eigen 到兼容版本)

步骤 1:检查当前 Eigen 版本

先确认系统中已安装的 Eigen 版本,执行命令:

# 查看 Eigen 版本文件
cat /usr/local/include/eigen3/Eigen/src/Core/util/Macros.h | grep EIGEN_WORLD_VERSION -A 2
  • 输出格式如下,若 EIGEN_WORLD_VERSION=3EIGEN_MAJOR_VERSION=3EIGEN_MINOR_VERSION<9(如 7),则版本过低,需升级:
    #define EIGEN_WORLD_VERSION 3
    #define EIGEN_MAJOR_VERSION 3
    #define EIGEN_MINOR_VERSION 7  // 低于 9,需升级
    
步骤 2:卸载旧版本 Eigen(可选,避免冲突)

若旧版本 Eigen 安装在 /usr/local/include/eigen3,执行以下命令删除(注意:若其他软件依赖旧版本,需谨慎,可跳过此步直接覆盖安装):

sudo rm -rf /usr/local/include/eigen3
sudo rm -rf /usr/local/lib/cmake/eigen3  # 清除 CMake 配置
步骤 3:安装 Eigen 3.3.9(兼容 PCL 1.10 的稳定版本)
  1. 下载 Eigen 3.3.9 源码包:

    cd ~/Downloads  # 进入下载目录
    wget https://gitlab.com/libeigen/eigen/-/archive/3.3.9/eigen-3.3.9.tar.gz
    
  2. 解压并编译安装:

    tar -zxvf eigen-3.3.9.tar.gz  # 解压
    cd eigen-3.3.9
    mkdir build && cd build
    cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local  # 安装到系统默认路径
    sudo make install  # 安装(需管理员权限)
    
  3. 验证安装:
    再次执行步骤 1 的版本检查命令,确认版本已更新为 3.3.9:

    cat /usr/local/include/eigen3/Eigen/src/Core/util/Macros.h | grep EIGEN_WORLD_VERSION -A 2
    

    正确输出应为:

    #define EIGEN_WORLD_VERSION 3
    #define EIGEN_MAJOR_VERSION 3
    #define EIGEN_MINOR_VERSION 9
    
步骤 4:清理 fast_lio 旧编译缓存并重新编译

由于之前编译残留了旧 Eigen 版本的配置,需先清理缓存,再重新编译:

# 进入工作空间,清理 fast_lio 的编译目录
cd ~/catkin_ws
rm -rf build/fast_lio devel/.private/fast_lio  # 删除旧编译文件和devel文件# 重新编译 fast_lio(或整个工作空间)
catkin build fast_lio  # 仅编译 fast_lio,速度更快
# 或 catkin build  # 编译整个工作空间

从执行的命令结果来看,当前系统安装的 Eigen 版本是 3.2.10(EIGEN_WORLD_VERSION=3, EIGEN_MAJOR_VERSION=2, EIGEN_MINOR_VERSION=10),这个版本远低于 PCL 1.10 所需的 Eigen 3.3.9 及以上版本,这正是导致 Eigen::Index 未定义错误的根本原因(Eigen::Index 是 Eigen 3.3 系列才引入的特性,3.2 版本完全不支持)。

需要按照以下步骤彻底替换为 Eigen 3.3.9 版本,才能解决编译错误:

一、彻底删除旧版本 Eigen 3.2.10

由于旧版本 Eigen(3.2.10)安装在系统默认路径 /usr/local/include/eigen3,必须先完全删除,避免新版本安装后仍被优先调用:

# 1. 删除 Eigen 头文件目录(核心步骤)
sudo rm -rf /usr/local/include/eigen3# 2. 删除 Eigen 的 CMake 配置文件(避免编译时引用旧配置)
sudo rm -rf /usr/local/lib/cmake/eigen3
sudo rm -rf /usr/local/share/eigen3# 3. 检查是否有其他残留(可选,确保彻底删除)
sudo find /usr/local -name "*eigen*" | grep -E "eigen3|Eigen"  # 查看残留文件
# 若输出其他与 Eigen 3.2.10 相关的路径,可手动删除(注意不要误删其他文件)

二、重新安装 Eigen 3.3.9(兼容 PCL 1.10 的稳定版本)

步骤 1:下载 Eigen 3.3.9 源码
# 进入下载目录(如 ~/Downloads,方便后续操作)
cd ~/Downloads# 下载 Eigen 3.3.9 源码包(通过官方链接,确保文件完整)
wget https://gitlab.com/libeigen/eigen/-/archive/3.3.9/eigen-3.3.9.tar.gz
步骤 2:解压并编译安装
# 解压源码包
tar -zxvf eigen-3.3.9.tar.gz# 进入解压后的目录
cd eigen-3.3.9# 创建 build 目录并编译(Eigen 是头文件库,编译仅生成配置文件,无二进制文件)
mkdir build && cd build# 配置安装路径(默认安装到 /usr/local,与旧版本路径一致,确保后续能被找到)
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local# 执行安装(需管理员权限,将头文件和配置文件复制到系统路径)
sudo make install

三、验证 Eigen 版本是否正确更新

安装完成后,再次执行版本检查命令,确认已替换为 3.3.9:

cat /usr/local/include/eigen3/Eigen/src/Core/util/Macros.h | grep EIGEN_WORLD_VERSION -A 2

正确输出应为(版本号需满足 3.3.9):

#define EIGEN_WORLD_VERSION 3
#define EIGEN_MAJOR_VERSION 3
#define EIGEN_MINOR_VERSION 9

若输出仍为 3.2.10,需重新检查步骤 1 是否彻底删除旧版本,或尝试重启终端后再检查(终端可能缓存了旧路径)。

四、清理 fast_lio 旧编译缓存并重新编译

由于之前的编译过程中已缓存了旧 Eigen 3.2.10 的配置,必须删除缓存后重新编译,否则仍会报错:

# 进入工作空间
cd ~/catkin_ws# 删除 fast_lio 的旧编译目录和 devel 目录(关键:清除缓存)
rm -rf build/fast_lio devel/.private/fast_lio# 重新编译 fast_lio(仅编译单个包,速度更快)
catkin build fast_lio

关键说明

Eigen 是头文件库(无 .so 等二进制文件,仅需头文件引用),因此“升级”的核心是用高版本头文件覆盖低版本。之前的错误本质是“3.2 版本头文件中没有 Eigen::Index 类型”,只要确保编译时引用的是 3.3.9 版本的头文件,Eigen::Index 相关错误就会消失。

若执行上述步骤后仍报错,可在编译时添加“查看头文件引用路径”的参数,确认是否正确引用了 3.3.9 版本:

# 编译时显示 Eigen 头文件的实际引用路径(用于排查问题)
catkin build fast_lio -DCMAKE_VERBOSE_MAKEFILE=ON | grep "Eigen/src/Core/util/Macros.h"

若输出路径包含 /usr/local/include/eigen3/Eigen/src/Core/util/Macros.h,且版本为 3.3.9,则配置正确。

最终下载官方文档中的示例文件:

https://drive.google.com/drive/folders/1CGYEJ9-wWjr8INyan6q1BZz_5VtGB-fP

官方git文档地址

https://github.com/hku-mars/FAST_LIO
4. Rosbag Example
4.1 Livox Avia Rosbag

Files: Can be downloaded from google drive

Run:

roslaunch fast_lio mapping_avia.launch
rosbag play YOUR_DOWNLOADED.bag

4.2 Velodyne HDL-32E Rosbag
NCLT Dataset: Original bin file can be found here.

We produce Rosbag Files and a python script to generate Rosbag files: python3 sensordata_to_rosbag_fastlio.py bin_file_dir bag_name.bag

Run:

roslaunch fast_lio mapping_velodyne.launch
rosbag play YOUR_DOWNLOADED.bag
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


文章转载自:

http://8HnEQLeM.jzkqg.cn
http://AG7Sl79Y.jzkqg.cn
http://1tiULcTG.jzkqg.cn
http://7DVNr1IB.jzkqg.cn
http://FFMupbNi.jzkqg.cn
http://iwN5Nwt9.jzkqg.cn
http://i7FWNvUg.jzkqg.cn
http://SInoGS7S.jzkqg.cn
http://KIQ1skDw.jzkqg.cn
http://T2n5eBTQ.jzkqg.cn
http://SvqKBVls.jzkqg.cn
http://g1yWniJI.jzkqg.cn
http://YgIkMfQ8.jzkqg.cn
http://0jevW55t.jzkqg.cn
http://q5ApXVPA.jzkqg.cn
http://6YE8iY3d.jzkqg.cn
http://vz743XFf.jzkqg.cn
http://OaEFkKdR.jzkqg.cn
http://Vd72iYBi.jzkqg.cn
http://X3atKZAk.jzkqg.cn
http://oyKXPJh0.jzkqg.cn
http://4pkbJGL6.jzkqg.cn
http://a5ZaMPJO.jzkqg.cn
http://mOaohrjh.jzkqg.cn
http://PnkjAmbp.jzkqg.cn
http://SlQRPlnt.jzkqg.cn
http://PmZ8Ye49.jzkqg.cn
http://2bkBXDco.jzkqg.cn
http://vWUJGWFx.jzkqg.cn
http://GrG3qjUM.jzkqg.cn
http://www.dtcms.com/a/365951.html

相关文章:

  • 51单片机----LED与数码管模块
  • C 语言标准输入输出库:`stdio.h` 的使用详解
  • 【WPS】WPSPPT 快速抠背景
  • Python学习笔记--使用Django修改和删除数据
  • 52.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--解决客户端调用接口404问题
  • 硬件:51单片机的按键、中断、定时器、PWM及蜂鸣器
  • Spring Boot HTTP状态码详解
  • 性能测试-jmeter8-脚本录制
  • 揭秘23种设计模式的艺术与技巧
  • < 自用文 主机 USC 记录:> 发现正在被攻击 后的自救
  • Protocol Buffers:数据世界的秘语之书,手把手教学环境搭建
  • mysql高级进阶(存储过程)
  • 认识HTML
  • CDN的工作原理是什么?为什么要用高防 CDN?
  • 数据结构:双向链表
  • 分割回文串手绘图
  • 电脑城老板不会告诉你的装机秘籍:建造者模式让你的代码高配起飞!
  • @Autowired原理(三)
  • 【Qt中信号槽连接connect有接收者和无接收者的区别】
  • LeetCode 20.有效的符号算法解析及栈的相关知识
  • FTL文件格式的原理与应用(AI)
  • 【工具变量】上市公司绿色供应链管理示范企业DID数据(2010-2024年)
  • AUTOSAR进阶图解==>AUTOSAR_TPS_ARXMLSerializationRules
  • Linux学习-硬件
  • 2025年IT行业入门级证书选择与分析
  • 从竞态到原子:pread/pwrite 如何重塑高效文件 I/O?
  • 深入浅出:YOLOv8性能评估指标与电科金仓2025AI新成果
  • SuperMap GIS基础产品FAQ集锦(20250819)
  • C++----模板特化以及模板声明与定义分离问题
  • 2025 大学生必考 IT 行业证书