loam_livox 算法部署
项目需求采用 图达通INNOVUSION Falcon Prime 激光雷达构建环境三维特征地图,但该雷达不同于传统机械式雷达的360扫描方式,因此之前采用的LIO-SAM方法不再奏效。经资料检索,发现香港大学loam_livox算法,该算法采用固态激光雷达Mid-40,其点云形式和Falcon Prime 有点类似,故决定先跑通loam_livox,然后再研究算法迁移。
1 源码下载
源码地址为:https://github.com/hku-mars/loam_livox
2 准备工作
2.1 简单依赖
按照github源码说明,首先安装依赖,对于ubuntu18.04,如下:
sudo apt-get install ros-melodic-cv-bridge ros-melodic-tf ros-melodic-message-filters ros-melodic-image-transport
2.2 安装Ceres求解器
按照github源码说明,安装的Ceres求解器不好用,于是又查资料安装。
需要注意的是编译Ceres求解器2.2需要支持C++17的编译器。
下载Ceres求解器源码 http://ceres-solver.org/ceres-solver-2.1.0.tar.gz
首先安装依赖,如下:
# CMake
sudo apt-get install cmake
# google-glog + gflags
sudo apt-get install libgoogle-glog-dev libgflags-dev
# Use ATLAS for BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# Eigen3
sudo apt-get install libeigen3-dev
# SuiteSparse and CXSparse (optional)
sudo apt-get install libsuitesparse-dev
进一步,编译、测试、安装Ceres求解器
tar zxf ceres-solver-2.1.0.tar.gz
mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver-2.1.0
make -j3
make test
sudo make install
安装过程中提示 cmake版本不够,于是参考如下升级了cmake
https://blog.csdn.net/Boys_Wu/article/details/104940575?spm=1001.2014.3001.5506
2.3 安装PCL点云库
sudo apt install libpcl-dev
3 编译算法
如果工作空间是catkin_ws,就按如下进行。
cd ~/catkin_ws/src
git clone https://github.com/hku-mars/loam_livox.git
cd ../
catkin_make
source ~/catkin_ws/devel/setup.bash
4 运行算法
运行loam_livox(数据集配置)
roslaunch loam_livox rosbag.launch
播放数据集
rosbag play CYT_02.bag
数据集地址(官方百度云)
Link(链接): https://pan.baidu.com/s/1nMSJRuP8io8mEqLgACUT_w
Extraction code(提取码): sv9z
5 迁移算法
目前算法跑通,但直接移植不行,猜测这其中变量为雷达数据格式。
Mid-40 的pointcloud2 topic 数据格式为:
---
header:
seq: 0
stamp:
secs: 0
nsecs: 0
frame_id: "livox_frame"
height: 1
width: 5000
fields:
-
name: "x"
offset: 0
datatype: 7
count: 1
-
name: "y"
offset: 4
datatype: 7
count: 1
-
name: "z"
offset: 8
datatype: 7
count: 1
-
name: "intensity"
offset: 16
datatype: 7
count: 1
is_bigendian: False
point_step: 32
row_step: 160000
data: [………………………………]
Falcon Prime 的pointcloud2 topic 数据格式为:
header:
seq: 0
stamp:
secs: 0
nsecs: 0
frame_id: "livox_frame"
height: 1
width: 92232
fields:
-
name: "x"
offset: 0
datatype: 7
count: 1
-
name: "y"
offset: 4
datatype: 7
count: 1
-
name: "z"
offset: 8
datatype: 7
count: 1
-
name: "timestamp"
offset: 16
datatype: 8
count: 1
-
name: "intensity"
offset: 24
datatype: 4
count: 1
-
name: "flags"
offset: 26
datatype: 2
count: 1
-
name: "elongation"
offset: 27
datatype: 2
count: 1
-
name: "scan_id"
offset: 28
datatype: 4
count: 1
-
name: "scan_idx"
offset: 30
datatype: 4
count: 1
-
name: "is_2nd_return"
offset: 32
datatype: 2
count: 1
is_bigendian: False
point_step: 48
row_step: 4427136
data: [………………………………]
后续还在研究中。