源项目:
https://github.com/liangheming/FASTLIO2_ROS2
https://github.com/liangheming/FASTLIO2_ROS2
项目依赖以下第三方库,
pcl
Eigen
sophus
gtsam
livox_ros_driver2
在我们编译完mid360的sdk和ros2驱动包(可以参考我之前的文章)后,我们只需编译sophus
gtsam即可,其他几个之前编译好了,反正缺啥编译啥
1.sophus编译
https://github.com/strasdat/Sophus
https://github.com/strasdat/Sophus
bash
git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout 1.22.10 #旧版本
mkdir build && cd build
cmake .. -DSOPHUS_USE_BASIC_LOGGING=ON
make
sudo make install
原文说新的Sophus依赖fmt,可以在CMakeLists.txt中添加add_compile_definitions(SOPHUS_USE_BASIC_LOGGING)去除,否则会报错
2.gtsam编译
https://github.com/borglab/gtsam
https://github.com/borglab/gtsam下载完项目,需要需要添加dllexport.h文件,不然编译会报错
bash
git clone https://github.com/borglab/gtsam.git
# 进入 cephes 目录
cd gtsam/gtsam/3rdparty/cephes
# 创建 dllexport.h 文件
tee dllexport.h > /dev/null << 'EOF'
#ifndef DLLEXPORT_H
#define DLLEXPORT_H
/* Define DLLEXPORT for Windows, empty for other platforms */
#ifdef _WIN32
#ifdef GTSAM_SHARED_LIB
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
#else
#define DLLEXPORT
#endif
#endif // DLLEXPORT_H
EOF
bash
cd gtsam
#!bash
mkdir build
cd build
cmake ..
make check -j8 #多线程编译
sudo make install
编译有点久,编译完成,查看动态链接库的路径
bash
# 找到 libgtsam.so.4 文件
find ~ -name "libgtsam.so.4" 2>/dev/null
如果后面保存地图出现找不到libgtsam.so.4,可以手动添加到路径到环境变量
bash
# 临时解决方案(在当前终端生效)
export LD_LIBRARY_PATH=/path/to/your/gtsam/install/lib:$LD_LIBRARY_PATH
# 永久解决方案(添加到 ~/.bashrc)
echo 'export LD_LIBRARY_PATH=/path/to/your/gtsam/install/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
例如
bash
szz@szz:~/ws_livox$ find ~ -name "libgtsam.so.4" 2>/dev/null
/home/szz/gtsam-develop/build/gtsam/libgtsam.so.4
szz@szz:~/ws_livox$ export LD_LIBRARY_PATH=/home/szz/gtsam-develop/build/gtsam/libgtsam.so.4:$LD_LIBRARY_PATH
4.fast-lio2
将fast-lio2里面的包移动到自己src中编译即可使用
5.建图验证
5.1下载验证的pcd文件,也可以用自己的
http://链接: https://pan.baidu.com/s/1rTTUlVwxi1ZNo7ZmcpEZ7A?pwd=t6yb 提取码: t6yb
1.激光惯性里程计
bash
ros2 launch fastlio2 lio_launch.py
ros2 bag play your_bag_file
2.里程计加回环
启动回环节点
bash
ros2 launch pgo pgo_launch.py
ros2 bag play your_bag_file

保存地图
bash
ros2 service call /pgo/save_maps interface/srv/SaveMaps "{file_path: 'your_save_dir', save_patches: true}"
预览pcd地图
bash
sudo apt-get install pcl-tools
pcl_viewer xxx.pcd

3.里程计加重定位
启动重定位节点
bash
ros2 launch localizer localizer_launch.py
ros2 bag play your_bag_file // 可选
设置重定位初始值
bash
ros2 service call /localizer/relocalize interface/srv/Relocalize "{"pcd_path": "your_map.pcd", "x": 0.0, "y": 0.0, "z": 0.0, "yaw": 0.0, "pitch": 0.0, "roll": 0.0}"
检查重定位结果
bash
ros2 service call /localizer/relocalize_check interface/srv/IsValid "{"code": 0}"

4.一致性地图优化
启动一致性地图优化节点
bash
ros2 launch hba hba_launch.py
调用优化服务
bash
ros2 service call /hba/refine_map interface/srv/RefineMap "{"maps_path": "your maps directory"}"
如果需要调用优化服务,保存地图时需要设置save_patches为true
原作者提到机器性能问题,TIPS:将timerCB改成用用一个单独线程去run就可以了。