准备工作

  • Ubuntu18.04+ROS Melodic
  • ZED ROS环境配置与相机内参标定
  • Velodyne ROS环境配置
  • OpenCV 3.2.0

一、编译calibration_toolkit

mkdir -p calibration_toolkit

安装nlopt

标定工具箱依赖于nlopt

cd  calibration_toolkit
git clone https://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
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

录制bag

打开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线雷达点云比较稀疏,相机拍摄距离有限,所以标定是不要站得太远,并且在每个位置上缓慢做“上仰、下俯 、中间、左偏、右偏”五个动作。

左边 中间 右边
左近 中近 右近
左中 中中 右中
左远 中远 右远

三、ZED相机和VLP-16雷达外参标定

标定工具订阅的是/points_raw话题,需要将激光雷达的原始节点名称改为/points_raw。

回放雷达相机 bag

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如图:

配置标定板棋盘格参数:

  • 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]保存标定结果,可以保存相机、雷达各自的内参标定结果以及联合标定结果。

标定结果:

%YAML:1.0
---
CameraExtrinsicMat: !!opencv-matrixrows: 4cols: 4dt: ddata: [ -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-matrixrows: 3cols: 3dt: ddata: [ 7.5127351612444852e+02, 0., 6.1754137444621790e+02, 0.,7.5310861601713998e+02, 3.4297462001259970e+02, 0., 0., 1. ]
DistCoeff: !!opencv-matrixrows: 1cols: 5dt: ddata: [ -1.3404729828885276e-01, -6.9151236389979817e-02,-6.0586055828823700e-05, -1.2930813085587091e-03,1.2125267288693040e-01 ]
ImageSize: [ 1280, 720 ]
ReprojectionError: 4.0850987317390186e-01

使用autoware的calibration_toolkit联合标定双目相机和激光雷达(ZED and VLP-16)相关推荐

  1. autoware 激光-相机联合标定

    autoware进行激光-相机联合标定 ~~~ 刚开始进行激光-相机联合标定的时候,出现了不少问题,在此记录一下整体标定流程,以防忘记.在此,特别感谢佳明师弟,在录制数据集时提供的帮助. ~~~ 0. ...

  2. LMS151-10100单线激光雷达与RealSense双目相机的联合标定

    一丶标定板的准备 棋盘格规格使用A4纸大小,角点(图7中红色.绿色圆圈标记)数分别为8个及6个,单个棋盘格为0.024mm*0.024mm的正方形. 将打印出的高清A4大小棋盘格粘贴在平整.坚硬的平面 ...

  3. 双目相机与IMU联合标定

    前言 为了后面的视觉激光融合SLAM以及跑通VINS-Fusion,需要标定双目相机和IMU得内参以及它们得外参(变换矩阵). 准备工作 双目相机:ZED-m IMU:realsense-t265(仅 ...

  4. 激光雷达和相机的联合标定(Camera-LiDAR Calibration)

    一.总体标定步骤 标定就是找到雷达到相机的空间转换关系,在不同的坐标系之间转换需要旋转矩阵 R 和平移矩阵 T,为后续的雷达和相机数据融合做准备: Camera-LIDAR 联合标定分为 2 步: 相 ...

  5. 基于Matlab的双目相机标定

    第一步,打开matlab 输入stereoCameraCalibrator ,进入工具箱 第二步:点击add images 第三步:添加图片路径,并且修改尺寸(根据格子边长) 工具箱会弹窗告诉你一共识 ...

  6. 相机标定的意义,单目相机和双目相机标定注意事项

    本博客解释了相机标定的意义,单目相机和双目相机标定注意事项.对单目相机标定时物体距离相机位置不同,需要在不同位置进行标定做了解释. 坐标转换 像素坐标.相机坐标.世界物理坐标之间的坐标转换条件 相机标 ...

  7. ZED2双目相机内参标定

    前言 一个 8x6 的棋盘标定板,边长 10.8 cm,因为标定用的是内部角点,所以实际打印出是 9x7 大小 保证一个 5m X 5m 的无遮挡环境 一个发布了左右图像到 ROS 中的双目相机 标定 ...

  8. Kalibr 标定双目内外参数以及 IMU 外参数

    本文记录使用 Kalibr 标定双目相机内外参数以及和IMU之间外参数的标定过程. 采用的硬件设备为小觅的双目VIO设备( MyntEYE), 并且默认你已经有了ROS的知识基础. 标定 stereo ...

  9. 使用Autoware标定工具包进行相机和激光雷达的联合标定

    前提摘要:我用的雷达和相机分别是镭神C16型激光雷达和免驱动摄像头 一.编译标定程序 1.创建工作空间 mkdir -p ~/CL_calibration_ws/src 2.下载安装包 cd ~/CL ...

最新文章

  1. 基于聚类的图像分割-Python
  2. 软件测试2019:第四次作业
  3. 测试算法(性能)的工具类
  4. 开关电源异址替换实战割接
  5. java死锁的产生与解决
  6. 精读《setState 做了什么》
  7. kotlin 查找id_Kotlin程序查找矩阵的转置
  8. bash的一些小技巧
  9. Unity3D-声音处理
  10. 下列类型不是mysql_下列( )类型不是MySQL中常用的的数据类型。
  11. 移动通信网络架构的演进
  12. linux 内存查看 kvm,Linux虚拟化KVM-Qemu分析(五)之内存虚拟化
  13. python调用百度地图API 实现单点沿线轨迹运动
  14. 【关于3D-R2N2的配置和使用】
  15. EVE-NG配置静态固定地址
  16. linux 查询库版本,数据库版本查询(linux数据库版本查询)
  17. Group by函数
  18. 怎样用计算机命令提高网速,如何利用指令提高网速
  19. KeePass v2.17
  20. 7年经验,功能测试工程师该如何一步步提升自己的能力呢?

热门文章

  1. 计算机音乐的感想,音乐教师工作心得体会(精选7篇)
  2. GeneXus开发工具
  3. 硅谷码农35岁危机:Java之父也找不到工作
  4. 笔记本Max-Q架构CPU到底有什么秘密
  5. u盘安装计算机系统,U盘系统_详细教您将系统安装到U盘
  6. cmake教程(cmake教程pdf)
  7. 计算机硬件 软件和用户的关系,大家都知道计算机包含硬件和软件,那这两者之间区别是什么呢?...
  8. linux 实验感悟_linux实训心得_linux实习心得体会范文
  9. qq文件怎么传到百度云_如何将手机百度网盘中的文件发送给微信或qq好友 看完就明白了...
  10. bootstrap 样式下 Se7en 模板使用(1)操作提示信息框