准备工作
一、编译calibration_toolkit
mkdir -p calibration_toolkit
安装nlopt
标定工具箱依赖于nlopt
cd calibration_toolkit
git clone git://github.com/stevengj/nlopt.git
cd nlopt
mkdir -p build&&cd build
cmake ..
make
sudo make install
编译calibration_camera_lidar
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
sudo 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
然后在之前的终端中重新执行catkin_make ,编译完成结果如下图:
测试编译结果
新建终端
roscore
新建终端
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
录制bag
打开rostopic list ,查看发布话题 打开rviz ,查看点云和图像信息,保证保定板在相机和雷达视野范围内
rosbag record -O [bag_name] [topic1] [topic2] [...]
rosbag info [bag_file]
rosbag play [bag_file]
录制标定数据
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线雷达点云比较稀疏,相机拍摄距离有限,所以标定是不要站得太远,并且在每个位置上缓慢做“上仰、下俯 、中间、左偏、右偏”五个动作。
三、ZED相机和VLP-16雷达外参标定
标定工具订阅的是/points_raw话题,需要将激光雷达的原始节点名称改为/points_raw。 回放雷达相机 bag
roscore
rosbag play --pause zed_lidar_calibration.bag /velodyne_points:=/points_raw
启动标定工具
source ~/calibration_toolkit/calibration/devel/setup.bash
rosrun calibration_camera_lidar calibration_toolkit
选择输入图像话题:ZED 的左图像话题 选择标定模式:Camera->Velodyne 相机雷达标定工具主界面MainWindow如图: 配置标定板棋盘格参数:
- pattern size(m):标定板单元格的边长,单位m,实验使用的标定板为0.097×0.097;
- pattern number:标定板(每列单元格的个数-1)??×(每行单元格的个数-1), 实验使用的标定板为6×8;
- 设置后,重启标定工具箱保存参数;
- 点击Load导入相机内参YAML文件,可通过ROS下ZED相机的安装与标定求得。
开始标定 Step 1:打开回放bag 终端,按空格继续回放数据,主界面会显示相机图像: Step 2:得到一个较好雷达图像时按空格暂停,调整雷达视角使点云中标定板处于窗口中心位置(先按E再按W把点云调整为前视图、最后使用+放大点云前视图,始终保持标定板点云图在窗口内)。
- 移动点云:↑、↓、←、→、PgUp、PgDn
- 旋转点云:a、d、w、s、q、e
- 切换模式: 1 透视投影、 2正交投影
- 视角缩放:减号缩小、加号放大
- 点云大小:o 小点云、p 大点云
- 改变点云窗口背景颜色:b
Step 3:点击[grab]进行捕捉,可以得到相机标定面(左下角)和对应的雷达点云图(右下角) Step 4:在激光雷达图中框选标定板的中心位置选择一个圆形区域,尽量保证向外侧的平面法向量垂直于标定板平面(为了方便观察选中圆形区域在雷达点云图标定板的位置,可以按1切换到透视投影,再按加号放大,若选中区域没有在标定板中心,可以按2切换回正交投影,按右键取消选中区域,重新选取圆形区域,直到符合要求。)Step 5:重复上述步骤,在每个位置选择多张进行标定,直至播完bag, 点击[calibrate]按钮计算外参矩阵数据;
Step 6:点击[project]查看标定效果,左下图中红点会散落到标定板,可以根据标定版上红点投影情况以及重投影误差确认标定结果; Step 7:点击[save]保存标定结果,可以保存相机、雷达各自的内参标定结果以及联合标定结果。
结果如图所示:
|