视觉slam(1)

三维空间刚体运动

主要目标:
1.旋转矩阵,变换矩阵,四元数,欧拉角
2.掌握Eigen库的矩阵、几何模块的使用

旋转矩阵

我们找到了该空间的一组基,那么,任意向量a再这组基下就有一个坐标。
大部分3D程序使用右手系(3D Max),也有部分库使用左手系(unity)
坐标系间的欧式变换
世界坐标系和相机坐标系之间的转换:
要先得到该点针对机器人坐标系的坐标值,再根据机器人位姿变换到世界坐标系中,用一个矩阵T来描述他,我们称之为欧式变化
a’=Ra+t
先旋转后平移,R为旋转矩阵,t为平移矩阵
a1=R12a2+t12
R12是指“把坐标系2的向量变换到坐标系1中”,即从2到1的旋转矩阵
关于t12,它实际对应的是坐标系1原点指向坐标系2原点的向量,在坐标系1下取得坐标。

变换矩阵与齐次坐标
这是一个数学技巧,我们在一个三维向量的末尾添加1,将其变成了四维向量,称为齐次坐标。我们把旋转和平移写在一个矩阵里,矩阵T称为变换矩阵。w
R t
0 1

实践Eigen

.cpp文件

#include <iostream>

using namespace std;

#include <ctime>
// Eigen 核心部分
#include <Eigen/Core>
// 稠密矩阵的代数运算(逆,特征值等)
#include <Eigen/Dense>

using namespace Eigen;

#define MATRIX_SIZE 50

/****************************
* 本程序演示了 Eigen 基本类型的使用
****************************/

int main(int argc, char **argv) {
   
   
  // Eigen 中所有向量和矩阵都是Eigen::Matrix,它是一个模板类。它的前三个参数为:数据类型,行,列
  // 声明一个2*3的float矩阵
  Matrix<float, 2, 3> matrix_23;

  // 同时,Eigen 通过 typedef 提供了许多内置类型,不过底层仍是Eigen::Matrix
  // 例如 Vector3d 实质上是 Eigen::Matrix<double, 3, 1>,即三维向量
  Vector3d v_3d;
  // 这是一样的
  Matrix<float, 3, 1> vd_3d;

  // Matrix3d 实质上是 Eigen::Matrix<double, 3, 3>
  Matrix3d matrix_33 = Matrix3d::Zero(); //初始化为零
  // 如果不确定矩阵大小,可以使用动态大小的矩阵
  Matrix<double, Dynamic, Dynamic> matrix_dynamic;
  // 更简单的
  MatrixXd matrix_x;
  // 这种类型还有很多,我们不一一列举

  // 下面是对Eigen阵的操作
  // 输入数据(初始化)
  matrix_23 << 1, 2, 3, 4, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值