【学习记录】autoware标定相机与激光雷达外参

一、autoware选择

这里踩了好几个坑,首先autoware作为一个无人驾驶知名框架,其内部实际上是有两套标定的东西的,这一点绝大多数博客没有提到。其中最常用的是一个叫标定工具箱的东西,这个ros包已经在1.10往后的版本中被删掉了,所以网上的资料都是基于前人提取出来的代码进行单独编译然后运行,这种标定方法需要用到标定板,个人感觉比较麻烦,用这个标定工具箱,最好是在车上的工控机直接装好相应的程序,录制rosbag有时候提取效果并不好,而且对于标定板的位置和朝向都有许多讲究。

使用这种标定工具箱可以参考:

https://blog.csdn.net/qq_38988221/article/details/129161061
https://blog.csdn.net/mensan1998/article/details/118736810

除了这个方法,其实使用autoware自带的联合标定工具会更方便,这个标定工具在现在的版本里面都还有,其原理就是选择九对相机和点云中的点,然后计算外参矩阵。

使用联合标定工具可以参考:

https://blog.csdn.net/qq_40216084/article/details/108627919
https://blog.csdn.net/lemonxiaoxiao/article/details/107909149?utm_medium=distribute.wap_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-107909149-blog-108627919.237^v3^wap_relevant_t0_download&spm=1001.2101.3001.4242.1
https://blog.csdn.net/HelloJinYe/article/details/106863585?utm_medium=distribute.wap_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-106863585-blog-108627919.237^v3^wap_relevant_t0_download&spm=1001.2101.3001.4242.3

二、利用docker可视化界面运行autoware

由于autoware.ai本身已经不再更新了,许多库文件也好源代码也好官方管理的也乱七八糟,所以用docker是目前启动autoware最快捷方便的方法,这里额外记录一下用docker来启动autoware。有关docker的基本使用方法可以参考之前的博客

下载好官方的docker之后,内部是带有ros的,我们可以直接进入docker来启动ros,如果需要新建一个命令行界面,则可以在宿主机重新开一个终端,然后使用下面的指令再进入一次docker。

sudo docker exec -it 你的docker的ID bash

在运行autoware的过程中,一定会用到可视化界面,包括rviz以及autoware的可视化配置界面等内容,这种情况下,需要给docker配置可视化的设置才能将docker内部的东西显示在外面,可以参考链接:

https://blog.csdn.net/qq_42731705/article/details/130798908
https://www.cnblogs.com/jiftle/p/13584725.html

由于标定需要用到提前录制好的rosbag以及内参文件,这里推荐在启动docker时顺便做一下地址映射,这样子就可以很方便地在docker内外传递文件,我启动docker时的指令为:

sudo docker run -it 镜像名称 -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -e 宿主机的文件位置:docker内部的位置

之后就可以利用autoware进行标定,标定在启动过程需要指定内参文件和图像的topic,之后就可以进入到下面的界面进行点的选择,个人推荐在合适的位置,按空格暂停rosbag的播放,然后点击图像的点,然后点击点云中的点,没有合适的就按空格继续播放rosbag,重复这套操作直到选择九对点。
在这里插入图片描述
这个过程中遇到的一个问题是内参文件的格式,最开始我是用ros自带的标定工具去用棋盘格标定的相机内参,然后直接导出为yaml文件,但是用这个文件使用autoware标定时,选完点之后一直报错,错误信息如下:
在这里插入图片描述
查了很多资料也没找出问题所在,后来在一个博客里面发现了别人标定时用的yaml文件,这才发现原来autoware标定时的内参文件和ros标定工具输出的格式是不一样的。

autoware需要的格式为:

%YAML:1.0
---
CameraExtrinsicMat: !!opencv-matrixrows: 4cols: 4dt: ddata: [ 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0.,1. ]
CameraMat: !!opencv-matrixrows: 3cols: 3dt: ddata: [ 6.0930328797947482e+02, 0., 3.1031651266062545e+02, 0.,6.0899238994475002e+02, 2.4626671682512318e+02, 0., 0., 1. ]
DistCoeff: !!opencv-matrixrows: 5cols: 1dt: ddata: [ 8.6431249579251121e-02, -1.4704874856941597e-01,-5.5439696020033046e-04, -1.9515514445514945e-03,-2.6628324052679192e-01 ]
ImageSize: [640, 480]
Reprojection Error: 0.0
DistModel: plumb_bob

ros直接输出的格式为:

image_width: 640
image_height: 480
camera_name: narrow_stereo
camera_matrix:rows: 3cols: 3data: [410.73262,   0.     , 318.33938,0.     , 411.97988, 190.16781,0.     ,   0.     ,   1.     ]
distortion_model: plumb_bob
distortion_coefficients:rows: 1cols: 5data: [0.009894, 0.015771, -0.011451, -0.007740, 0.000000]
rectification_matrix:rows: 3cols: 3data: [1., 0., 0.,0., 1., 0.,0., 0., 1.]
projection_matrix:rows: 3cols: 4data: [420.87268,   0.     , 312.09444,   0.     ,0.     , 421.67639, 184.16815,   0.     ,0.     ,   0.     ,   1.     ,   0.     ]

我们需要把下面的内容调整到上面的格式中,其实就是将distortion_coefficients和camera_matrix复制到上面,CameraExtrinsicMat保持不动就行,这个部分标定完autoware会把外参信息填在这里。

标定完可以参考博客对标定结果验证,博客里面提到了默认情况下激光雷达的topic名称是写死的,其实我们也可以不用重新在docker内部编译,可以直接在播放rosbag的时候对topic进行重命名,指令为:

rosbag play calibration.bag -l /lidar/point:=/points_raw

标定完之后效果如下,完美搞定标定任务!
在这里插入图片描述

三、多相机标定

这里最后再补充记录一个标定过程遇到的问题,由于我们的采集设备是一个激光雷达和三个激光雷达,上图为中间相机和激光雷达的外参检验结果,由于基本在一条线上,所以可以看到投影的结果十分准确,但是在标定左右相机的时候,投影的结果明显不一样,左右相机的投影结果如下。
在这里插入图片描述
在这里插入图片描述
本来以为是标定没操作好,和师兄交流的过程中突然就悟道了,第一张图为左相机的投影结果,由于相机在激光雷达左边,所以部分被遮挡的地方向左投影时就是空的,反过来,右边的相机则是右边出现了空。所以在这种情况下,只要边缘位置准确就可以。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/2681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring 1、初识Spring

初识Spring 了解Spring家族了解Spring发展史Spring Framework系统架构学习路线 了解Spring家族 官网spring.io Spring形成了一种开发的生态圈,Spring提供了若干个项目,每个项目用于完成特定的功能。 Spring Framework(最基础的东西&#x…

SpringCloud Alibaba--nacos配置中心

目录 一.基础介绍 1.1概念 1.2 功能 二.实现 2.1 依赖 2.2 新建配置文件 2.3 克隆 2.4 配置bootstap.yml文件 三.测试 一.基础介绍 1.1概念 在微服务架构中,配置中心就是统一管理各个微服务配置文件的服务。把传统的单体jar包拆分成多个微服务后&#xf…

跨越未知,拥抱挑战——新征程

在浩瀚的IT领域里,每一位开发工程师都如同一位探险家,不断地探索、挑战和成长。作为一名新入职的Java开发工程师,我面临着全新的技术栈和业务领域,这是一次跨越未知的征程,也是一次自我提升的机会。 新入职 初入公司…

低代码开发之腾讯云微搭工具

低代码开发之腾讯云微搭工具 微搭简介诞生缘由开发模式如何创建组件模块介绍实例讲解url传参级联联动使用事件其他方法调用数据源方法 callDataSource触发流程 callProcess 数据模型方法V2 微搭简介 微搭(WeDa),全称是腾讯云微搭低代码开发平…

Powershell 一键安装 virtio_qemu_agent

前言 qemu-guest-agent qemu-guest-agent是一个助手守护进程,安装在客户机中。它用于在主机和客户端之间交换信息,并在客户端执行命令。 在Proxmox VE中,qemu-guest-agent主要用于三件事: 正确关闭客户机,而不是依赖于ACPI命令或windows策略在进行备份/快照时冻结客户机…

plt.show()输出<Figure size 1200x800 with 1 Axes>没有展示出图片在notebook里

解决方法如下: 在Jupyter Notebook中,如果使用plt.show()没有直接显示图像,可能是由于某些设置或限制导致的。您可以尝试使用%matplotlib inline魔术命令来确保图像能够直接显示在Notebook中。请在Notebook的第一个单元格中执行以下命令&…

世界首台能探测单个原子的量子模拟器,诞生!

量子物理学依赖于高精度的传感技术,以便深入研究材料的微观特性。近期开发的模拟量子处理器显示出量子气体显微镜在原子层面理解量子系统方面的强大潜力。这种显微镜可以生成极高分辨率的量子气体图像,甚至能够检测到单个原子。 在西班牙巴塞罗那的ICFO&…

156.25MHz的差分晶体振荡器SG3225VEN

数字经济正焕发出勃勃生机,云计算,大数据,5G和人工智能等新技术的发展给行业带来了新的机遇。无论是在数据中心内部还是在数据中心之间,提供低成本,高速的100/200/400G小型化解决方案都是光模块的发展需求。为了使DSP稳定工作,需要一个小型的封装晶体振荡器来提供参…

书生·浦语大模型第二期实战营第六节-Lagent AgentLego 智能体应用搭建 笔记和作业

来源: 视频教程:Lagent & AgentLego 智能体应用搭建 文字教程: Lagent Web Demo:https://github.com/InternLM/Tutorial/blob/camp2/agent/lagent.md#1-lagent-web-demo AgentLego: https://github.com/Inter…

ComfyUI学习旅程

一、模型文件(Checkpoint) 首先它很大,这些文件是你从huggingface或者civitai下载而来的, 所以这些大文件如 .ckpt 或 .safetensors ,实际上包含了什么内容呢? 它包含了包含了三种不同模型的权重&#x…

做大模型产品,如何设计prompt?

做GenAI产品,除了要设计好的AI任务流程,合理的拆分业务以外,最重要的就是写好prompt,管理好prompt,持续迭代prompt。 prompt一般有两种形式:结构化prompt和对话式prompt。 结构化prompt的优点是通过规范的…

Odoo:全球排名第一的免费开源PLM管理系统介绍

概述 利用开源智造OdooPLM产品生命周期管理应用,重塑创新 实现产品生命周期管理数字化,高效定义、开发、交付和管理创新的可持续产品,拥抱数字化供应链。 通过开源智造基于Odoo开源技术平台打造数字化的产品生命周期管理(PLM&am…

allegro输出正反面bom

不是前面两条命令,而是component report

李沐65_注意力分数——自学笔记

Additive Attention 等价于将key和value合并起来后放入到一个隐藏大小为h输出大小为1的单隐藏层 总结 1.注意力分数是query和key的相似度,注意力权重是分数的softmax结果 2.两种常见的分数计算: (1)将query和key合并起来进入一个单输出单…

模块三:二分——852.山脉数组的峰顶索引

文章目录 题目描述算法原理解法一:暴力查找解法二:二分查找 代码实现暴力查找二分——C二分——Java 题目描述 题目链接:852.山脉数组的峰顶索引 算法原理 解法一:暴力查找 峰顶:比左右区间都大 遍历整个数组&…

谷歌搜索SEO优化需要做什么?

最基本的要求,网站基础要优化好,让你的网站更加友好地服务于用户和搜索引擎,首先你要保证你的网站也适配手机端,现在手机端,如果你的网站在手机上打开慢,或者没有适配手机端,让用户用手机看着电…

笔记:VMware之性能优化

目标:通过调整VMware设置,提高VMware中虚拟机性能 版本:16.2.2 build-19200509 一、首选项 针对所有虚拟机设置,对所有虚拟机都有效 1.1 设置路径:主页->编辑->首选项->更新 软件更新,取消“…

线程池嵌套导致的死锁问题

1、背景 有一个报告功能,报告需要生成1个word,6个excel附件,总共7个文件,需要记录报告生成进度,进度字段jd初始化是0,每个文件生成成功进度加1,生成失败就把生成状态置为失败。 更新进度语句&…

Win11系统变量打不开解决方法

Q: 下图所框选部分,变为灰色,点击不了 A: 1.可能是用户权限过低,升为管理员身份 按win R 调出运行,输入netplwiz 或 control userpasswords2效果都一样分别有两个组User和Administarations选中你的用户对应的组 …

3A开关降压型单节充电管理芯片CS5308D

CS5308D是一款30V耐压,单节锂电池或锂离子聚合物电池的降压型充电管理IC。集成功率MOS,芯片采用同步开关架构,使其在应用时仅需极少的外围器件,可有效减少整体方案尺寸,降低BOM成本。具有最大3A的充电电流能力&#xf…