热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Autoware进行Robosense16线雷达与ZED双目相机联合标定!

项目要标定雷达和相机,这里记录下我标定过程,用的速腾Robosense-16线雷达和ZED双目相机。一、编译安装Autoware-1.10.0我没有安装最新版本的Autoware,

项目要标定雷达和相机,这里记录下我标定过程,用的速腾 Robosense - 16 线雷达和 ZED 双目相机。


一、编译安装 Autoware-1.10.0

我没有安装最新版本的 Autoware,因为新版本不带雷达和相机的标定工具,我安装的是 1.10.0 版本!


1.1 下载 Autoware-1.10.0 源码

不建议官方的 git check 安装方式,因为不熟悉 git 可能会遇到问题,直接在GitLab 仓库选择 1.10.0 版本下载即可:

技术分享图片


1.2 编译 Autoware-1.10.0

编译过程比较容易,我也没遇到编译错误,解压下载的 autoware-1.10.0,在该目录下执行以下命令:

# 1. 进入 autoware 的 ros 目录下
cd autoware-1.10.0/ros
# 2. rosdep 安装依赖
rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
# 3. 编译
./catkin_make_release

我的台式机配置比较低,大概编译了 1 个小时,好的配置应该编译的更快。


1.3 启动 Autoware-1.10.0

首先还是要进入 ros 目录下,然后 source 环境,之后执行 run 程序即可启动主界面:

# 1. 进入 autoware 的 ros 目录下
cd autoware-1.10.0/ros
# 2. source 环境,zsh 或 bash
source devel/setup.zsh[.bash]
# 3. 启动主界面
./run

可能需要输入 root 密码,然后启动的主界面如下:

技术分享图片

至此 Autoware 就安装好了,后面我们需要用它提供的标定工具包来进行内参和外参的标定,以及标定结果的融合效果测试。


二、标定 ZED 相机内参


2.1 内参标定准备

内参标定需要准备标定板,我用的是我们实验室自己购买的 12x9,棋盘格为 2.5cm 的专业标定板,比较精准,如下:

技术分享图片

然后录制一个相机左右话题的 Bag:

rosbag record -O zed_calibration.bag /camera/left/image_raw /camera/right/image_raw

为了得到好的标定结果,录制过程中需要在相机视野里面移动标定板,建议位置如下:



  • X 轴标定:移动到视野的最左边,最右边

  • Y 轴标定:移动到视野的最上方,最底部

  • 倾斜标定:改变标定板的角度,斜着拿

  • Size 标定:移动标定板充满整个相机视野

  • X,Y 和 Size 一起标定:保持标定板倾斜启动到视野的最左,最右,最上,最下

然后我拷贝 Bag 到台式机上回放,但是有问题提示需要 rogbag reindex

rosbag reindex zed_calibration.bag

执行修复下就 OK,速度很快,不过后面的数据会少一些,可能是拷贝过程中的错误导致的,无伤大雅。


1.2 内参标定过程

内参标定比较简单,基本都是自动执行,先 source Autoware 环境以使用标定工具:

cd autoware-1.10.0/ros/
source devel/setup.zsh

启动 roscore:

roscore

启动标定工具 autoware_camera_lidar_calibrator,但是这个工具同时标定双目得到的标定 YAML 文件不能直接作为后面外参标定的输入,因为文件格式有些不同,我也是做实验发现的,因此我单独标定左右相机,这样就会生成可用的 Autoware 格式的 YAML 文件:

rosrun autoware_camera_lidar_calibrator cameracalibrator.py --square 0.025 --size 11x8 image:=/camera/left/image_raw

参数如下:



  • --square:标定板单元格的边长(m),我的标定板是 2.5cm,也就是 0.025m

  • --size:标定板长x宽的格子数减一,我的标定板是 12x9,所以填 11x8

  • image:要标定的相机话题,左或者右

启动后就是一个黑窗口:

技术分享图片

然后开始回放内参标定 Bag,默认暂停启动,按空格继续:

rosbag play --pause zed_calibration.bag

标定过程如下,标定工具会根据棋盘格位置自动检测角点:

技术分享图片

当右上角的 X、Y、Size、Skew 变为绿色时,标定按钮「CALIBRATE」可用,点击即可计算内参矩阵:

技术分享图片

结果在 Shell 中打印出来,点击「SAVE」可保存到 home 目录下:

技术分享图片

注意这里会多保存一个 Autoware 类型的 YAML 文件格式,也就是后面外参标定要导入的文件!内容如下:

技术分享图片

下面开始标定雷达和相机的外参!


三、ZED 相机和 Robosense-16 线雷达联合标定外参


3.1 联合标定准备

联合标定也要准备标定板和录制 bag 包,标定板用的也是内参标定的棋盘格,另外因为我是在电脑上安装的 Autoware,所以需要在小车上录制雷达和相机的 Bag 数据包,然后再拷贝到我的电脑上回放用于标定工具的话题输入。

我录制 bag 包的命令如下,录制的是ZED 左右相机话题、雷达话题:

rosbag record -O zed_lidar_calibration.bag /camera/left/image_raw /camera/right/image_raw /rslidar_point

但是录制完后,我拷贝到台式机上,还是提示我要 reindex 一下,我估计是小车系统的问题:

rosbag reindex zed_lidar_calibration.bag

修复完查看下 info,没有问题:

rosbag info

技术分享图片

回放 Bag 使用如下命令,加上 --pause 意思是启动即暂停,防止跑掉数据,按空格继续回放:

rosbag play --pause zed_lidar_calibration.bag

下面我们开始使用 autoware_camera_lidar_calibrator 工具标定雷达和相机。


3.2 标定过程

首先启动 roscore,也可以不用启动,后面 roslaunch 会自动启动:

roscore

接着初始化 Autoware 环境:

cd autoware-1.10.0/ros/
source devel/setup.zsh

然后启动标定工具,这里我标定 ZED 左相机图像和雷达,使用右相机同理:

roslaunch autoware_camera_lidar_calibrator camera_lidar_calibration.launch intrinsics_file:=xxx.yaml image_src:=/camera/left/image_raw


  • intrinsics_file:前面标定 ZED 的 YAML 内参文件路径

  • image_src:要标定的相机话题,这里用的 left image,有需要也可以用 right image

遇到的第一个错误,启动失败提示找不到 image-view2

技术分享图片

直接 apt 安装即可:

sudo apt-get install ros-kinetic-jsk-common


  • 参考链接:https://github.com/jsk-ros-pkg/jsk_common

遇到的第二个错误,提示找不到 libopencv_core3.so.3.3

技术分享图片

我在系统中查找 libopencv_core3.so 这个库:

locate libopencv_core3.so

发现它在如下位置:

/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_core3.so

然后我这个目录下的所有 opencv 库复制一份到上一级 lib 目录下,解决了这个问题:

sudo cp /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_* /opt/ros/kinetic/lib


  • 参考博客:https://blog.csdn.net/qifengle315/article/details/103434598

之后我就可以启动这个标定工具了,界面如下就是一个图片查看器:

技术分享图片

然后开始回放 Bag 数据,记得按空格开始回放:

rosbag play --pause zed_lidar_calibration.bag

上面的 image-view2 就会出现相机画面,然后我们按空格暂停回放,准备标定:

技术分享图片

标定还需要启动 rviz:

rosrun rviz rviz

点击 Add 添加要订阅的 Image 和 PontCloud2 话题:

技术分享图片

分别设置每个订阅话题的 topic、FixedFrame 设置为 rslidar 不然会没有点云显示、切换点云查看视角,用鼠标滑轮调整点云距离,确保能看到我这样的标定板:

技术分享图片

然后我们同时切换出 image-view2 的界面,点击工具栏放大图像,然后按照如下步骤手动选择一个像素点和点云进行单次标定:



  1. 观察图像和点云,并在 image-view2 中用鼠标选择一个像素点

  2. 点击 rviz 工具栏的 Publish Point

  3. 然后在 rviz 中选择一个对应的点云数据点(要尽量选择准确),当你的鼠标右下角出现一个浅红色的路标记号时即可点击该数据点

  4. 观察 image-view2 的窗口是否出现 points 的提示信息

技术分享图片

重复以上步骤,选择 9 个不同的像素-点云对,因为需要足够的数据才能计算外参矩阵,当第 9 个点选择完后,该工具会自动计算外参标定矩阵:

技术分享图片

最终的标定文件保存在 home 目录下,以下是外参文件内容,第一个就是 4x4 的外参矩阵:

技术分享图片


四、标定结果测试

标定矩阵有了之后,我们来利用 autoware 提供的融合工具来看下标定的效果如何,先来回放数据:

rosbag play --pause zed_lidar_calibration.bag /rslidar_points:=/points_raw

这里要把雷达的话题换成 points_raw,因为 autoware 订阅的话题名是这个!然后启动 Autoware 主界面,启动方法跟前面一样,切换到 Sensing 标签页,配置如下:



  • Camera ID:我选择的是 left 图像

  • target_frame:默认 velodyne 即可,因为我们已经将雷达话题名改为 velodyne 订阅的名字

  • Ref:选择上一步的外参标定文件

  • image topic source:因为 Camera ID 已经指定了,所以这里只需要填 topic 名即可

技术分享图片

点击 OK 关闭窗口(查看终端是否会输出红色错误信息,一般不会),然后再点击 Points Image 选择相机 ID 为 left,点击 OK 确定(此时终端再输出一些信息,但不会报红色错误),如果你的终端出现红色错误信息,就要查看配置是否正确了:

技术分享图片

再点击下面的 Rviz 启动 rviz,注意不要单独在终端中 rosrun 启动 rviz,单独启动没有 image-view2 的插件,在 autoware 中启动提供融合的插件 ImageViewerPlugin:

技术分享图片

进行如下选择:



  • Image Topic:/camera/left

  • Point Topic:/points_image

然后切换到回放 Bag 终端,按空格继续回放数据,即可出现融合效果,我这里效果一般般,后面打算再重新标定:

技术分享图片


五、可能遇到的问题


5.1 Autoware 编译失败

我的编译过程比较顺利,如果你遇到的编译错误,可以先阅读报错信息,看看是否是缺少某个依赖库,然后在网上搜索安装方法,最好用英文 + Google!如果是一些看不懂的错误,可以直接复制报错信息到搜索引擎,有时也能找到答案。


5.2 Rviz 不显示点云

检查 FixedFrame 是否设置为雷达的 frame_id。


5.3 标定结果不准

选点的时候仔细点,多标定几次。

以上就是我的雷达相机内外参标定总结,希望能帮助要标定雷达和相机的朋友,后面我会再写一篇用 Autoware 的 Calibration Tool Kit 工具来标定的博客,可以持续关注我!

技术分享图片


推荐阅读
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • 本文详细介绍了iOS应用的生命周期,包括各个状态及其转换过程中的关键方法调用。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 16.04 系统上配置 Qt 5.5 的交叉编译环境,特别针对 i.MX6 平台进行了优化设置。内容涵盖从基本的软件安装到高级配置的全过程。 ... [详细]
  • 深入探讨前端代码优化策略
    本文深入讨论了前端开发中代码优化的关键技术,包括JavaScript、HTML和CSS的优化方法,旨在提升网页加载速度和用户体验。 ... [详细]
author-avatar
手机用户2502891655
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有