使用opencalib中lidar2lidar对自己的数据进行标定
前言
opencalib中lidar2lidar自动标定是针对道路场景,其校准分为两个步骤:地平面对准和非地特征点的配准。
首先,从地面点云和非地面点云中提取点云并进行分割;然后利用地面法线进行地面配准,得到滚转角、俯仰角和z轴平移作为初始外在参数。然后遍历变换后的非地点云的偏航角,计算两个激光雷达最近点的距离,得到最小距离的偏航角。随后,通过法向迭代最近点(NICP)和基于八叉树的优化,继续提高标定精度。
编译手动标定
首先解决编译中的报错问题,cmake顺利,make报错如下
/usr/local/include/pangolin/gl/gl.hpp:348:5: error: ‘glCopyImageSubDataNV’ was not declared in this scope
glCopyImageSubDataNV(tex.tid, GL_TEXTURE_2D, 0, 0, 0, 0,
^~~~~~~~~~~~~~~~~~~~
/usr/local/include/pangolin/gl/gl.hpp:348:5: note: suggested alternative: ‘glCopyColorSubTable’
glCopyImageSubDataNV(tex.tid, GL_TEXTURE_2D, 0, 0, 0, 0,
^~~~~~~~~~~~~~~~~~~~
glCopyColorSubTable
解决办法:Pangolin卸载重装
cd Pangolin
cd build
sudo make uninstall
cmake ..
make
sudo make install
回到SensorsCalibration-master/calibration_ws/lidar2lidar/manual_calib/build文件中,打开终端,重新编译,成功。
运行一下测试程序
cd ~./manual_calib/
./bin/run_lidar2lidar data/qt.pcd data/p64.pcd data/p64-to-qt-extrinsic.json
结果有问题,并没有进行标定。
left_lidar-to-top_center_lidar-extrinsic
lidar to lidar extrinsic:
0.504271 -0.718711 -0.457892 -1.87468
0.604509 0.67629 -0.394462 -1.86523
0.598991 -0.0777196 0.783179 -0.527022
0 0 0 1
Loading data completed!
段错误 (核心已转储)
不知如何解决,删掉build文件夹和bin文件夹下的文件,重新编译一遍
结果同上,未解决问题
全部推倒重来,重新下载安装Pangolin,pcl,eigen3等
实现成功,手动lidar2lidar标定界面(数据是自己的)
标定后的界面
接着编译自动标定
老规矩,新建build文件
cd build
cmake ..
make
一次成功,测试一下吧
cd auto_calib
./bin/run_lidar2lidar data/0001/lidar_cloud_path.txt data/0001/initial_extrinsic.txt
同时在auto_calib文件夹下生成stitching.pcd文件,这是标定好的点云文件,测试成功
换成自己的数据试试
在data文件夹下新建0004文件夹,内容如下,共五个文件,三个点云文件,一个初始外参文件,一个txt文件,用于记录点云文件路径。
运行
./bin/run_lidar2lidar data/0004/lidar_cloud_path.txt data/0004/initial_extrinsic.txt
运行成功,电脑有点垃圾,用了220秒
打开stitching.pcd文件看看效果咋样
啧啧啧,效果不咋滴,应该是没改初始外参的问题
再去试试其它方法吧