三维空间刚体运动
主要目标:
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,

最低0.47元/天 解锁文章
990

被折叠的 条评论
为什么被折叠?



