三. 多传感器标定方案(空间同步)--1

news2024/11/17 1:37:39

前面的内容:

一. 器件选型心得(系统设计)--1_goldqiu的博客-CSDN博客

一. 器件选型心得(系统设计)--2_goldqiu的博客-CSDN博客
二. 多传感器时间同步方案(时序闭环)--1

三. 多传感器标定方案(空间同步)--1

在进行多传感器融合算法部署之前,除了要进行多传感器时间同步,也就是时序闭环;还需要进行多传感器标定,也就是空间同步。

我们要做的就是:将所有传感器的成像结果统一到同一坐标系下。

多传感器标定的参数包括内参和外参,其核心问题是求解非线性最小二乘问题,对应非线性优化方法。

非线性优化

最简单的方法是梯度下降,即找一个初始值,沿着负梯度(非线性函数对求解参数进行求导)的方向逐步迭代,当迭代步长足够小时,即完成求解。

我们定义成数学问题,对于:

我们的思路:

非线性优化问题的关键是如何确定∆x。

方法如下:

方法1(最速下降法):步长𝜆不容易确定,容易陷入局部最优,根本原因是仅保留一阶项来近似求解。

方法2(牛顿法):求解Hessian矩阵的计算量比较大,且不容易求解。

方法3(高斯牛顿法):不是对lost-function进行泰勒展开,而是对非线性函数进行一阶泰勒展开,进行一阶线性化近似,然后构建目标函数,目标函数对∆x进行求导,最后求解线性方程组,用Jacobian来近似Hessian。这样的好处是收敛速度较快,特别适用于参数估计问题。然而,由于它基于二次函数的线性化,当目标函数存在较大的非线性特征时,可能会导致迭代过程中发散。

于是便引出LM法:

Levenberg-Marquardt方法:它是一种常用的非线性最小二乘优化算法,结合了最速下降法和高斯牛顿法的优点。它在高斯牛顿法的基础上引入了一个调整因子,以解决高斯牛顿法在目标函数具有较大非线性特征时可能出现的发散问题。

Levenberg-Marquardt法是在Gaussian-Newton法的基础上添加了阻尼因子λ,即求解线性方程:

当λ较大时,相当于梯度下降法,而λ较小时,相当于G-N法。 当问题性质较好时,用高斯牛顿法,若问题接近病态,用LM法,稳定性更好,更容易收敛。

标定问题中的非线性优化

一般我们需要求解变换矩阵T,而R是满足一定约束的。那么,带约束的非线性优化问题,如何求解?

• 用李代数表达位姿,利用李代数求导方法,可转化为无约束优化问题(矩阵群没有加法,只有乘法,不方便求导)

• 沿用非线性优化求解

内参标定

多传感器内参:

传感器

内参产生原因

如何标定

相机

• 棱镜安装偏移 • 焦距 • 相机坐标系与图像坐标系之间转换关系

• 可通过算法补偿 • 因工艺问题,需要重标

激光雷达

• 激光头的安装位置和角度 • 强度值一致性要求

• 需要专业设备 • 出厂已标好

毫米波雷达

• 发射天线安装位置 • 接收天线距离

• 需要专业设备 • 出厂已标好

超声波雷达

• 压电陶瓷输入的电流电压值 • 安装高度及感知区域扇面尺寸

• 需要专业设备 • 出厂已标好

所以一般我们只需要标定相机内参,即标定相机坐标系到uv坐标系的投影关系。

Camera成像过程的建模

成像两阶段(没有考虑畸变):

  1. 相机坐标系到图像坐标系

  2. 图像坐标系到像素坐标系

得到:

Z被提取出来,表明成像过程失去了深度信息。 fx, fy 为坐标系缩放系数,包含了f焦距信息;Cx, Cy 为坐标系平移量。

Camera成像过程中存在畸变,如何建模?

  1. 径向畸变:透镜自身形状难以做到完全规则,因此会对光线传播产生影响,从而引起径向畸变

  2. 切向畸变:机械组件的安装过程中,透镜和成像平面不可能完全平行。

总结整个相机成像过程建模:

(1)自车坐标系到相机坐标系

(2)相机坐标系到图像坐标系(不考虑畸变)

(3)图像坐标系(含去畸变): 将(Xc, Yc, Zc)投影到归一化平面上 ,再进行(径向与切向)畸变修正,得到去畸变后的归一化坐标。

(4)图像坐标系到像素坐标系

将纠正后的点投影到像素平面,其中 为坐标系缩放系数,Cx, Cy 为坐标系平移量。

通常意义上,相机需要标定的参数如下:

[f, , Cx, Cy, k1, k2, k3, p1, p2]

​矩阵H内包含f, , Cx, Cy 内参 和 k1, k2, k3, p1, p2 畸变参数。对于每个相机来说,参数都不一致,因此需要标定。

将Camera内参标定问题转化为非线性优化问题

采用棋盘格进行标定(张正友标定法),传统计算机视觉对于棋盘格的角点检测精度高。而棋盘格尺寸是定制的,角点之间的3D位置可计算。

我们需要获得一一对应的多组3D空间点和像素点。而一张棋盘格成像可以建立多组对应关系。

对第k张图片,以棋盘格的原点为基准可定位每一个角点,并满足投影关系如下,找到足够多的对应点:

由此构建优化问题:

用高斯牛顿法或LM(Levenberg-Marquardt )算法计算出如下参数:

[f, , Cx, Cy, k1, k2, k3, p1, p2]还有R,t,注意这里还得到了相机到自车坐标系的变换。

总结:

假设在相机内参和外参完全已知和正确的情况下,标定板在三维空间中的角点投影到相机像素平面上应该是要和相机像素平面成像的那个角点重合的。但事实上相机的内参和外参是不正确的,所以是不重合的,error不为0,所以我们就是要构建多个三维空间的角点投影到相机像素平面的UV点与原来像素平面的UV点的误差方程,我们的目标是将error逼近0,达到最小,求解出此时的内参和外参。那为什么相机到自车坐标系这个外参也能求得呢,是因为我们已知了棋盘格内部角点的投影关系,这个作为已知量,而外参作为求解量和内参也能够在构建的超定方程中求解出来。

标定实现

二. 多传感器时间同步方案(时序闭环)--1

参考:深蓝学院《多传感器融合感知》

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

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

相关文章

Bugs记录

一、/usr/bin/ld: cannot find -l**** 参考:https://www.cnblogs.com/sakuraie/p/13341508.html 在ubuntu上安装软件时,经常出现这样的问题: /usr/bin/ld: cannot find -l**** 例如: /usr/bin/ld: cannot find -lcaffe 安装 需…

netfilter调试记录

今天调试netfilter, 钩子是ip层的post routing出下的钩子 勾出的报文没有二层报文,刚开始搞不清原因,后来才搞明白,原来就是没有二层,只有在桥上勾到的才是有二层报文, skb里有个字段protocol可以表示这个…

Leetcode题目【回文子串+回文子序列】

目录 647. 回文子串5. 最长回文子串516. 最长回文子序列 647. 回文子串 作为一个回文子串,主打的就是连续子串、两边对称。所以递推公式怎么想呢?子问题dp是一个成型的回文子串,当我左右两边加上相同的字符,才会再次构成当前的回…

Higress非K8S安装

Higress非K8S安装 文章目录 Higress非K8S安装环境安装安装higress进入到higress 的目录下修改下nacos的地址启动Higress登录higress管理页面 Higress 是基于阿里内部构建的下一代云原生网关,官网介绍:https://higress.io/zh-cn/docs/overview/what-is-hi…

lombok插件

懒人必备插件 1.安装&#xff1a; 2.在项目中导入lombok的jar包 <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version></dependency></depe…

flask的配置项

flask的配置项 为了使 Flask 应用程序正常运行&#xff0c;有多种配置选项需要考虑。下面是一些基本的 Flask 配置选项&#xff1a; DEBUG: 这个配置项决定 Flask 是否应该在调试模式下运行。如果这个值被设为 True&#xff0c;Flask 将会提供更详细的错误信息&#xff0c;并…

redis哨兵配置

首先哨兵需要三台服务器因为要选主服务器,一个主服务器两个备服务器.比主从复制要好一点就是不用手工切换主服务器 配置主从服务器需要主从复制为底层 vim /opt/redis-5.0.7/sentinel.conf 编辑哨兵配置文件 主和从的配置都是一样的 先启master&#xff0c;再启slave cd /op…

什么是ROC曲线

ROC曲线&#xff08;Receiver Operating Characteristic Curve&#xff09;&#xff0c;也称为“接受者操作特性曲线”。它最早应用于雷达信号检测的分析&#xff0c;后来广泛应用于心理学和医学领域。 ROC分析是进行临床诊断试验评价最常用的方法。诊断试验是指评价某种疾病诊…

树莓派微型 web 服务器——正式设计报告

树莓派微型web服务器 摘要 这篇博客介绍了一个基于树莓派的轻量级服务器项目。树莓派是一款低成本、小型化的单板计算机&#xff0c;具有较低的功耗和良好的可扩展性。该项目利用树莓派搭建了一个功能简洁但性能稳定的服务器环境&#xff0c;适用于小型应用或个人使用。该轻量…

flask 实现简单的登录系统demo

你提供的代码是一个基本的Flask应用程序&#xff0c;实现了一个简单的登录系统。以下是代码的详细解释&#xff1a; 1. 导入必要的模块&#xff1a;os 用于生成密钥&#xff0c;Flask 用于创建Web应用程序。 2. 创建Flask应用程序的实例&#xff0c;并为会话管理设置一个密钥。…

web-暴力破解密码

Burte Force&#xff08;暴力破解&#xff09;概述 暴力破解”是一攻击具手段&#xff0c;在web攻击中&#xff0c;一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录&#xff0c;直到得到正确的结果。 为了提高效率&…

都说软件测试没前途了?为何每年还会增加40万测试员

最近和一些刚进入软件测试行业的朋友交流&#xff0c;发现了一个有趣的现象&#xff0c;那就是对这个行业很多问题的认识是一致的、片面的&#xff0c;也可以理解为误解。利用你的时间列出他们对这个行业的所有误解&#xff0c;然后结合你多年的工作经验和你交流。毕竟你是从这…

WPS本地镜像化在线文档操作以及样例

一个客户项目有引进在线文档操作需求&#xff0c;让我这边做一个demo调研下&#xff0c;给我的对接文档里有相关方法的说明&#xff0c;照着对接即可。但在真正对接过程中还是踩过不少坑&#xff0c;这儿对之前的对接工作做个记录。 按照习惯先来一个效果&#xff1a; Demo下载…

应届生如何快速找Java开发工程师,先学会这17个基础问题

一、Java 基础 JDK 和 JRE 有什么区别&#xff1f; JDK&#xff1a;Java Development Kit 的简称&#xff0c;java 开发工具包&#xff0c;提供了 java 的开发环境和运行环境。 JRE&#xff1a;Java Runtime Environment 的简称&#xff0c;java 运行环境&#xff0c;为 java 的…

机器学习李宏毅学习笔记39

文章目录 前言一、大模型的发展趋势二、KNN LM总结 前言 大模型大资料 大模型的顿悟时刻 一、大模型的发展趋势 随数据量增加&#xff0c;模型可以从量变达到质变&#xff0c;从某一刻开始突然学会东西。 当成为大模型时&#xff0c;分数会从0,0突然变成100&#xff0c;完成“…

MySql001——初识数据库

一、什么是数据库 简单理解&#xff1a;数据库就是存放数据的仓库。 而仓库的作用就是往里面存东西&#xff08;入库&#xff09;&#xff0c;和从里面取东西&#xff08;出库&#xff09;。 二、数据库的作用 简单理解&#xff1a;数据库的作用就是存放数据。 互联网世界就是…

(el-radio)操作:Element-plus 中 Radio 单选框改成垂直排列的样式操作与使用

Ⅰ、Element-plus 提供的Radio单选框组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 Radio 组件情况&#xff1a; 其一、Element-ui 自提供的Radio代码情况为(示例的代码)&#xff1a; // Element-plus 自提供的代码&#xff1a; // 此时是使用了 ts 语言环境&a…

selenium进阶

Selenium进阶部分一 本篇建立在selenium基础部分之上&#xff0c;介绍了如条件判断&#xff0c;常用断言&#xff0c;文件截图操作&#xff0c;cookies操作和ActionChains库等常用操作 附带介绍了XPATH的用法 Selenium常用小操作 上传文件 实现原理&#xff1a;直接定位到…

基于Java+SpringBoot+vue前后端分离技术交流和分享平台设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

7.28 作业 QT

手动完成服务器的实现&#xff0c;并具体程序要注释清楚: widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QMessageBox> //对话框类 #include …