// // Created by qian on 19-7-16. // /* 相机位姿用四元数表示 q = [0.35, 0.2, 0.3, 0.1] x,y,z,w * 注意:输入时Quaterniond(w,x,y,z) W 在前!!! * 实现:输出四元素对应的旋转矩阵,旋转矩阵的转置, * 旋转矩阵的逆矩阵,旋转矩阵乘以自身的转置,验证旋转矩阵的正交性 * Vector3.normalized的特点是当前向量是不改变的并且返回一个新的规范化的向量; * Vector3.Normalize的特点是改变当前向量,也就是当前向量长度是1 */ #include <iostream> #include <eigen3/Eigen/Core> #include <eigen3/Eigen/Dense> #include <iomanip> using namespace std; using namespace Eigen; int main(int argc, char** argv) { cout << "作业2:eigen运算" << endl; Quaterniond q = Quaterniond(0.1, 0.35, 0.2, 0.3).normalized();//初始化四元数,并归一化 cout << "归一化后的四元素矩阵:"<<endl << q.x()<<" "<<q.y()<<" "<<q.z()<<" "<<q.w()<< endl; Matrix3d matrix_T = q.toRotationMatrix(); cout << "四元数的旋转矩阵:" << endl << matrix_T << endl; Matrix3d matrix_transposeT = matrix_T.transpose(); cout << "旋转矩阵的转置:" << endl << matrix_transposeT << endl; Matrix3d matrix_invT = matrix_T.inverse(); cout << "旋转矩阵的逆矩阵:" << endl << matrix_invT << endl; Matrix3d matrix_T1 = matrix_T * matrix_transposeT; cout << "旋转矩阵乘以自身的转置:" << endl << matrix_T1 << endl; // 验证旋转矩阵的正交性用定义:直接计算 AA^T, 若 等于单位矩阵E, 就是正交矩阵 cout.setf(ios::fixed);//用定点格式显示浮点数; cout << "验证旋转矩阵的正交性:" << endl << fixed << setprecision(5) << matrix_T1<< endl;//setprecision(5):显示小数点后5位 cout.unsetf(ios::fixed);//关闭 cout << "matrix_T * matrix_transposeT 是单位矩阵,即旋转矩阵是正交矩阵"; return 0; }
cmake_minimum_required(VERSION 3.14) project(SlamPractice) #添加头文件 INCLUDE_DIRECTORIES(“usr/include/eigen3”) set(CMAKE_CXX_STANDARD 11) add_executable(SlamPractice main.cpp practice2.cpp)