使用calibration_toolkit进行相机和三维激光雷达的联合标定(16线速腾雷达)
系统配置:
Ubuntu18.04系统 安装
ROS Melodic 安装
opencv 3.2.0
rslidar 16
calibration_toolkit,autoware 1.10.0版本中的标定工具箱单独编译安装
calibration_toolkit是autoware1.10版本以前内置标定工具,autoware是与apllol类似的自动驾驶模拟系统。
网上很多教程都会先绍autoware的安装然后单独编译标定工具。我根据官网的教程安装autoware,可能是我网络原因和系统配置的原因,一直不能成功将git工程克隆到本地,走了很多弯路。
实际上我发现如果只需要标定工具可以单独安装编译calibration_toolkit这个是大佬从autoware系统中单独“剥”出来的,可以直接安装使用
1、安装nlopt
网上很多安装教程都是ubuntu16.04的,我的系统是18.04的文章前面也已经介绍了系统配置,接下来介绍标定工具的比版以安装。
编译标定工具箱依赖于nlopt,需要先行安装,安装教程参考:https://github.com/stevengj/nlopt
2、安装标定工具箱
标定工具箱安装教程参考:https://github.com/XidianLemon/calibration_camera_lidar,教程很详细有点ros基础的都会,把工程克隆到自己本地工程的src目录下编译即可。
可能出现的问题及解决方式:
- 此时直接运行标定程序,会报找不到可执行文件 calibration_camera_lidar的问题。因为我的系统是ubuntu18.04对应支持的ROS是melodic,因此需要对calibration_camera_lidar功能包下的CMakeLists.txt进行修改,添加ROS的melodic版本的支持,如下图所示,修改CMakeLists.txt中所有 ("
R
O
S
V
E
R
S
I
O
N
"
M
A
T
C
H
E
S
"
(
i
n
d
i
g
o
∣
j
a
d
e
∣
k
i
n
e
t
i
c
)
"
)
为
(
"
{ROS_VERSION}" MATCHES "(indigo|jade|kinetic)")为("
ROSVERSION"MATCHES"(indigo∣jade∣kinetic)")为("{ROS_VERSION}" MATCHES “(indigo|jade|kinetic|melodic)”)
- home/x/catkin_ws/devel/lib/calibration_camera_lidar/calibration_toolkit: error while loading shared libraries: libnlopt.so.0: cannot open shared object file: No such file or directory
解决办法:
cd /etc/ld.so.conf.d
sudo touch libnlopt.conf
sudo gedit libnlopt.conf
在libnlopt.conf文件中添加内容为:/usr/local/lib
$ sudo ldconfig
- 编译问题CMakeFiles/calibrationtoolkit.dir/CalibrationToolkit/calibrationtoolkit.cpp.o: In function
nlopt::opt::get_errmsg() const': /usr/local/include/nlopt.hpp:516: undefined reference to
nlopt_get_errmsg’ #10,我把nlopt安装在根目录下,实际上这个错误应该是我重复安装冲突了,解决办法:
sudo apt remove libnlopt-dev - 在编译过程中,我遇到了opencv的问题,有些函数在opencv2和opencv3的表示不一样,我的系统安装了不同版本的opencv,所以我在CMakeLists.txt需要指定opencv的版本
find_package(OpenCV 3.2.0 REQUIRED)
避免冲突。 - Could not find the required component ‘jsk_recognition_msgs’
新开终端执行以下语句
$ sudo apt-get install ros-melodic-jsk-recognition-msgs
3、开始标定(离线标定)
编译通过后可以启动标定程序
(1)启动录制的数据包
录制的数据包需要注意
(1)标定板要同时在相机和雷达的视野内
(2)这个工具订阅的是velodyne_points,所以需要指定rslidar_points:=/points_raw
(3)不停调整标定板的角度,并且在同一个角度停留久一点,接下来标定捕获图片与点云振才能顺利。
rosbag play bagName.bag /rslidar_points:=/points_raw
(2)启动标定工具
roscore
source ~/catin_ws/devel/setup.bash
rosrun calibration_camera_lidar calibration_toolkit
出现以下选择图像以及标定类型的界面,选择你自己的相机以及标定类型,从标定类型看,该工具可以单独标定相机、雷达以及联合标定。
(2)执行标定步骤
首先在pattern size设置标定板规格,我的标定板是6x8,小方格的size是0.245X0.245,这里给出下载链接下载
先调节点云界面,右上框的颜色,默认是黑色,点一下该框,按下B键,换成浅色调(便于观察)。
qweasd六个健用于旋转,将右边框角度调到与左边一致
step1.调好角度后,按下空格暂停数据播放,点击grab按钮
step2.在右下图选择标定版所在的点云,点击calibrate标定按钮等待一会右边会出现外参矩阵等数据。没有出现下面的图像也没关系,重新播放在grab点云帧。
step3.点击project按钮左下图中红点会散落到标定板,你可以根据标定版上红点投影情况以及重投影误差确认标定结果。
不断重复以上两个步骤,达到标定目的。
点击save保存标定结果,可以保存相机,雷达各自的内参标定结果以及联合标定结果(说明这个工具是可以用于单个传感器的标定的,联合标定不需要提前标定相机的内参)
雷达-相机的联合标定结果如下图: