位姿估计和坐标系变换

2024-06-07 23:18
文章标签 位姿 估计 变换 坐标系

本文主要是介绍位姿估计和坐标系变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SLAM是一个“鸡生蛋和蛋生鸡”的问题,要定位需要重建,一般通过当前sensor看到到场景跟建好的地图进行匹配确定自身的位置。简单的例子:比如你在平面上,别人问你的坐标,那么很显然你得先有坐标系。要重建又需要精确的定位信息,如果没有相机位姿,那么当前帧数据无法统一注册到世界坐标系下。

在SLAM中,所谓的位姿其实指的是相机在世界坐标系中的位姿。位姿包括两方面:位置和姿势,即三维坐标和朝向。如下所示,建图的过程就需要知道每一刻相机的位姿,从而将当前相机捕获的点云注册到全局的点云模型中。
在这里插入图片描述
常用的变换有:世界坐标系 -> 相机坐标系相机的位姿 -> 世界坐标系
如下所示:世界坐标系为 w x y wxy wxy, 相机坐标系为 c x ’ y ’ cx^’y^’ cxy P P P在世界坐标下的坐标为 ( a , b ) (a,b) (a,b), P P P在相机坐标系下的坐标为 ( a ’ b ’ ) (a^’b^’) (ab)

(1) 已知相机坐标系在世界坐标系的位姿为: T c w T_{cw} Tcw, 世界坐标中的点 P w P_w Pw, 那么相机坐标系的坐标为 P c = T c w − 1 P w P_c = T^{-1}_{cw}P_w Pc=Tcw1Pw
(2) 已知相机坐标系在世界坐标系的位姿为: T c w T_{cw} Tcw, 相机坐标中的点 P c P_c Pc, 那么世界坐标系的坐标为 P w = T c w P c P_w = T_{cw}P_c Pw=TcwPc

T c w T_{cw} Tcw T c w − 1 T^{-1}_{cw} Tcw1均可作为相机位姿, 主流的如ORBSLAM采用后者作为相机的位姿。
在这里插入图片描述
可以检验一下:
(1)只包含平移,相机坐标系在世界坐标下只有平移,平移向量为 ( 2 , 2 ) (2,2) (2,2), 那么 T c w = [ 1 0 2 0 1 2 0 0 1 ] T_{cw} = \begin{bmatrix} 1 & 0 & 2\\ 0 & 1 & 2\\ 0 & 0 & 1 \end{bmatrix} Tcw=100010221 T c w − 1 = [ 1 0 − 2 0 1 − 2 0 0 1 ] T^{-1}_{cw} = \begin{bmatrix} 1 & 0 & -2\\ 0 & 1 & -2\\ 0 & 0 & 1 \end{bmatrix} Tcw1=100010221
已知世界坐标系中的坐标为 P w ( 3 , 3 ) P_w(3,3) Pw(3,3), 转换到相机坐标系下为: P c = T c w − 1 P w = [ 1 0 − 2 0 1 − 2 0 0 1 ] ∗ [ 3 3 1 ] = [ 1 1 1 ] P_c = T^{-1}_{cw} P_w = \begin{bmatrix} 1 & 0 & -2\\ 0 & 1 & -2\\ 0 & 0 & 1 \end{bmatrix} * \begin{bmatrix} 3 \\ 3 \\ 1 \end{bmatrix} = \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix} Pc=Tcw1Pw=100010221331=111。因此,相机坐标系下的坐标 P c = ( 1 , 1 ) P_c = (1,1) Pc=(1,1)
反之,已知相机坐标系下的坐标 P c ( 1 , 1 ) P_c(1,1) Pc(1,1), 转换到世界坐标系下为: P w = T c w P c = [ 1 0 2 0 1 2 0 0 1 ] ∗ [ 1 1 1 ] = [ 3 3 1 ] P_w = T_{cw} P_c = \begin{bmatrix} 1 & 0 & 2\\ 0 & 1 & 2\\ 0 & 0 & 1 \end{bmatrix} * \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix} = \begin{bmatrix} 3 \\ 3 \\ 1 \end{bmatrix} Pw=TcwPc=100010221111=331, 因此,世界坐标系下的坐标 P w = ( 3 , 3 ) P_w = (3,3) Pw=(3,3)
在这里插入图片描述
(2)只包含旋转, 相机坐标系在世界坐标系中逆时针旋转了 180 ° 180\degree 180°, 那么位姿矩阵 T c w = [ − 1 0 0 0 − 1 0 0 0 1 ] T_{cw} = \begin{bmatrix} -1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1 \end{bmatrix} Tcw=100010001, T c w − 1 = [ − 1 0 0 0 − 1 0 0 0 1 ] T^{-1}_{cw} = \begin{bmatrix} -1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1 \end{bmatrix} Tcw1=100010001,

已知世界坐标系中的坐标为 P w ( 3 , 3 ) P_w(3,3) Pw(3,3), 转换到相机坐标系下为 P c = T c w − 1 P w = ( − 3 , − 3 ) P_c = T^{-1}_{cw} P_w = (-3,-3) Pc=Tcw1Pw=(3,3)
反之,相机坐标下的坐标为 P c ( − 3 , − 3 ) P_c(-3,-3) Pc(3,3), 转换到世界坐标系下为 P w = T c w P c = ( 3 , 3 ) P_w = T_{cw}P_c = (3,3) Pw=TcwPc=(3,3)

(3)既包含旋转又包含平移,先逆时针旋转 180 ° 180\degree 180°, 然后平移 ( 2 , 2 ) (2,2) (2,2), 因此 T c w = [ 0 − 1 2 1 0 2 0 0 1 ] T_{cw} = \begin{bmatrix} 0 & -1 & 2\\ 1 & 0 & 2\\ 0 & 0 & 1 \end{bmatrix} Tcw=010100221, T c w − 1 = [ 0 1 − 2 − 1 0 2 0 0 1 ] T^{-1}_{cw} = \begin{bmatrix} 0 & 1 & -2\\ -1 & 0 & 2\\ 0 & 0 & 1 \end{bmatrix} Tcw1=010100221,
已知世界坐标系中的坐标为 P w ( 2 , 2 ) P_w(2,2) Pw(2,2), 转换到相机坐标系下为 P c = T c w − 1 P w = ( 0 , 0 ) P_c =T^{-1}_{cw} P_w = (0,0) Pc=Tcw1Pw=(0,0)
已知世界坐标系中的坐标为 P w ( 3 , 3 ) P_w(3,3) Pw(3,3), 转换到相机坐标系下为 P c = T c w − 1 P w = ( 1 , − 1 ) P_c =T^{-1}_{cw} P_w = (1,-1) Pc=Tcw1Pw=(1,1)
反之,已知相机坐标系中的坐标为 P c ( 0 , 0 ) P_c(0,0) Pc(0,0), 转换到相机坐标系下为 P w = T c w P c = ( 2 , 2 ) P_w =T_{cw} P_c = (2,2) Pw=TcwPc=(2,2)

这篇关于位姿估计和坐标系变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040583

相关文章

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i

数据集 3DPW-开源户外三维人体建模-姿态估计-人体关键点-人体mesh建模 >> DataBall

3DPW 3DPW-开源户外三维人体建模数据集-姿态估计-人体关键点-人体mesh建模 开源户外三维人体数据集 @inproceedings{vonMarcard2018, title = {Recovering Accurate 3D Human Pose in The Wild Using IMUs and a Moving Camera}, author = {von Marc

数据集 Ubody人体smplx三维建模mesh-姿态估计 >> DataBall

Ubody开源人体三维源数据集-smplx-三维建模-姿态估计 UBody:一个连接全身网格恢复和真实生活场景的上半身数据集,旨在拟合全身网格恢复任务与现实场景之间的差距。 UBody包含来自多人的现实场景的1051k张高质量图像,这些图像拥有2D全身关键点、3D SMPLX模型。 UBody由国际数字经济学院(IDEA)提供。 (UBody was used for mesh r

005:VTK世界坐标系中的相机和物体

VTK医学图像处理---世界坐标系中的相机和物体 左侧是成像结果                                                    右侧是世界坐标系中的相机与被观察物体 目录 VTK医学图像处理---世界坐标系中的相机和物体 简介 1 在三维空间中添加坐标系 2 世界坐标系中的相机 3 世界坐标系中vtkImageData的参数 总结:

点云数据常见的坐标系有哪些,如何进行转换?

文章目录 一、点云坐标系分类1. 世界坐标系2. 相机坐标系3. 极坐标系4. 笛卡尔坐标系(直角坐标系):5. 传感器坐标系6. 地理坐标系 二、坐标系转换方法1. 地理坐标系与投影坐标系之间的转换2. 投影坐标系与局部坐标系之间的转换3. 局部坐标系与3D模型坐标系之间的转换4. 相机坐标系与其他坐标系之间的转换5. 传感器坐标系与其他坐标系之间的转换 三、坐标系转换工具 一

【数字信号处理】一文讲清FFT(快速傅里叶变换)

目录 快速傅里叶变换(Fast Fourier Transform,FFT)FFT的背景快速傅里叶变换(Fast Fourier Transform,FFT)DFT的数学表达实际计算重要性和应用频谱泄露、频谱混叠奈奎斯特采样定理参考链接 快速傅里叶变换(Fast Fourier Transform,FFT) FFT的背景 1、为什么要时域→频域频率?50Hz+频率120Hz

傅里叶变换家族

禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码

齐次变换矩阵的原理与应用

齐次变换矩阵的原理与应用 通过齐次变换矩阵,可以描述机械臂末端执行器(法兰)在三维空间中的平移和旋转操作。该矩阵结合了旋转和平移信息,用于坐标变换。 1. 齐次变换矩阵的基本形式 一个齐次变换矩阵 T是一个 4x4 矩阵,表示刚体的旋转和平移: T = [ R t 0 1 ] = [ r 11 r 12 r 13 x r 21 r 22 r 23 y r 31 r 32 r 33 z 0

MATLAB分析图像的离散余弦变换(DCT)

1. MATLAB的介绍以及所需函数的说明:  1.1 MATLAB  MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks 公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设

PyTorch Demo-4 : 数据变换Transforms

Transforms的函数有很多,每次都是直接copy已有的代码,但是不知道具体是什么样子,在这里记录一下 Transforms常用方法的具体说明参考链接1,链接2,或者官方文档。 原始图像采用图像处理经典的Lena: Python代码 from PIL import Imagefrom torchvision import transforms as tfimport ma