激光雷达和相机的联合标定

本文主要记录了在 Ubuntu 18.04 上通过 Autoware,ROS 进行相机内参标定以及激光雷达和相机联合标定的流程。

安装 ROS

顺利的话,用 apt install 就可安装成功。

安装 ROS melodic for Ubuntu 18.04, 按照这篇文章安装 ROS 时,sudo apt-get install ros-melodic-desktop-full 命令报错,无法安装成功,最后,通过 这个方法 解决

编译安装 Autoware

按照官网教程进行安装,我装的是 1.12

相机内参标定

  • 在执行 calib_utils/cam_pub.py 前,需要使用命令 roscore 启动 ros. Ros 是安装在 usr/bin/python 下的,python 版本是 2.7.
  • 执行 python calib_utils/cam_pub.py,若报错 No moudle named rospkg, 是因为没有切换到 2.7 环境下。
  • 可以使用相机实时标定,也可以使用录制好的视频进行标定。区别是在 cam_pub.py 中是读取录制好的视频进行 publish 还是读取摄像头进行 publish。Usb 摄像头可以使用 opencv 读取,海康的工业相机需要使用驱动软件读取。
    使用工业相机时,需要将相机直连到电脑上,并将本机 IP 改为 192.168.2.100,并设置掩码和网关。
  • 用代码将图像数据从某个节点 publish,即调用 python calib_utils/cam_pub.py, 然后用命令
1
2
source install/setup.bash
rosrun autoware_camera_lidar_calibrator cameracalibrator.py --square 0.027 --size 9x9 image:=/rtsp/image_raw

进行标定。其中,0.027 是标定板每个格子的尺寸,单位为 m9x9 为角点的数量,不包含最外层。/rtsp/image_raw 是发布的相机的 topic,可在 publish 的代码里设置。发布的 image topic 可在 RVIZ 中查看,也可以用代码查看。

在相机的视野内移动标定板,若程序在画面中检测到 9x9 的角点,会出现彩色标记。不断移动标定板,当右侧绿色条形都变绿后,CALIBRATE 按钮会被激活,点击 CALIBRATE 按钮,再点击 SAVE 按钮,则标注的结果会被保存到 /home/taoxuan 下。

雷达相机联合标定

  • 将雷达,相机相对位置固定,使其不再发生变化。
  • 录制几段视频和点云数据,分别将关注的点放置在画面的左中右,或者左上至右下6个点
  • 使用命令 rosrun rviz rviz 启动 RVIZ
  • 将对应的视频和点云数据 publish 出来。注意,在这里,在 cam_pub.py 中要更改 driver_or_stream_or_imgimage, 且要在 lidar_pub.py 中 对应更改 img_pcd_pair 中的值。这个值会在 cam_pub.py 中被使用到。要注意修改文件夹的路径。
  • 在 RVIZ 中 Add 一个 PointCloud2,再执行
1
2
source install/setup.bash
roslaunch autoware_camera_lidar_calibrator camera_lidar_calibration.launch intrinsics_file:=/home/taoxuan/20210823_1329_autoware_camera_calibration.yaml image_src:=/rtsp/image_raw

命令, 其中 intrinsics_file:= 设置为前一步生成的相机内参文件, image_src 是相机的 topic。

同时,在 Display -> PointCloud2 -> Topic 中设置为点云 publish 代码里的 topic (即 rospy.Publisher 中的 robosense/points_raw),
同时,在 Display -> Global Options -> Fixed Frame 中设置为 点云 publish 代码里的 header.frame_id 的值 (目前为 robosense)。这样,就可以在 RVIZ 中看到点云的图像了。
似乎 RVIZ 里不支持点云的任意旋转,因此需要在 publish 点云数据之前,对数据进行 transform,使其能够较好地显示及选择点。
Update: 在点云显示框的右边,有一个名为 Views 的标签页,它的 Type 下拉框默认值是 TopDownOrtho,将其改为 ThirdPersonFollower, 即可任意旋转点云。此外,将 PoinCloud2ColorTransformer 改为 AxisColor, 以给每个点添加颜色,便于区分。

  • 在相机的显示窗口里左键点击一个点,然后在 RVIZ 中 点击 Publish Point 按钮后,点击点云中的对应点。当获得 9 对点后,会自动得到标定结果。如果一对视频和点云数据无法获得 9 对点,可更改视频和点云文件,重新发布,并继续选择点对。
  • 标定结果可视化
    标定完成后,可将点云中的点投影到矫正畸变后的图像中,看效果如何。

使用到的脚本

Camera Publish
Camera Subscrib
LiDAR Publish
LiDAR Subscrib
Visualization


文章作者: taosean
文章链接: https://taosean.github.io/2021/12/12/LiDAR-Camera-Joint-Calibration/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 taosean's 学习之旅