mkdir -p calibration_toolkit
标定工具箱依赖于nlopt
cd calibration_toolkit
git clone https://github.com/stevengj/nlopt.git
cd nlopt
mkdir -p build&&cd build
cmake ..
make
sudo make install
cd ~/calibration_toolkit
mkdir -p calibration/src && cd calibration/src
git clone https://github.com/XidianLemon/calibration_camera_lidar.git
cd ..
Ubuntu18.04的ROS版本是melodic,而calibration_toolkit不支持melodic,所以在执行catkin_make前需把~/calibration/src/calibration_camera_lidar/ls_calibration/calibration_camera_lidar
目录下的CMakeLists.txt
文件,否则也能编译完成后没有calibration_toolkit节点。
# 新建终端
cd ~/calibration_toolkit/calibration/src/calibration_camera_lidar/ls_calibration/calibration_camera_lidar
gedit CMakeLists.txt
在CMakeLists.txt
中所有的if ("${ROS_VERSION}" MATCHES "(indigo|jade|kinetic)")
后面增加自己的ROS版本melodic
,如下图所示:
之后便可在原终端中执行catkin_make
,在catkin_make编译过程中:
1. 若出现Could not find the required component ‘jsk_recognition_msgs’
报错:
解决方法:
# 新建终端
sudo apt-get install ros-melodic-jsk-recognition-msgs
2.若出现Could not find the required component ‘pcl_ros’
报错:
解决方法:
# 新建终端
sudo apt-get install ros-melodic-pcl-ros
若出现:
![在这里插入图片描述](https://img-blog.csdnimg.cn/e5d6467907eb458aaf5a3d88fd7ccff4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU21laWxlQXRsYXM=,size_20,color_FFFFFF,t_70,g_se,x_16
说明anaconda版本与ROS冲突,可以先将anaconda删除,编译完成后再恢复,然后在之前的终端中重新执行catkin_make
,编译完成结果如下图:
新建终端
roscore
新建终端
# 进入calibration目录
cd ~/calibration_toolkit/calibration
# 终端输入:
source devel/setup.bash
rosrun 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
添加/usr/local/lib
# 然后在上面终端输入
sudo ldconfig
在上面source过的终端重新运行
rosrun calibration_camera_lidar calibration_toolkit
在线生成棋盘格
在线生成aruco
source ~/velodyne_ws/devel/setup.bash
roslaunch velodyne_pointcloud VLP16_points.launch
source ~/zed_ws/devel/setup.bash
roslaunch zed_wrapper zed.launch
打开rostopic list
,查看发布话题
打开rviz
,查看点云和图像信息,保证保定板在相机和雷达视野范围内
# 录制
rosbag record -O [bag_name] [topic1] [topic2] [...] #不加中括号
# 信息
rosbag info [bag_file] #不加中括号
# 播放
rosbag play [bag_file] #不加中括号
录制标定数据
# 录制ZED左右相机话题和VLP-16雷达话题 Bag
rosbag record -O zed_lidar_calibration.bag /velodyne_points /zed/zed_node/left_raw/image_raw_color /zed/zed_node/right_raw/image_raw_color
注意事项:
16线雷达点云比较稀疏,相机拍摄距离有限,所以标定是不要站得太远,并且在每个位置上缓慢做“上仰、下俯 、中间、左偏、右偏”五个动作。
左边 | 中间 | 右边 |
---|---|---|
左近 | 中近 | 右近 |
左中 | 中中 | 右中 |
左远 | 中远 | 右远 |
标定工具订阅的是/points_raw话题,需要将激光雷达的原始节点名称改为/points_raw。
roscore
# 新建终端
rosbag play --pause zed_lidar_calibration.bag /velodyne_points:=/points_raw
# --pause 表示在启动瞬间暂停,无该参数可在启动瞬间手动按空格暂停
# 新建终端
source ~/calibration_toolkit/calibration/devel/setup.bash
rosrun calibration_camera_lidar calibration_toolkit
选择输入图像话题:ZED 的左图像话题
选择标定模式:Camera->Velodyne
相机雷达标定工具主界面MainWindow如图:
配置标定板棋盘格参数:
Step 1:打开回放bag 终端,按空格继续回放数据,主界面会显示相机图像:
Step 2:得到一个较好雷达图像时按空格暂停,调整雷达视角使点云中标定板处于窗口中心位置(先按E再按W把点云调整为前视图、最后使用+放大点云前视图,始终保持标定板点云图在窗口内)。
Step 6:点击[project]查看标定效果,左下图中红点会散落到标定板,可以根据标定版上红点投影情况以及重投影误差确认标定结果;
Step 7:点击[save]保存标定结果,可以保存相机、雷达各自的内参标定结果以及联合标定结果。
|
|
%YAML:1.0
---
CameraExtrinsicMat: !!opencv-matrix
rows: 4
cols: 4
dt: d
data: [ -8.1140024195462956e-03, -1.7974991318900624e-02,
9.9980551241319970e-01, -9.8524246704271790e-02,
-9.9992345365164348e-01, 9.4854060409743646e-03,
-7.9444263233519608e-03, 5.4542147115564640e-02,
-9.3407602530475864e-03, -9.9979344204656750e-01,
-1.8050580006520267e-02, -1.1414053668167710e-01, 0., 0., 0., 1. ]
CameraMat: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 7.5127351612444852e+02, 0., 6.1754137444621790e+02, 0.,
7.5310861601713998e+02, 3.4297462001259970e+02, 0., 0., 1. ]
DistCoeff: !!opencv-matrix
rows: 1
cols: 5
dt: d
data: [ -1.3404729828885276e-01, -6.9151236389979817e-02,
-6.0586055828823700e-05, -1.2930813085587091e-03,
1.2125267288693040e-01 ]
ImageSize: [ 1280, 720 ]
ReprojectionError: 4.0850987317390186e-01