SLAM|2. 差异与统一:坐标系变换与外参标定

news2024/11/28 16:39:01

本章主要内容
1.坐标系变换
2.相机外参标定
上一章我们了解了相机内参的概念,内参主要解决三维世界与二维图像之间的映射关系。有了内参我们可以一定程度上还原相机看到了什么(但缺乏尺度)。但相机看到的数据只是处于相机坐标系,为局部观测,我们需要将局部观测转换到全局观测上,这就涉及坐标系间转换。将传感器坐标系观测转换到载体坐标系需要通过外参。本章将介绍坐标系转换及相机外参这两部分内容。

2.1 坐标系转换

在这里插入图片描述

如图6,对同一物体,在不同坐标系下便有不同坐标。那么如果知道A与B的相对位置关系,且知道树在A坐标系下的坐标,我们如何求出树在B坐标系下的坐标呢,这就涉及到坐标系转换的内容。
首先我们有一个人为设定的世界坐标系,任何物体在这个坐标系下有其固定的坐标,这个是不变的。而这个物体被相机观测到之后,在相机坐标系下会有一个观测坐标,如图6中的A,B,C,但这个观测是相对观测,只对当前的相机坐标系有意义,对其他观测者是没有意义的,因为它无法把这个信息转换为对自己有用的信息,只有当坐标能转化到世界坐标系这个公共坐标系下,其他观测者才能利用这次观测,从而达到对环境的“有效建模”。
那么如何转换呢,需要使用转换矩阵来完成。接下来我们会从最简单的二维坐标系变换开始,一步一步推导出三维坐标系之间坐标转换的计算方式。

2.1.1 二维纯旋转变换

在这里插入图片描述

假设XOY为固定的世界坐标系,X’OY’为活动坐标系,在XOY坐标系下有一点P(x,y),假设X’OY’相对于XOY旋转了θ度,则根据三角函数,可以得到在X’OY’下点P的坐标P’为

x ∗ = O D + D F = x × cos ⁡ ( θ ) + y × sin ⁡ ( θ ) y ∗ = P C − F C = y × cos ⁡ ( θ ) − x × sin ⁡ ( θ ) \mathbf{x}^{*}=\mathbf{O D}+\mathrm{DF}=\mathbf{x} \times \cos (\theta)+\mathbf{y} \times \sin (\theta) \\ \mathbf{y}^{*}=\mathbf{P C}-\mathrm{FC}=y \times \cos (\theta)-\mathbf{x} \times \sin (\theta) \\ x=OD+DF=x×cos(θ)+y×sin(θ)y=PCFC=y×cos(θ)x×sin(θ)

在这里插入图片描述

根据上述计算关系,我们也可以把P看做首先在X’OY’中测得的坐标,而XOY相对于X’OY’反向旋转了θ度(-θ),可以得到在活动坐标系下点P(x,y),在固定世界坐标系下坐标为
x ∗ = O D + D F = x × cos ⁡ ( − θ ) + y × sin ⁡ ( − θ ) = x × cos ⁡ ( θ ) − y × sin ⁡ ( θ ) y ∗ = P C − F C = y × cos ⁡ ( − θ ) − x × sin ⁡ ( − θ ) = y × cos ⁡ ( θ ) + x × sin ⁡ ( θ ) \mathbf{x}^{*}=\mathbf{O D}+\mathrm{DF}=\mathbf{x} \times \cos (-\theta)+\mathbf{y} \times \sin (-\theta)=\mathbf{x} \times \cos (\theta)-\mathbf{y} \times \sin (\theta) \\ \mathbf{y}^{*}=\mathbf{P C}-\mathbf{F C}=y \times \cos (-\theta)-\mathbf{x} \times \sin (-\theta)=y \times \cos (\theta)+\mathbf{x} \times \sin (\theta) \\ x=OD+DF=x×cos(θ)+y×sin(θ)=x×cos(θ)y×sin(θ)y=PCFC=y×cos(θ)x×sin(θ)=y×cos(θ)+x×sin(θ)

写为矩阵形式为

( x ∗ y ∗ ) = ( cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ) ( x y ) = R ( x y ) \left(\begin{array}{l} x^{*} \\ y^{*} \end{array}\right)=\left(\begin{array}{cc} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right)\left(\begin{array}{l} x \\ y \end{array}\right)=R\left(\begin{array}{l} x \\ y \end{array}\right) \\ (xy)=(cosθsinθsinθcosθ)(xy)=R(xy)
其中R为X’OY’在XOY坐标系下的旋转矩阵

2.1.2二维纯平移变换

两个坐标系只有平移变换,则坐标系转换很简单,如下
在这里插入图片描述

x ∗ = x + t x y ∗ = y + t y \mathbf{x}^{*}=\mathbf{x}+t_{x} \\ \mathbf{y}^{*}=\mathbf{y}+t_{y} \\ x=x+txy=y+ty

2.1.3二维坐标系变换

在这里插入图片描述

把上述旋转变换与平移变换结合在一起,就是二维坐标系变换
( x ∗ y ∗ ) = ( cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ) ( x y ) + ( t x t y ) \left(\begin{array}{l} x^{*} \\ y^{*} \end{array}\right)=\left(\begin{array}{cc} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right)\left(\begin{array}{l} x \\ y \end{array}\right)+\left(\begin{array}{l} t_{x} \\ t_{y} \end{array}\right) \\ (xy)=(cosθsinθsinθcosθ)(xy)+(txty)

2.1.4 最终坐标系变换-扩展到三维

二维的旋转,可以看做三维下只绕Z轴的旋转,其中Z坐标不变,旋转矩阵扩展为
( x ∗ y ∗ z ∗ ) = ( cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ) ( x y z ) \left(\begin{array}{l} x^{*} \\ y^{*} \\ z^{*} \end{array}\right)=\left(\begin{array}{ccc} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{array}\right)\left(\begin{array}{l} x \\ y \\ z \end{array}\right) \\ xyz = cosθsinθ0sinθcosθ0001 xyz
相应的,对于不同旋转,目前只需要记住中间有一个3X3的旋转矩阵就行(该矩阵有一个特殊性质,就是属于SO3群),而平移则是从二维变为三维就行了,最后三维变换:

( x ∗ y ∗ z ∗ ) = ( cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ) ( x y z ) + ( t x t y t z ) = R ( x y z ) + t \left(\begin{array}{l} x^{*} \\ y^{*} \\ z^{*} \end{array}\right)=\left(\begin{array}{ccc} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{array}\right)\left(\begin{array}{l} x \\ y \\ z \end{array}\right)+\left(\begin{array}{l} t_{x} \\ t_{y} \\ t_{z} \end{array}\right)=R\left(\begin{array}{l} x \\ y \\ z \end{array}\right)+t \\ xyz = cosθsinθ0sinθcosθ0001 xyz + txtytz =R xyz +t

但对于坐标系变换,常用齐次矩阵来表示,及把旋转变换与平移变换,放到一个矩阵里

( x ∗ y ∗ z ∗ 1 ) = ( cos ⁡ θ − sin ⁡ θ 0 t x sin ⁡ θ cos ⁡ θ 0 t y 0 0 1 t z 0 0 0 1 ) ( x y z 1 ) \left(\begin{array}{l} x^{*} \\ y^{*} \\ z^{*} \\ 1 \end{array}\right)=\left(\begin{array}{cccc} \cos \theta & -\sin \theta & 0 & t_{x} \\ \sin \theta & \cos \theta & 0 & t_{y} \\ 0 & 0 & 1 & t_{z} \\ 0 & 0 & 0 & 1 \end{array}\right)\left(\begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right) \\ xyz1 = cosθsinθ00sinθcosθ000010txtytz1 xyz1

在原三维向量下,添加1后的坐标,称为齐次坐标,这个是几何变换中常用的数学技巧

a ∗ ~ = ( R t 0 1 ) a ~ \widetilde{a^{*}}=\left(\begin{array}{cc} R & t \\ 0 & 1 \end{array}\right) \widetilde{a} \\ a =(R0t1)a
于是可以简化到下面这种形式:

a 1 ~ = T 2 1 a 2 ~ \widetilde{a_{1}}=T_{2}^{1} \widetilde{a_{2}} \\ a1 =T21a2
其中T12称为变换矩阵,表示将坐标系2下的坐标,转换到1所需要变换。
在这里插入图片描述

使用坐标系变换,可以把相机坐标系(cam)下的坐标,转换到世界坐标系下。反之,也可以把世界坐标系下坐标,转换到相机坐标系下。

2.2 相机外参

2.2.1 定义

对于移动载体来说,相机只是载体的一个传感器,我们更感兴趣的是,通过相机观测到的物体,相对于载体而言,其坐标为什么。如果说相机坐标系为camera_link,那么载体坐标系为base_link,这二者之间存在一个变换矩阵,通常用camera_link到base_link的欧式转换表示,而这个变换矩阵,就是常说的相机外参。使用外参矩阵,可以把相机坐标系下看到的点转换到机器人坐标下。
通俗来讲,相机外参描述了相机安装在载体的什么地方,安装角度是怎样的。
如下图,相机0与相机1均不与飞行器本体坐标系重叠,假设相机0安装在本体坐标系的t处(平移),旋转矩阵为R,则其外参为(R,t)。通过相机外参,可以把相机观测转换到飞行器本体坐标系的观测中。
在这里插入图片描述

2.2.2 相机外参的标定

如果知道相机相对于载体坐标系安装的位置与角度,是可以直接得到相机外参的,但是,由于机械安装的误差,或者运动过程的变形,这个外参是会改变的。为了获取此时的外参,常借助于一些外参标定工具,常见的外参标定工具有如下几种:
OpenCV
OpenCV除了提供相机内参标定外,也提供了相机外参标定的功能。通过拍摄已知的三维空间点的图像,并利用这些点在相机坐标系下的三维坐标,可以计算相机的位姿。
Matlab
Matlab也提供了相机外参标定的工具箱,其中包括了单目和立体相机的标定工具。通过拍摄已知的三维空间点的图像,可以计算相机的位姿。
Kalibr
Kalibr是ETH Zurich的一个开源相机标定工具,支持单目、双目和多目相机标定。Kalibr使用基于优化的方法来计算相机的位姿,同时也可以进行相机和IMU的联合标定。

2.2.3 外参标定的意义

相机外参标定确定了相机在世界坐标系中的位置和朝向,这些信息可以用于将图像中的点转换为世界坐标系中的点,或者将世界坐标系中的点转换为图像中的点。因此,外参标定对于相机视觉算法的准确性和稳定性有着重要的影响。以下是外参标定对算法的几个方面的影响:
(一) 特征匹配:在进行特征匹配时,需要将图像中的特征点匹配到世界坐标系中的点。如果外参标定不准确,将导致匹配错误,从而影响算法的准确性。
(二) 三维重建:在进行三维重建时,需要将多张图像中的点匹配到世界坐标系中的点,并进行三维重建。如果外参标定不准确,将导致重建的几何形状不准确或者出现扭曲。
(三) 目标跟踪:在进行目标跟踪时,需要将跟踪目标在多张图像中的位置匹配到世界坐标系中的点,并进行跟踪。如果外参标定不准确,将导致跟踪不准确或者跟踪失败。
(四) 相机姿态估计:在进行相机姿态估计时,需要将相机在多张图像中的位置和朝向匹配到世界坐标系中的点,并进行姿态估计。

2.2.4 相机标定类型

相机标定是指确定相机内部参数和外部参数的过程,以便在图像中恢复真实世界中的几何信息。常用的相机标定类型包括以下几种:
(一) 内部标定:用于确定相机的内部参数,包括焦距、主点位置、畸变系数等。内部标定通常使用标定板等已知几何形状的物体,并采用校正方法进行计算。
(二) 外部标定:用于确定相机在世界坐标系中的位置和方向。外部标定通常使用已知位置的标定板或者其他几何形状的物体,并采用三维重建方法进行计算。
(三) 传感器到传感器标定:用于确定多个相机之间的相对位置和方向,以便进行双目或多目视觉处理。传感器到传感器标定通常使用标定板或者球形标定物等,采用立体匹配算法进行计算。
(四) 传感器到车体标定:用于确定相机在车体坐标系中的位置和方向,以便进行车载视觉处理。传感器到车体标定通常使用车体固定的标定板或者其他几何形状的物体,采用三维重建方法进行计算。
(五) 姿态标定:用于确定相机在平面或者空间中的朝向,以便进行视觉导航或者机器人控制。姿态标定通常使用旋转平台或者陀螺仪等设备,采用角度解算方法进行计算。
(六) 相机-激光雷达标定:用于确定相机和激光雷达之间的相对位置和方向,以便进行三维点云重建或者障碍物检测。相机-激光雷达标定通常使用已知几何形状的标定板或者球形标定物,采用多视角几何约束方法进行计算。
(七) 相机-IMU标定:用于确定相机和惯性测量单元(IMU)之间的相对位置和方向,以便进行惯性辅助导航或者姿态估计。相机-IMU标定通常使用运动平台或者旋转平台等设备,采用卡尔曼滤波或者优化方法进行计算。

本章小结

本章主要介绍如何将相机坐标系下观测,转换到其他坐标系(如载体坐标系),紧接着介绍了相机外参。相机外参主要作用是将相机的局部观测转到载体坐标系下。载体在世界坐标系中不断运动,如何描述载体在世界坐标系下姿态,见下一章。

本章思考

1.相机外参的作用是什么?
2.一个载体搭载着摄像头,在平面上运动,相机外参【t(x,y,z)与R(roll,pitch,yaw)】哪些量不可以被标定出来?
附录

  1. 摄像机外参标定
    求解相机的内、外参数矩阵,描述了三维世界到二维像素的映射关系
    在这里插入图片描述

其中的 θ \theta θ为单个像素两条边的夹角,一般我们认为这个角度为90°,早期对于一些加工不好的传感器,像素可能会是平行四边形。
M矩阵有11个未知量,求解投影矩阵需要最少六对点对应,但实操时一般使用多于六对点获得更鲁棒的效果
径向畸变:图像像素点以畸变中心为中心点,沿着径向产生的位置偏差,从而导致图像中所成的像发生形变
产生原因:光线在远离透镜中心的地方比靠近中心的地方更加弯曲
图像放大率随距光轴距离的增加而减小

在这里插入图片描述

2 提取摄像机参数
将投影矩阵M拆分开,参数分为内参数与外参数。
在这里插入图片描述

对于这里的 ρ \rho ρ,是一个标量,因为我们求得的解,其实会与实际的解相差一个系数,该系数由 ρ \rho ρ表示。
2.1 提取摄像机内参数u、v与θ
在这里插入图片描述

其中A与b分别为
在这里插入图片描述

带入其中得
在这里插入图片描述

其中K、R、T分别为
在这里插入图片描述

计算得
在这里插入图片描述

利用正交性质,将两行对应相乘
在这里插入图片描述

求相应的模,可得
在这里插入图片描述

自己点乘自己,可得
在这里插入图片描述

得到θ
在这里插入图片描述

最后得到α与β
在这里插入图片描述

2.2 提取摄像机外参数r1、r2与r3
在这里插入图片描述

再求得外参数T
在这里插入图片描述

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

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

相关文章

Solidworks二次开发 获取装配体里面组件列表以及名称

******************************************************************************从装配体里面获取组件******************************************************************************Option Explicit 强制在模块级别显式声明所有变量 *********************定义SOLIDWOR…

《链表篇》---环形链表II(返回节点)

题目传送门 方法一&#xff1a;哈希表&#xff08;与环形链表类似&#xff09; 很容易就可以找到链表的相交位置。 public class Solution {public ListNode detectCycle(ListNode head) {if(head null || head.next null){return null;}Set<ListNode> visited new Ha…

2024 年 MathorCup 数学应用挑战赛——大数据竞赛-赛道 A:台风的分类与预测

2024年MathorCup大数据挑战赛-赛道A初赛-第四版论文.ziphttps://download.csdn.net/download/qq_52590045/89930645 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ …

解决Github下载速度慢的问题

1. 方式一 先把hosts文件先复制一份到其他文件夹下&#xff0c;以免造成不小心改动出现的后果在C盘的C:\Windows\System32\drivers\etc 下的hosts文件 用编辑器打开后&#xff0c;在末尾处添加访问如下的两个网站所返回的两个IP https://github.com.ipaddress.com/ http://gi…

基于SSM大学生互动交流网站设计与实现

前言 随着社会的发展&#xff0c;系统的管理形势越来越严峻。越来越多的用户利用互联网获得信息&#xff0c;但各种信息鱼龙混杂&#xff0c;信息真假难以辨别。为了方便用户更好的获得信息&#xff0c;因此&#xff0c;设计一种安全高效的大学生互动交流网站极为重要。 开发…

C语言复习第8章 数据在内存中的存储

目录 一、数据类型1.1 数据类型介绍1.2 类型的意义1.3 类型的基本归类整形家族浮点数家族构造类型(自定义类型)指针类型空类型 二、整型在内存中的存储2.1 原反补2.2 为什么内存中要存补码?2.3 大小端介绍2.4 为什么会有大小端之分2.5 写一个程序 判断当前机器的字节序 三、练…

创业板权限开通有何要求?创业板的股票交易佣金最低是多少?

创业板 创业板又称二板市场&#xff08;Second-board Market&#xff09;即第二股票交易市场&#xff0c;是与主板市场&#xff08;Main-Board Market&#xff09;不同的一类证券市场&#xff0c;专为暂时无法在主板市场上市的创业型企业提供融资途径和成长空间的证券交易市场…

使用 FastGPT 工作流实现 AI 赛博算卦,一键生成卦象图

最近那个男人写的汉语新解火遍了全网&#xff0c;那个男人叫李继刚&#xff0c;国内玩 AI 的同学如果不知道这个名字&#xff0c;可以去面壁思过了。 这个汉语新解的神奇之处就在于它只是一段几百字的提示词&#xff0c;效果却顶得上几千行代码写出来的应用程序。 这段提示词…

【Qt】窗口——Qt窗口的概念、常用的窗口函数、菜单栏、工具栏、状态栏、浮动窗口、对话框

文章目录 Qt窗口Qt窗口的概念菜单栏工具栏状态栏浮动窗口对话框 Qt 窗口 Qt窗口的概念 QMainWindow 类概述&#xff1a; QMainWindow 是一个为用户提供主窗口程序的类&#xff0c;它继承自 QWidget 类&#xff0c;并且提供了一个预定义的布局。 菜单栏 菜单栏常用属性&#xf…

深入解析HTTP与HTTPS的区别及实现原理

文章目录 引言HTTP协议基础HTTP响应 HTTPS协议SSL/TLS协议 总结参考资料 引言 HTTP&#xff08;HyperText Transfer Protocol&#xff09;超文本传输协议是用于从Web服务器传输超文本到本地浏览器的主要协议。随着网络安全意识的提高&#xff0c;HTTPS&#xff08;HTTP Secure…

Android 下载进度条HorizontalProgressView 基础版

一个最基础的自定义View 水平横向进度条&#xff0c;只有圆角、下载进度控制&#xff1b;可二次定制度高&#xff1b; 核心代码&#xff1a; Overrideprotected void onDraw(NonNull Canvas canvas) {super.onDraw(canvas);int mW getMeasuredWidth();int mH getMeasuredHei…

服务器数据恢复—异常断电导致服务器挂载分区无法访问的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌服务器同品牌存储&#xff0c;Linux centos7EXT4文件系统。 服务器故障&#xff1a; 意外断电导致服务器操作系统不能正常启动。经过修复后系统可以正常启动&#xff0c;但是挂载的分区无法正常访问。使用fsck修复这个问题分区&#xff…

网络原理(数据链路层)->以太网帧格式解

前言 大家好我是小帅&#xff0c;今天我们来了解以太网帧格式 个人主页 文章目录 1.数据链路层1.1 认识以太⽹1.2 MAC地址&#xff08;⽹卡的硬件地址&#xff09;1.2.1 对⽐理解MAC地址和IP地址 1.3 认识MTU1.4 MTU对IP协议的影响1. 5 MTU对UDP协议的影响1.6 MTU对于TCP协议的…

隨筆 20241025 Kafka数据一致性的韭菜比喻

在Kafka中&#xff0c;数据一致性是通过Leader和Follower副本之间的协调来实现的。为了更容易理解这个复杂的概念&#xff0c;我们可以用韭菜作为比喻。 韭菜的角色 Leader韭菜&#xff1a;代表数据的主导者&#xff0c;它负责更新和维护最新的数据。Follower韭菜&#xff1a…

CNAS软件测试的好处有哪些?上海软件测试中心推荐

在进行软件测试或其他项目检测需要选择软件测试中心时&#xff0c;我们常常会把该公司有无资质认证考虑进去。那么CNAS认可作为检测机构或实验室的一项重要资质认证&#xff0c;我们可能会产生疑问&#xff1a;CNAS认可什么意思?CNAS软件测试又有什么好处呢? 1、CNAS认可是什…

vivo 轩辕文件系统:AI 计算平台存储性能优化实践

在早期阶段&#xff0c;vivo AI 计算平台使用 GlusterFS 作为底层存储基座。随着数据规模的扩大和多种业务场景的接入&#xff0c;开始出现性能、维护等问题。为此&#xff0c;vivo 转而采用了自研的轩辕文件系统&#xff0c;该系统是基于 JuiceFS 开源版本开发的一款分布式文件…

满足抖音视频剪辑内容要求的四款剪辑工具!!!

抖音作为短视频的主流平台&#xff0c;吸引了大量用户参与视频创作&#xff0c;视频剪辑需求也不断扩大&#xff0c;而市面上功能各异的视频剪辑工具也为创作者提供了丰富的选择。无论是个人分享、品牌宣传还是娱乐内容&#xff0c;剪辑已成为内容制作的关键。以下四款视频剪辑…

类和对象—上

目录 一、面向过程和面向对象初步认识 1.面向过程介绍 2.面向对象 二、类的引入 1.可以利用关键字struct来定义类的原因 1.1.C可以使用struct来定义类的原因是 2.利用关键字struct定义类及访问类成员的案例 3.使用关键字struct定义结构体、定义类的区别 3.1.C语言的结…

掌握机器学习中的偏差与方差:模型性能的关键

引言 在机器学习中&#xff0c;偏差&#xff08;Bias&#xff09;和方差&#xff08;Variance&#xff09;是两个至关重要的概念&#xff0c;它们共同影响了模型的性能。理解偏差与方差的本质&#xff0c;能够帮助我们找到模型的平衡点&#xff0c;提高模型的泛化能力&#xf…

简记Vue3(二)—— computed、watch、watchEffect

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…