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 是否安装成功:
三、安装 Livox SDK Livox SDK 是 Livox 激光雷达的底层驱动库,需要在安装 livox_ros_driver 之前完成安装。
3.1 安装依赖
3.2 编译安装 Livox SDK 1 2 3 4 5 6 cd ~git clone https://github.com/Livox-SDK/Livox-SDK.git cd Livox-SDK/buildcmake .. make sudo make install
四、安装 livox_ros_driver livox_ros_driver 是 Livox 激光雷达的 ROS 驱动包。
1 2 3 4 5 mkdir -p ~/ws_livox/srccd ~/ws_livox/srcgit clone https://github.com/Livox-SDK/livox_ros_driver.git cd ..catkin_make
将工作空间添加到环境变量:
1 2 echo "source ~/ws_livox/devel/setup.bash" >> ~/.bashrcsource ~/.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 sudo apt install ros-noetic-ros-numpypip install numpy==1.21 pip install open3d==0.13
5.3 安装其他 ROS 依赖包 1 2 3 4 5 sudo apt install ros-noetic-tf2-sensor-msgssudo apt install ros-noetic-serial
5.4 一键安装所有 ROS 依赖(可选) 进入工作空间后,可使用 rosdep 自动安装所有依赖:
1 2 cd ~/ws_livoxrosdep install --from-paths src --ignore-src -r -y
六、编译 FAST_LIO 6.1 下载源码 1 2 3 4 cd ~/ws_livox/srcgit clone https://github.com/hku-mars/FAST_LIO.git cd FAST_LIOgit submodule update --init
6.2 编译 1 2 3 cd ~/ws_livoxcatkin_make source devel/setup.bash
七、编译 FAST_LIO_LOCALIZATION 7.1 下载源码 推荐使用适配 ROS Noetic 的版本:
1 2 3 4 cd ~/ws_livox/srcgit clone https://github.com/davidakhihiero/FAST_LIO_LOCALIZATION-ROS-NOETIC.git cd FAST_LIO_LOCALIZATION-ROS-NOETICgit submodule update --init
7.2 编译 1 2 3 cd ~/ws_livoxcatkin_make source devel/setup.bash
八、编译指定功能包(可选) 如果只需要编译某个特定的功能包,可以使用以下命令:
1 2 3 4 5 6 7 8 9 10 11 catkin_make --only-pkg-with-deps <包名> 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 roslaunch fast_lio mapping_avia.launch 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 roslaunch fast_lio_localization localization_avia.launch map:=/path/to/your/map.pcd rosbag play YOUR_ROSBAG.bag 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:编译卡住或内存不足 解决方案: 限制编译并行数
问题4:需要清理重新编译 1 2 3 cd ~/ws_livoxrm -rf build develcatkin_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 sudo apt-get updatesudo apt-get install ros-noetic-ros-numpypython3 -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 sudo apt-get updatesudo apt-get install ros-noetic-map-serverrospack 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 updatesudo 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 ~/mapsmkdir -p ~/pcdcp ~/桌面/*.pcd ~/pcd/cp ~/桌面/test/*.yaml ~/maps/cp ~/桌面/test/*.pgm ~/maps/
✅ 问题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 cd ~/livox_ws/src/fast_lio_localization/scriptschmod +x global_localization.pychmod +x transform_fusion.pyfind ~/livox_ws/src -name "*.py" -exec chmod +x {} \; cd ~/livox_wscatkin_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 echo "开始安装ROS依赖包..." sudo apt-get updatesudo 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 sudo apt-get install -y \ ros-noetic-tf \ ros-noetic-tf2-ros echo "安装ros_numpy..." cd ~/livox_ws/srcif [ ! -d "ros_numpy" ]; then git clone https://github.com/eric-wieser/ros_numpy.git fi echo "创建必要的目录..." mkdir -p ~/mapsmkdir -p ~/pcdecho "设置Python文件权限..." find ~/livox_ws/src -name "*.py" -exec chmod +x {} \; echo "编译工作空间..." cd ~/livox_wscatkin_make echo "配置环境变量..." source devel/setup.bashecho "source ~/livox_ws/devel/setup.bash" >> ~/.bashrcecho "✅ 环境配置完成!"
📝 常见问题检查清单 启动前检查 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 rospack find map_server rospack find move_base rospack find pointcloud_to_laserscan rospack find fast_lio_localization ls ~/pcd/*.pcdls ~/maps/*.yamlls ~/maps/*.pgmpython3 -c "import ros_numpy" echo $ROS_PACKAGE_PATH printenv | grep ROS
启动后检查 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 rosnode list rostopic list rosrun tf view_frames evince frames.pdf rostopic info /cmd_vel rostopic echo /cmd_vel rostopic hz /scan
🎯 启动顺序(离线测试) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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 python3 ~/udp_receiver_test.py
🎯 启动顺序(在线运行) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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 rviz -d ~/ws_livox/cfg1.rviz
🔍 故障排查 问题:节点启动失败 1 2 3 4 5 6 rosnode list rosnode info /节点名称 cat ~/.ros/log/latest/*.log
问题:没有速度输出 1 2 3 4 5 6 7 8 9 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 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" 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