SLAM学习所需ubuntu20.04、ros和相关库在B站寻找教程
ros安装教程:
【安装】Ubuntu20.04下安装ROS的完整过程(内含已装好ROS的虚拟机、虚拟机创建过程、ROS安装过程及全过程录屏)_ros虚拟机现成的-CSDN博客
建议学习:c++、Cmake、linux操作指令、ros指令
所需软件:rviz、gazebo(可能)
代码重现所需数据集:FAST-LIVO2-Dataset - Google 云端硬盘(只需要随便下载一个包就可以,其他包是消融实验对比)
注:FAST-LIVO2 只支持ros的noetic版本,必须使用ubuntu20.04或之前的版本,后续Ubuntu版本使用pip命令无法下载ros。
fastlivo2官网:hku-mars/FAST-LIVO2: FAST-LIVO2: Fast, Direct LiDAR-Inertial-Visual Odometry
FAST-LIVO2 没有一个"算法大文件",它由src/下 4 个核心 cpp 组成:
主算法框架和 ESKF 主循环在src/LIVMapper.cpp;
视觉部分是src/vio.cpp;
激光部分是src/voxel_map.cpp;
IMU 部分是src/IMU_Processing.cpp。
main.cpp
└─ LIVMapper::run() // 5000Hz 主循环
├─ sync_packages() // 按图像曝光时刻切分 LiDAR/IMU,决定走 LIO 还是 VIO
├─ processImu() → ImuProcess::Process2() → UndistortPcl() // IMU 传播 + 去畸变
└─ stateEstimationAndMapping()
├─ handleLIO() → VoxelMapManager::StateEstimation() // 点到面 ESKF(LiDAR)
└─ handleVIO() → VIOManager::processFrame() // 光度误差 ESKF(视觉)
fast-livo2文件在ubuntu中的文件树如下:
D:\Ubuntu\share\fast-livo2\
│
├── data\ 1 个文件 · 792.8 MB
│ └── 2017-06-08-15-49-45_0.bag 792.8 MB ← Jackal 的 Velodyne+IMU(无相机)
│
├── FAST-LIVO2-main\ 75 个文件 · 27.7 MB
│ ├── config\ 8 个文件
│ │ ├── avia.yaml 主配置(Livox Avia + 相机)
│ │ ├── camera_pinhole.yaml 针孔相机内参
│ │ ├── camera_fisheye_HILTI22.yaml
│ │ ├── camera_MARS_LVIG.yaml
│ │ ├── camera_NTU_VIRAL.yaml
│ │ ├── HILTI22.yaml
│ │ ├── MARS_LVIG.yaml
│ │ └── NTU_VIRAL.yaml
│ ├── launch\ 4 个文件
│ │ ├── mapping_avia.launch ← 你要跑的这个
│ │ ├── mapping_avia_marslvig.launch
│ │ ├── mapping_hesaixt32_hilti22.launch
│ │ └── mapping_ouster_ntu.launch
│ ├── src\ 8 个文件
│ │ ├── main.cpp
│ │ ├── LIVMapper.cpp 主框架(1371 行)
│ │ ├── voxel_map.cpp LiDAR ESKF 更新
│ │ ├── vio.cpp 视觉 ESKF 更新
│ │ ├── IMU_Processing.cpp IMU 传播
│ │ ├── preprocess.cpp 点云预处理
│ │ ├── frame.cpp
│ │ └── visual_point.cpp
│ ├── include\ 14 个文件
│ │ ├── common_lib.h 状态量定义、LID_TYPE 枚举
│ │ ├── LIVMapper.h
│ │ ├── voxel_map.h
│ │ ├── vio.h
│ │ ├── IMU_Processing.h
│ │ ├── preprocess.h
│ │ ├── frame.h
│ │ ├── feature.h
│ │ ├── visual_point.h
│ │ └── livox_ros_driver\ 5 个文件(CustomMsg.h 等)
│ ├── rviz_cfg\ 4 个文件
│ │ ├── fast_livo2.rviz
│ │ ├── hilti.rviz
│ │ ├── ntu_viral.rviz
│ │ └── M300.rviz
│ ├── Log\ 28 个文件 · 7.0 MB
│ │ ├── guide.md
│ │ ├── plot.py
│ │ └── result\ntu_viral\ 9 条序列的 gt/prism 轨迹 txt(不是数据)
│ ├── pics\ 1 个文件
│ │ └── Framework.png 1.6 MB
│ ├── Supplementary\ 1 个文件
│ │ └── LIVO2_supplementary.pdf 18.7 MB ← 整个目录最大的文件
│ ├── scripts\ 2 个文件
│ ├── CMakeLists.txt
│ ├── package.xml
│ ├── README.md
│ ├── LICENSE
│ └── .gitignore
│
└──Global-LVBA-master\18 个文件 · 2.9 MB (PS:自己下载的数据集)
├── config\ 1 个文件(config.yaml)
├── include\ 5 个文件
│ └── BALM\ bavoxel.hpp, tools.hpp
├── launch\ 1 个文件(lvba.launch)
├── pics\ 1 个文件(lvba_cover.jpg,2.8 MB)
├── rviz_cfg\ 1 个文件
├── src\ 3 个文件
│ ├── main.cpp
│ ├── lvba_system.cpp
│ └── dataset_io.cpp
├── CMakeLists.txt
├── package.xml
├── README.md
├── LICENSE
├── .gitmodules SiftGPU 子模块
└── .gitignore
把数据集和算法源码备好后就可以问ai如何开始重现代码(详情见我上传资源里的deepseek的fastlivo2重现对话日志),每个人可能遇到的情况不一致,详细问题ai解决
最后开3个端口:
PS:第三个终端的检查输出是因为我的虚拟机运存太小了,rviz启动后会闪退,第三个端口可以在无rviz的情况下输出获得的数据,如果虚拟机运存足够则不用开第三个。
严格按顺序,每个命令运行后出现稳定输出再开下一个命令
1)启动算法和rviz:(因我运存太小故使用cpu进行渲染,特别卡顿是正常的)
cd ~ && source /opt/ros/noetic/setup.bash && source ~/fast-livo2Try/devel/setup.bash && LIBGL_ALWAYS_SOFTWARE=1 roslaunch fast_livo mapping_avia.launch
2)提供传感器数据:
cd ~ && source /opt/ros/noetic/setup.bash && source ~/fast-livo2Try/devel/setup.bash && rosbag play ~/slamData/fast-livo2/Retail_Street.bag
3)检查输出:
source /opt/ros/noetic/setup.bash && rostopic hz /cloud_registered
命令运行完后rviz会按顺序对包内的png进行建模,可以在窗口内看见成功建的模:
(很卡,考虑要不要使用云服务器做rviz)
重现数据集已经成功,接下来是尝试进行APE定量评测、参数消融,然后尝试用已有的设备搞数据集
数据集内的内容需要LiDAR、IMU、相机图像,其中相机图像的分辨率必须和算法中一致。