激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)

2023-05-16

简单记录一下使用Autoware对lidar和cam联合标定的步骤和一些注意事项。

首先,开源的lidar和cam标定方案不多,花了一天查资料大概有以下几个:

but_velodyne

https://github.com/robofit/but_velodyne

https://github.com/robofit/but_velodyne_lib

https://blog.csdn.net/learning_tortosie/article/details/82385394

这是一个最简单、最单纯的lidar和cam联合标定的方案,但是需要openCV2.4.9,我的当前版本为3.2,懒得重新装而且看博客感觉别人也没有成功,所以放弃了。

lidar_camera_calibration

https://github.com/ankitdhall/lidar_camera_calibration

https://blog.csdn.net/a2281965135/article/details/79785784

仔细看了一下,这个是基于深度相机/双目的标定方案。

https://github.com/beltransen/velo2cam_calibration

这个也是。

Autoware

https://github.com/CPFL/Autoware/wiki

https://blog.csdn.net/learning_tortosie/article/details/82347694

https://blog.csdn.net/AdamShan/article/details/81670732

这是日本开源的一个自动驾驶平台,其中也包含了lidar和cam的联合标定,适合于velodyne,看博客感觉效果还不错,需要的数据和材料也不麻烦,但是标定过程需要不断的手动把cam中的标定板在lidar点云中的位置圈出来,有点麻烦(也有点蠢...)。

apollo

https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/apollo_2_0_sensor_calibration_guide.md

https://blog.csdn.net/learning_tortosie/article/details/82351553

http://apollo.auto/index_cn.html

这是百度的阿波罗自动驾驶平台,其中包含了lidar和cam的标定方案,仔细看完感觉要求过高,不但需要普通的数据,还需要IMU、里程计等传感器数据,不太适合单纯的lidar和cam标定。而且需要较为精确的lidar和cam相对的初始安装角和广角相机,可以尝试先用Autoware标定一遍之后再用这个标定使得结果更精确。

 

综上所述,最后采用Autoware的标定方案。在开始简述一下其基本原理:

首先和普通cam标定一样,通过标定板的变化算出cam的位姿矩阵;然后再手动用小圈把点云中对应的标定板框出来,看下文介绍可以理解,小圈最少包含了两条点云线,两条线即可构成一个面,就是标定板所在的平面。我们就能通过lidar相对于这个面的角度推算出lidar的姿态,通过这个面点云的距离算出其位置,再和cam相对比,就能得到cam_lidar的外参矩阵了。

 

在安装中,建议选用第二个,一般来说ROS和OpenCV都是有的,再安装个Qt就可以了,很简单的。官网推荐的第一种方案需要固定的硬件配置,很麻烦。

具体标定方法可以看这个视频(需要翻墙)

https://www.youtube.com/watch?v=pfBmfgHf6zg

没条件的可以认真的看这个操作说明

https://github.com/CPFL/Autoware/wiki/Calibration

说一下可能存在的疑惑:

其中提到了rosbag的制作,之前在用Kalibr标定IMU和cam时有明确要求制作的rosbag的格式,包括照片的格式、命名要求,IMU数据格式、频率等,就很好奇Autoware标定的rosbag要求是怎么样的,但是官网没有说明。尝试发现,使用ros格式数据就可以了,比如点云为ros的PointCloud2,直接发布话题,然后用rosbag record /image /point_cloud 记录下rosbag就可以了。

在之后的输出用rosbag play /image:=image_raw /point_cloud:=points_raw,就可以将自己的topic名转换成Autoware标定程序需要的image_raw和points_raw。在rosbag play时可以按空格暂停。

标定界面

需要手动在右下方的图中,不断的把标定板对应的点云图给框出来,为了达到比较好的标定效果,需要的数据量越多越好,图中大概选了100张图,然后project检查效果的时候把不好的十来张删了,最后用了90张图。(一个个框出来还是很累的...总共花了一个多小时roz。

这里说一下数据采集和标定的时候的注意事项:

建议标定至少两次,首先第一次得看最后的标定效果,如图:

这是一次标定结果不是很好的情况,看2处就很明显image和pointcloud就没有对齐。

先说一下1.标定板要注意的,首先最好用官网给的尺寸,质地要比较硬,拿起来才不会弯曲;然后其原理是默认点云全是打在标定板上的,所以拿标定板的人最好能藏在标定板背后而且如果使用标定纸贴在一个硬纸板上的,那硬纸板的大小得和标定纸一样大,才能保证点云是打在标定板而不是后面加固的硬纸板上。

2.最好选一个前面空旷但周围有一点背景,能识别标定效果的地方。前面空旷是为了保证没有和标定板相近的点云对标定效果的干扰。还要注意lidar的线的距离,尽量能标定到最上面的和最下面的,本文使用的是VLP16,相比32线的站在5m,16线的开始稍微往前站一点。

3.标定前要测出相机视野的两端的位置,才能最大限度的提高标定结果。

 

4.标定的时候要注意这个小圈的垂直方向,这是最重要的。务必保证小圈的垂直轴垂直于标定板平面。

 

最后标定的结果文件:最重要的就是外参矩阵

补上最后的结果:

参考文献:https://gitlab.com/autowarefoundation/autoware.ai/autoware/-/wikis/Calibration

附:标定板文件生成方式

使用的是Kalibr生成PDF的标定板的,kalibr_create_target_pdf --type checkerboard --nx 6 --ny 8 --csx 0.108 --csy 0.108

也可以直接从我的资源处下载,我设置的是0积分的,不知道为什么CSDN有时候会设置成需要积分才能下载

参考文献:https://github.com/ethz-asl/kalibr/wiki/calibration-targets

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤) 的相关文章

  • 如何检测位图中的红色像素

    android中的getPixels 是上下左右读取像素 还是左右上下读取像素 基本上是按行或列读取 如果我想知道图片中的红色值较高的位置 我可以这样做吗 我假设它是按列读取的 Bitmap thumbnail Bitmap data ge
  • 相机 API:跨设备问题

    我正在开发一个相机应用程序 基本上作为消息传递应用程序的一部分来附加图像等 该应用程序需要适用于 gt SDK 2 2 并且 I can t尽可能多地使用默认的 Android 相机 因为 该应用程序的性质决定了图像不应保存到磁盘上 一些
  • 如何在 AVCaptureDevice 上准确设置快速快门速度(曝光时间)?

    我正在开发适用于 IOS 13 的相机应用程序 为此 我将 AVCaptureSession 与 AVCaptureVideoPreviewLayer 结合使用 到目前为止一切正常 现在我想让用户从给定的典型快门速度值数组 以 1 3 曝光
  • 在无头模式下独立运行 Unity,同时捕获屏幕截图

    我需要创建一个在无头模式下运行的统一项目 使用 batchmode 命令 但它必须捕获屏幕截图 例如每一秒并将它们写到一个文件中 我知道在无头模式下 您需要强制调用 Camera Render 才能渲染任何内容 在捕获第一个屏幕截图后 时间
  • 如何打开相机然后切换到图像模式(反之亦然)

    就我而言 我想拍照或捕捉视频 实际上 如果我创建单独的意图 我可以做到这些 我的意思是我可以将相机打开为图像模式或视频模式 但无法在它们之间切换 这与我使用的意图过滤器有关吗 我应该怎么办 我如何在它们之间切换 我有同样的问题 在我想放置一
  • iOS 所需的设备功能自动对焦相机

    我有一个 iOS 应用程序 我在其中设置Required Device Capabilities配置设置需要两者still camera and auto focus camera因为它需要在具有更好的自动对焦相机传感器的新一代设备上运行
  • cameraOverlayView 防止使用 allowedEditing 进行编辑

    在我的应用程序中 使用以下行在拍摄照片后对其进行编辑 移动和缩放 效果很好 imagePicker setAllowsEditing YES 但如果我还使用cameraOverlayView 则编辑模式将不再起作用 屏幕出现 但平移和捏合手
  • Ionic-Angular.js 拍照并发送到服务器:空图像

    因此 我设法使用自定义指令通过 Angular js 将图像上传到我的服务器 我还成功地实现了 Cordova 的相机功能 现在我尝试连接两者 但是当将图像发送到服务器时 它们被存储为空 我认为问题在于我使用输入字段来获取图像 并且它获取了
  • 在android中,将相机预览流到视图上

    我想将 Android 相机的相机预览流式传输到视图上 目的是随后使用 onDraw 将各种内容添加到视图中 我不需要随时实际捕捉图像 它不必是最高质量或每秒最大数量的帧 有谁知道如何做到这一点 将其添加到您的 xml 中
  • 使用 OpenCV 进行相机校准 - 如何调整棋盘方块大小?

    我正在使用 OpenCV Python 示例开发相机校准程序 来自 OpenCV 教程 http opencv python tutroals readthedocs io en latest py tutorials py calib3d
  • Android 中拍摄的照片方向发生变化

    我通过单击按钮打开相机应用程序 并在下一个活动中显示捕获的照片 但拍摄的照片旋转了90度 当我捕获图像后在视图中显示图像时 它的方向始终是横向的 为什么在纵向模式下拍摄照片时 照片显示的不是纵向 onClick 按钮 Intent i ne
  • Android:将图像裁剪为特定尺寸

    我的目的是让用户从图库中选择一张图像 然后进行裁剪活动 但是 我需要将定义裁剪蒙版的矩形锁定到某个尺寸 然后用户只需重新定位它即可显示图像的一部分 关于如何做到这一点有什么想法吗 Thanks T Intent intent new Int
  • 设置使用 iPhone 相机拍摄的图像的类型

    如果我们使用 iPhone 相机拍摄照片 图像将默认以 JPEG 格式保存 我想以其他格式 例如 PNG 保存捕获的图像 是否可以 当我们从应用程序调用 iPhone 相机时 是否可以通过代码执行此操作 我们可以设置捕获图片后必须保存的图像
  • HTC One M8 - 使用第二个后置摄像头

    我有一台 HTC One M8 设备 它有 2 个后置摄像头和一个额外的前置摄像头 我的问题是尝试访问第二个后置摄像头 我已经成功制作了一个应用程序 它同时运行 2 个摄像头 1 个前置摄像头和 1 个后置摄像头 但问题是我无法访问第二个后
  • 使用Android Camera API,拍摄照片的方向始终未定义

    我使用相机API 拍摄的照片总是旋转90度 我想旋转它 所以首先我想知道图片的方向 这一点我被卡住了 我总是以两种方式得到未定义的方向 这是代码 Override public void onPictureTaken byte data C
  • 颤动相机显得拉伸

    我一直在玩颤振 到目前为止我很喜欢它 但我在让相机工作时遇到了问题 我按照本页上的说明进行操作https pub dartlang org packages camera https pub dartlang org packages ca
  • Camera中添加Camera的Zoom控件

    我正在制作一个相机应用程序 其中我使用 Surface View 作为相机和所有其他东西 我从以下链接中获取了指南 http www brighthub com mobile google android articles 43414 as
  • 如何在Android中没有Intent且没有任何视图窗口的情况下拍照

    大家好 我正在尝试弄清楚如何通过按下按钮来拍照 而不显示任何预览 我的想法是 我想要拍摄并保存照片 但之前或之后没有照片的视觉预览 到目前为止 我能够获取拍照并将其保存到磁盘的代码 没有任何问题 但如果没有表面视图或预览 我似乎无法做到这一
  • UIImage 数据始终处于横向模式

    似乎当我用相机以肖像模式拍照时 UIImage具有正确的尺寸 长宽比 1536x2048 3 4 和方向 右 导出到文件 带有UIImage AsPNG Save 它始终以横向模式显示 2048x1536 4 3 这是真的吗 还是我做错了什
  • 如何在 unity3d C# 中让相机跟随物体?

    我有一个名为 Ball 的对象 我向它添加了键盘交互性 WASD 来移动球 我需要摄像机留在后面并跟随球 但我遇到了错误 using UnityEngine using System Collections public class bal

随机推荐

  • [ROS官方教程] catkin/CMakeLists.txt的使用

    目录 1 概述2 整体结构和顺序3 CMake版本4 功能包名称 package name 5 发现CMake Packages5 1 find package 做了什么5 2 为何将catkin packages指定为Components
  • C++工程:总结 CMake 添加第三方库依赖方式

    代码依赖 这种方式是把第三方库的完整代码直接添加到我们的项目中 xff0c 当做项目代码的一部分进行编译 xff0c 这种方式会把第三方代码和我们的代码混在一起 xff0c 并不推荐使用 首先我们需要到 jsoncpp 下载需要的头文件和实
  • 四款好看实用的CSS表格样式分享

    文章参考 xff1a https www w3cschool cn css css sfrk2opy html https www php cn css tutorial 375461 html https www laozuo org 2
  • 线程与进程,你真得理解了吗

    线程与进程 xff0c 你真得理解了吗 1 进程与线程的关系和区别2 并行与并发3 线程共享了进程哪些资源 相信大家面试时一定没少被一个问题刁难 xff0c 那就是进程和线程的区别是什么 xff1f 这个问题延申开来并不像表面那么简单 xf
  • Ubuntu18.04安装librealsense和realsense-ros

    目录 一 librealsense 1 二进制安装 2 源码安装 xff08 个人推荐 xff09 3 测试运行 4 报错 二 realsense ros xff08 2 3 0 xff09 一 librealsense intel rea
  • KaLibr校准 双目相机和IMU realsense D455

    kalibr安装参考我的另一篇博客https mp csdn net mp blog creation editor 117604718 除此之外 xff0c 需要自己准备棋盘 xff0c 以及棋盘的配置文件april 6x6 50x50c
  • ubuntu系统屏幕分辨率只有一个无法修改

    新装好的ubuntu系统 xff0c 如果没有办法调节适当的分辨率和刷新率 xff0c 多半是没有装显卡驱动 安装方法也很简单 xff0c 在software amp Update里面选择Additional Drivers 选择自己显卡的
  • mavros安装

    官方地址 xff1a https github com mavlink mavros 因为github有时侯不好上 xff0c 所以我自己弄了个gitee https gitee com qq408007026 mavros tree ma
  • ubuntu docker ROS主从机配置 screen ssh基本使用方法

    目录 1 docker安装 2 docker简单命令 3 镜像的使用 4 主从机配置 5 screen简单使用 6 SSH远程登录 7 docker进阶使用 部分参考https blog csdn net qq 42800654 artic
  • Ubuntu下VSCode配置Clang-format,并在保存时自动格式化代码的方法(带配置文件)

    花了一上午解决 xff0c google和百度查的还都有点奇怪 不能解决问题 xff0c 故Mark一下 Ubuntu环境中 xff0c 使用VSCode编译器 xff0c 在保存时自动格式代码还是很方便的 xff0c 有助于养成良好的编程
  • docker容器学习

    容器是什么 xff1f 容器是轻量级应用代码包 xff0c 它还包含依赖项 xff0c 例如编程语言运行时的特定版本和运行软件服务所需的库 镜像是什么 我们都知道 xff0c 操作系统分为 内核 和 用户空间 对于 Linux 而言 xff
  • 卷帘相机原理和卷帘门补偿(其中循环的理解)

    具体的这个文章讲的很清楚了 详细图解 xff0c 一眼就能看懂 xff01 卷帘快门 xff08 详细图解 xff0c 一眼就能看懂 xff01 卷帘快门 xff08 Rolling Shutter xff09 与全局快门 xff08 Gl
  • cartographer中分支定界法理解——为什么能保证上界

    定界原理 储存的不同分辨率栅格图 xff0c 为保证上边界正确性 xff0c 即高层中的评分一定高于其底层节点的评分 xff0c 压缩的地图并非直接从原图固定间隔采样 xff0c 而是将固定间隔中所有坐标概率值最大值作为低分辨率地图 理解
  • Matlab中Filter Builder的使用(以滤除音乐中的人声为例)

    Matlab中Filter Builder的使用 xff08 以滤除音乐中的人声为例 xff09 以matlab2017a为例 先设计一个带通滤波器 xff0c 修改如下参数为 Input sample rate 为信号采样率 xff0c
  • 批量解决word中行距设置为固定值图片显示不全的问题

    在写论文的时候 xff0c 很多学校要求正文行距为固定值 xff08 比如说23磅 xff09 xff0c 这时候在正文中的图片格式往往是嵌入式的 xff0c 也就被当做文本的一部分 xff0c 故其只能在word文档中显示出一小部分 解决
  • HoloLens原理分析和硬件拆解

    不同于Google Glass 等AR 产品只能在固定位置显示一个虚拟屏幕 xff0c HoloLens 能把全息影像和真实环境杂糅在一起 xff0c 使全息影像像真实物体一样摆放在一个固定位置 xff0c 并且能像真实物体在视觉上一样近大
  • Kalibr标定camera-IMU详细步骤

    Kalibr标定相机和IMU Camera IMU Calibration 基本情况 目的 我们进行camera IMU标定的目的是为了得到IMU和相机坐标系的相对位姿矩阵T和相对时间延时t shift t imu 61 t cam 43
  • catkin build和catkin_make的区别和使用

    网上找的资料都很碎 xff0c 最好的资料是官方github文档 xff1a https github com catkin catkin tools https catkin tools readthedocs io en latest
  • darknet_ros(yolo移植到ros系统)代码分析

    darknet ros就是darknet在ros操作系统下的版本 xff0c 即在ros下使用yolo进行目标检测 首先对其文件分类 xff1a launch文件是ros格式的roslaunch文件 xff1b src文件夹下的就是它的主要
  • 激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)

    简单记录一下使用Autoware对lidar和cam联合标定的步骤和一些注意事项 首先 xff0c 开源的lidar和cam标定方案不多 xff0c 花了一天查资料大概有以下几个 xff1a but velodyne https githu