Ubuntu 20.04 下 FAST_LIO 及 FAST_LIO_LOCALIZATION 环境搭建指南

Ubuntu 20.04 下 FAST_LIO 及 FAST_LIO_LOCALIZATION 环境搭建指南

前言

FAST-LIO 是一款计算高效且鲁棒的激光雷达惯性里程计(LIO)系统,通过紧耦合迭代扩展卡尔曼滤波器融合LiDAR特征点与IMU数据,可在快速运动、噪声或复杂环境中实现稳定导航。

FAST_LIO_LOCALIZATION 是基于 FAST-LIO 的重定位框架,可在预先构建的点云地图中进行实时3D全局定位。

本文将详细介绍在 Ubuntu 20.04 系统下完整搭建 FAST_LIO 及 FAST_LIO_LOCALIZATION 环境的步骤。


一、系统环境

  • 操作系统:Ubuntu 20.04 LTS
  • ROS版本:ROS Noetic
  • Python版本:Python 3.8

二、安装 ROS Noetic

推荐使用小鱼一键安装脚本,可自动配置国内镜像源,安装速度更快:

1
wget http://fishros.com/install -O fishros && . fishros

按照提示选择安装 ROS Noetic 完整桌面版即可。

安装完成后,验证 ROS 是否安装成功:

1
roscore

三、安装 Livox SDK

Livox SDK 是 Livox 激光雷达的底层驱动库,需要在安装 livox_ros_driver 之前完成安装。

3.1 安装依赖

1
sudo apt install cmake

3.2 编译安装 Livox SDK

1
2
3
4
5
6
cd ~
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK/build
cmake ..
make
sudo make install

四、安装 livox_ros_driver

livox_ros_driver 是 Livox 激光雷达的 ROS 驱动包。

1
2
3
4
5
mkdir -p ~/ws_livox/src
cd ~/ws_livox/src
git clone https://github.com/Livox-SDK/livox_ros_driver.git
cd ..
catkin_make

将工作空间添加到环境变量:

1
2
echo "source ~/ws_livox/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

五、安装基础依赖库

5.1 安装 PCL 和 Eigen

Ubuntu 20.04 默认版本即可满足要求:

1
sudo apt install libpcl-dev libeigen3-dev

5.2 安装定位模块依赖

1
2
3
4
5
6
7
8
# ros_numpy
sudo apt install ros-noetic-ros-numpy

# numpy(指定版本以保证兼容性)
pip install numpy==1.21

# Open3D(用于点云配准)
pip install open3d==0.13

5.3 安装其他 ROS 依赖包

1
2
3
4
5
# tf2_sensor_msgs
sudo apt install ros-noetic-tf2-sensor-msgs

# serial 串口通信库
sudo apt install ros-noetic-serial

5.4 一键安装所有 ROS 依赖(可选)

进入工作空间后,可使用 rosdep 自动安装所有依赖:

1
2
cd ~/ws_livox
rosdep install --from-paths src --ignore-src -r -y

六、编译 FAST_LIO

6.1 下载源码

1
2
3
4
cd ~/ws_livox/src
git clone https://github.com/hku-mars/FAST_LIO.git
cd FAST_LIO
git submodule update --init

6.2 编译

1
2
3
cd ~/ws_livox
catkin_make
source devel/setup.bash

七、编译 FAST_LIO_LOCALIZATION

7.1 下载源码

推荐使用适配 ROS Noetic 的版本:

1
2
3
4
cd ~/ws_livox/src
git clone https://github.com/davidakhihiero/FAST_LIO_LOCALIZATION-ROS-NOETIC.git
cd FAST_LIO_LOCALIZATION-ROS-NOETIC
git submodule update --init

7.2 编译

1
2
3
cd ~/ws_livox
catkin_make
source devel/setup.bash

八、编译指定功能包(可选)

如果只需要编译某个特定的功能包,可以使用以下命令:

1
2
3
4
5
6
7
8
9
10
11
# 编译指定包及其依赖
catkin_make --only-pkg-with-deps <包名>

# 例如只编译 fast_lio
catkin_make --only-pkg-with-deps fast_lio

# 使用白名单方式
catkin_make -DCATKIN_WHITELIST_PACKAGES="fast_lio"

# 清除白名单,恢复编译所有包
catkin_make -DCATKIN_WHITELIST_PACKAGES=""

九、运行测试

9.1 运行 FAST_LIO

以 Livox Avia 为例:

1
2
3
4
5
6
7
8
# 终端1:启动 FAST_LIO
roslaunch fast_lio mapping_avia.launch

# 终端2:启动激光雷达驱动
roslaunch livox_ros_driver livox_lidar_msg.launch

# 或播放录制的数据包
rosbag play YOUR_ROSBAG.bag

9.2 运行 FAST_LIO_LOCALIZATION

1
2
3
4
5
6
7
8
# 终端1:启动定位节点(需指定地图路径)
roslaunch fast_lio_localization localization_avia.launch map:=/path/to/your/map.pcd

# 终端2:播放数据包或启动激光雷达
rosbag play YOUR_ROSBAG.bag

# 终端3:提供初始位姿(x y z yaw pitch roll)
rosrun fast_lio_localization publish_initial_pose.py 0 0 0 0 0 0

也可以在 RVIZ 中使用 “2D Pose Estimate” 工具提供初始位姿估计。


十、常见问题及解决方案

问题1:Could not find tf2_sensor_msgs

解决方案:

1
sudo apt install ros-noetic-tf2-sensor-msgs

问题2:fatal error: serial/serial.h: 没有那个文件或目录

解决方案:

1
sudo apt install ros-noetic-serial

问题3:编译卡住或内存不足

解决方案: 限制编译并行数

1
catkin_make -j2

问题4:需要清理重新编译

1
2
3
cd ~/ws_livox
rm -rf build devel
catkin_make

十一、参考链接


总结

本文详细介绍了在 Ubuntu 20.04 系统下搭建 FAST_LIO 及 FAST_LIO_LOCALIZATION 完整环境的步骤,包括:

  • ROS Noetic 安装
  • Livox SDK 编译安装
  • livox_ros_driver 安装
  • 基础依赖库安装(PCL、Eigen、Open3D 等)
  • FAST_LIO 与 FAST_LIO_LOCALIZATION 编译
  • 常见问题解决方案

按照本教程操作,即可顺利完成环境搭建,开始使用 FAST_LIO 进行激光雷达惯性里程计开发。


建图指令

1、PCD建图

1
roslaunch fast_lio mapping_avia.launch pcd_save_name:=try pcd_save_path:=/home/yusi/桌面/

2、PCD2PGM

1
2
3
4
5
6
roslaunch pcd2pgm pcd_converter.launch \
pcd_file:=/home/yusi/桌面/try.pcd \
output_dir:=/home/yusi/桌面/test \
output_name:=try \
z_max:=0.5 \
z_min:=-0.2

FAST-LIO定位导航系统环境配置文档

📋 系统概述

系统组成:

  • 定位系统:FAST-LIO Localization
  • 传感器:Livox AVIA激光雷达 + IMU
  • 导航系统:ROS Navigation Stack (move_base)
  • 控制输出:UDP控制指令

启动指令:

离线测试:

1
2
3
4
roslaunch sentry_nav main.launch
roslaunch sentry_nav main1.launch
roslaunch cmd_vel_to_udp cmd_vel_to_udp.launch
rosbag play localization_test_scene_1.bag

在线运行:

1
2
3
4
roslaunch livox_ros_driver livox_lidar_msg.launch
roslaunch sentry_nav main.launch
roslaunch sentry_nav main1.launch
roslaunch cmd_vel_to_udp cmd_vel_to_udp.launch

🔧 环境配置问题汇总

1. ROS依赖包安装

问题1:ros_numpy缺失

错误信息:

1
ModuleNotFoundError: No module named 'ros_numpy'

解决方案:

1
2
3
4
5
6
# 方法:apt安装(如果可用)
sudo apt-get update
sudo apt-get install ros-noetic-ros-numpy

# 验证安装
python3 -c "import ros_numpy; print('Success!')"

问题2:map_server缺失

错误信息:

1
ERROR: cannot launch node of type [map_server/map_server]: map_server

解决方案:

1
2
3
4
5
6
# 安装map_server
sudo apt-get update
sudo apt-get install ros-noetic-map-server

# 验证
rospack find map_server

问题3:move_base和导航栈缺失

错误信息:

1
ERROR: cannot launch node of type [move_base/move_base]: move_base

解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 安装完整导航栈
sudo apt-get update
sudo apt-get install -y \
ros-noetic-move-base \
ros-noetic-navigation \
ros-noetic-dwa-local-planner \
ros-noetic-global-planner \
ros-noetic-amcl \
ros-noetic-costmap-2d \
ros-noetic-navfn

# 验证
rospack find move_base

2. TF和坐标系问题

问题5:TF变换失败

错误信息:

1
TF FAILURE: Can't transform pointcloud from frame 'camera_init' to 'map'

原因分析:

  • target_frame 参数设置为 map,但存在坐标变换问题
  • 参数值中可能有多余空格(’map ‘)

解决方案:

方案A:改用camera_init坐标系(最简单)
编辑 pointcloud_to_laserscan 的 launch 文件,修改:

1
<param name="target_frame" value="camera_init"/>

方案B:发布静态TF变换
在launch文件中添加:

1
2
<node pkg="tf2_ros" type="static_transform_publisher" name="map_to_camera_init" 
args="0 0 0 0 0 0 map camera_init 100"/>

3. 文件路径和权限问题

问题6:中文路径问题

错误信息:

1
Map_server could not open /home/yusi/??????/test/lvbo.yaml

原因: ROS C++节点无法处理中文路径(桌面显示为 ??????)

解决方案:

1
2
3
4
5
6
7
8
9
10
11
# 创建英文路径并移动文件
mkdir -p ~/maps
mkdir -p ~/pcd

# 移动地图文件
cp ~/桌面/*.pcd ~/pcd/
cp ~/桌面/test/*.yaml ~/maps/
cp ~/桌面/test/*.pgm ~/maps/

# 修改launch文件中的路径
# 将所有 /home/yusi/桌面/ 改为 /home/yusi/maps/ 或 /home/yusi/pcd/

问题7:Python脚本权限问题

错误信息:

1
2
Cannot locate node of type [global_localization.py] in package [fast_lio_localization]
Make sure file exists in package path and permission is set to executable (chmod +x)

解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
# 方法1:给特定文件添加权限
cd ~/livox_ws/src/fast_lio_localization/scripts
chmod +x global_localization.py
chmod +x transform_fusion.py

# 方法2:给所有Python文件添加权限
find ~/livox_ws/src -name "*.py" -exec chmod +x {} \;

# 重新编译
cd ~/livox_ws
catkin_make
source devel/setup.bash

🚀 完整环境配置脚本

一键安装所有依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash
# FAST-LIO定位导航系统环境配置脚本

echo "开始安装ROS依赖包..."

# 更新软件源
sudo apt-get update

# 安装导航栈
sudo apt-get install -y \
ros-noetic-map-server \
ros-noetic-move-base \
ros-noetic-navigation \
ros-noetic-dwa-local-planner \
ros-noetic-global-planner \
ros-noetic-amcl \
ros-noetic-costmap-2d \
ros-noetic-navfn \
ros-noetic-pointcloud-to-laserscan

# 安装TF相关
sudo apt-get install -y \
ros-noetic-tf \
ros-noetic-tf2-ros

echo "安装ros_numpy..."
cd ~/livox_ws/src
if [ ! -d "ros_numpy" ]; then
git clone https://github.com/eric-wieser/ros_numpy.git
fi

echo "创建必要的目录..."
mkdir -p ~/maps
mkdir -p ~/pcd

echo "设置Python文件权限..."
find ~/livox_ws/src -name "*.py" -exec chmod +x {} \;

echo "编译工作空间..."
cd ~/livox_ws
catkin_make

echo "配置环境变量..."
source devel/setup.bash
echo "source ~/livox_ws/devel/setup.bash" >> ~/.bashrc

echo "✅ 环境配置完成!"

📝 常见问题检查清单

启动前检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 检查所有必需的包
rospack find map_server
rospack find move_base
rospack find pointcloud_to_laserscan
rospack find fast_lio_localization

# 2. 检查地图文件
ls ~/pcd/*.pcd
ls ~/maps/*.yaml
ls ~/maps/*.pgm

# 3. 检查Python模块
python3 -c "import ros_numpy"

# 4. 检查环境变量
echo $ROS_PACKAGE_PATH
printenv | grep ROS

启动后检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1. 查看所有运行的节点
rosnode list

# 2. 查看话题列表
rostopic list

# 3. 查看TF树
rosrun tf view_frames
evince frames.pdf

# 4. 查看cmd_vel
rostopic info /cmd_vel
rostopic echo /cmd_vel

# 5. 查看激光扫描
rostopic hz /scan

🎯 启动顺序(离线测试)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 终端1:启动主定位系统
roslaunch sentry_nav main.launch

# 终端2:启动导航系统
roslaunch sentry_nav main1.launch

# 终端3:启动UDP控制输出
roslaunch cmd_vel_to_udp cmd_vel_to_udp.launch

# 终端4:播放数据包
rosbag play localization_test_scene_1.bag

# 终端5(可选):UDP接收测试
python3 ~/udp_receiver_test.py

🎯 启动顺序(在线运行)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 终端1:启动雷达驱动
roslaunch livox_ros_driver livox_lidar_msg.launch

# 终端2:启动主定位系统
roslaunch sentry_nav main.launch

# 终端3:启动导航系统
roslaunch sentry_nav main1.launch

# 终端4:启动UDP控制输出
roslaunch cmd_vel_to_udp cmd_vel_to_udp.launch

# 终端5(可选):rviz可视化
rviz -d ~/ws_livox/cfg1.rviz

🔍 故障排查

问题:节点启动失败

1
2
3
4
5
6
# 查看详细错误日志
rosnode list
rosnode info /节点名称

# 查看roslaunch日志
cat ~/.ros/log/latest/*.log

问题:没有速度输出

1
2
3
4
5
6
7
8
9
# 检查move_base状态
rostopic echo /move_base/status

# 检查代价地图
rostopic echo /move_base/local_costmap/costmap -n1
rostopic echo /move_base/global_costmap/costmap -n1

# 检查路径规划
rostopic echo /move_base/GlobalPlanner/plan -n1

问题:UDP没有数据

1
2
3
4
5
6
7
8
9
10
# 检查节点是否运行
rosnode list | grep cmd_vel_to_udp

# 检查cmd_vel是否有数据
rostopic hz /cmd_vel
rostopic echo /cmd_vel

# 检查网络连接
ping 目标IP地址
netstat -an | grep 38001

✅ 验证环境配置成功

所有以下命令应该都能正常执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 包检查
rospack find map_server && echo "✅ map_server"
rospack find move_base && echo "✅ move_base"
rospack find pointcloud_to_laserscan && echo "✅ pointcloud_to_laserscan"

# Python模块检查
python3 -c "import ros_numpy; print('✅ ros_numpy')"

# 文件检查
[ -f ~/pcd/lvbo.pcd ] && echo "✅ PCD文件存在"
[ -f ~/maps/lvbo.yaml ] && echo "✅ YAML文件存在"

# 权限检查
[ -x ~/livox_ws/src/cmd_vel_to_udp/scripts/cmd_vel_to_udp_node.py ] && echo "✅ Python脚本可执行"

echo "🎉 环境配置验证完成!"

📚 参考资料


文档版本: v1.0
更新时间: 2026-01-05
适用系统: Ubuntu 20.04 + ROS Noetic