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

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

(1) 已知相机坐标系在世界坐标系的位姿为:TcwT_{cw}Tcw, 世界坐标中的点 PwP_wPw, 那么相机坐标系的坐标为Pc=Tcw−1PwP_c = T^{-1}_{cw}P_wPc=Tcw1Pw
(2) 已知相机坐标系在世界坐标系的位姿为:TcwT_{cw}Tcw, 相机坐标中的点 PcP_cPc, 那么世界坐标系的坐标为Pw=TcwPcP_w = T_{cw}P_cPw=TcwPc

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

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

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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐