天天看点

视觉SLAM中相机位姿的多种描述

SLAM中一个重要的问题就是求取的相机位姿,位姿的描述有多种方式,本文的目的是整理一下能用到的各种位姿的描述方式。

首先要确定相机位姿是什么。位姿即位置和姿态,是刚体在空间中的位置和它自身的姿态,相机的位姿即相机在空间中的位置和相机的朝向。相机的位姿可以看做相机从原始位置到当前位置的变换,包含一个平移变换和一个旋转变换,先旋转再平移。这一变换可以分开描述也可以一起描述,分开描述即将旋转和平移分离开看成两个过程,一起描述即将旋转和平移看成一个完整的过程。

一、分别表述旋转和平移

平移较为简单,由一个平移向量表示。举例:沿X轴平移1

Eigen::Vector3d  t ( 1, 0, 0 );

旋转变换的表示则有很多中形式。举例:沿Z轴旋转45°

1、旋转向量,使用AngleAxis

Eigen::AngleAxisd  angle ( M_PI / 4,  Eigen::Vector3d ( 0, 0, 1 ));

AngleAxis底层不是Matrix,但是因为重载了运算符,可以进行矩阵运算

2、旋转矩阵

Eigen::Matrix3d  R;

3、四元数表示旋转

Eigen::Quaterniond  q_R ( R );

Eigen::Quaterniond  q_angle ( angle );

4、李群SO( 3 )表示旋转

Sophus::SO3 SO3_R ( R );

Sophus::SO3 SO3_q ( q );

Sophus::SO3 SO3_v ( 0, 0, M_PI/4 );

二、把平移、旋转看成一个整的过程

1、变换矩阵

Eigen::Isometry3d  T = Eigen::Isometry3d::Identity();

Isometry3d称为3d,但实际上是4×4的矩阵。变换矩阵的赋值由两种方法,一是按照4×4的矩阵进行赋值,另一种方法是用旋转向量和平移向量进行赋值。

T . rotate ( angle );

T . pretranslate ( t );

2、李群SE( 3 )表示变换矩阵

Sophus::SE3  SE3_Rt ( R, t );

Sophus::SE3  SE3_qt ( q, t );

继续阅读