非共视多传感器标定方法 - * LiDAR_Align * 复现及编译过程常见问题解决

Autonomous vehicle 杂谈_13


一. 写在前面

 之前分别介绍了三种制作激光点云的地图的方法,包括:基于Autoware 1.14 构建点云地图;LOAM系列之A - LOAM构建点云地图;LOAM系列之LeGO - LOAM构建点云地图
。这三种方法博主认为比较好用。如果你所用的设备像博主一样,只包含LiDAR和camera的且回环路径比较短的话推荐你用Autoware自带的ndt_mapping功能(能懒一点是一点),如果回环路径较长的话,则推荐A - LOAM;如果你所用的设备还有IMU的话,则就可以使用更为精确的LeGO - LOAM了。
 但其实在建图之前还有一个比较重要的工作也是必须的,那就是多传感器的标定!一般情况下,我们常用的待标定的设备都是共视的,而且标定工作也常常通过标定板来完成。典型的标定解决方法有:无人驾驶汽车系统入门(二十二)——使用Autoware实践激光雷达与摄像机组合标定 ,但难免还是会遇到一些传感器不共视,或者没有标定板的时候,这个时候就需要用一些巧妙的方法了。比如今天要介绍的这个模仿机械臂手眼标定的方法:LiDAR_Align了。
 时间充裕的话建议先拜读一下论文原著:LiDAR and Camera Calibration using Motions Estimated by Sensor Fusion Odometry 。 这种方法的本质其实并不复杂,如下图所示:
非共视多传感器标定方法 - * LiDAR_Align * 复现及编译过程常见问题解决_第1张图片 我们要求解的其实就是LiDAR和Camera坐标系之间的转换关系,在图中被描述为矩阵X,而想要求解这个X的方法就是主动改变传感器们的位姿,之后使用ICP算法对前后帧的点云进行匹配,从而获取激光雷的相对位姿A;而对于camera则是通过前后帧图像的特征点匹配,从而得出camera的相对位姿B,之后基于公式:AX = XB ,从而求解出外参标定结果X。
 虽然博主讲的比较简单,但实际操作起来仍需要考虑camear运动的无尺度性等等一系列问题,仔细看看论文大家就懂了。

二. 代码复现

博主系统环境:Ubuntu18.04、ROS Melodic、
源码地址:https://github.com/ethz-asl/lidar_align

2.1 下载源码并编译
# 先下载一个必要的功能包
sudo apt-get install libnlopt-dev

# 构建ws,下载源码并编译
cd 
mkdir -p lidar_algin_ws/src
cd lidar_align_ws/src
git clone https://github.com/ethz-asl/lidar_align.git
cd ..
catkin_make

2.2 编译过程中遇到的问题及解决办法:

(1)问题描述:not find a package configuration file provided by “NLOPT“_gxushine
解决方法:

pwd  # 确定当前位置为:/home/用户名/lidar_align_ws
cd src/lidar_align
vim CMakeLists.txt

在 find_package(NLOPT REQUIRED)这一行前加入:
set(NLOPT_DIR ./)  	

(2)问题描述:conflicting declaration ‘typedef struct LZ4_stream_t LZ4_stream_t’
解决方法:

cd 
cd ../../usr/include/flann/util
sudo vim serialization.h

修改第9行和第10行为:
  #include "lz4.h"
  #include "lz4hc.h"

2.3 具体实现

PS:博主这里仅对测试用包进行了标定,如果标定设备为IMU + LiDAR 好像还需要对源码进行一定的修改,修改方法详见下方参考博文的第二和第三篇。

(1)录制标定的包

  1. 测试用包:https://drive.google.com/file/d/11fUwbVnvej4NZ_0Mntk7XJ2YrZ5Dk3Ub/view
  2. 自己录制 IMU + LiDAR 的bag
# 这部分借鉴于:博主「大聪明墨菲特」
// rosbag record -大写欧(小写o你的包名会自动加时间日期) 包名 要录的话题1 要录的话题2
 
rosbag record -O lidarimu.bag /imu/data /points_raw
 
//两分钟左右ctrl+c结束录制,包会自动保存在打开终端的testbag文件夹

(2)修改.launch文件

cd 到 :/home/用户名/lidar_algin_ws/src/lidar_align/launch
vim lidar_align.launch

修改:
<arg name="bag_file" default="PATH/TO/YOUR.bag"/> 中的路径为自己录制的标定包的位置

(3)开始标定

cd ../../../  # cd 到 lidar_align的根目录下
source devel/setup.bash
roslaunch lidar_align lidar_align.launch 

(4)查看标定结果

cd 到:
/home/用户名/lidar_algin_ws/src/lidar_align/results
标定结果保存为该文件夹下的 .txt 和 .ply 文件

(5)参考:

  1. Lidar与IMU标定代码实战:lidar_align
  2. 使用lidar_align联合标定lidar与imu的外参
  3. ubuntu16.04 lidar_align实现三维激光雷达和Imu联合标定

如有问题,敬请指正。欢迎转载,但请注明出处。

你可能感兴趣的:(自动驾驶学习整理,LiDAR,自动驾驶,多传感器标定,人工智能,IMU)