zoukankan      html  css  js  c++  java
  • Autoware 进行 Robosense-16 线雷达与 ZED 双目相机联合标定!

    项目要标定雷达和相机,这里记录下我标定过程,用的速腾 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 的专业标定板,比较精准,如下:

    checkboard

    然后录制一个相机左右话题的 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
    

    录制的时候,因为我是 16 线雷达,所以我拿标定板的时候离雷达不能太远,不然就不能清楚地看到标定板了,录制时建议的站位如下:

    • 近处左边,近处中间,近处右边
    • 中间左边,中间中间,中间右边
    • 远处左边,远处中间,远处右边

    每个位置移动改变标定板的姿态,每个姿势停留 1 - 2 秒左右,防止模糊:

    • 上仰,下俯
    • 左偏,中间不动,右偏

    我录了挺多次的,也是自己摸索的,因为有的录制的不好,我也没有每个位置都录很久,有时候觉得差不多够了就停了,建议你第一次可以录久些,每个位置停留久一点,保证标定板不会因为移动而模糊!我总结的录制标定包的关键就是:

    • 录制多个位置
    • 改变拿标定板的姿势
    • 必须保证能清楚的看到标定板!

    录制完后,我拷贝到台式机上,还是提示我要 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
    

    遇到的第二个错误,提示找不到 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
    

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

    然后开始回放 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 工具来标定的博客,可以持续关注我!

  • 相关阅读:
    Android睡眠唤醒机制--Kernel态
    android-铃声的设置与播放
    Android RingtoneManager 铃声管理
    RingtoneManager-获得系统当前的铃声
    Android RingtoneManager铃声管理
    android中常见声音操作方式(Ringtone,SoundPool,MediaPlayer)小结
    android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动
    CSS中常见的BUG调试
    row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
    android平台中,EventBus研究学习
  • 原文地址:https://www.cnblogs.com/dlonng/p/13081098.html
Copyright © 2011-2022 走看看