深蓝学院SLAM十四讲第二章作业

二、熟悉Eigen矩阵的运算
1.A是方阵,而且是可逆的方阵。
2.高斯消元主要用于求解线性方程组,也可以用来求解矩阵的秩,矩阵的逆。
原理是将方程组进行加减消元,然后求出未知数。
3.QR分解法是求一般矩阵全部特征值的最有效并广泛应用的方法。它是将矩阵分解成一个正规正交矩阵Q与上三角矩阵R,所以成为QR分解法。
A=QR
4.又称平方根法,是求解对称正定线性方程最常用的方法之一。
A=LLT
L是下三角矩阵,L×是L的共轭转置矩阵。
5.
eigenMatrix2.cpp的程序

#include<iostream>
#include<Eigen/Core>
#include<Eigen/Geometry>
const int SIZE=100;
using namespace std;
using namespace Eigen;
int main(){
        //AX=B
        Matrix<double, Dynamic, Dynamic>A;
        A=MatrixXd::Random(SIZE,SIZE);
        A=A.transpose()*A;
        Matrix<double, Dynamic,1>B;
        B=MatrixXd::Random(SIZE,1);
        Matrix<double, Dynamic,1>X;
        X=MatrixXd::Random(SIZE,1);
        X=A.llt().solve(B);
        cout<<"LLT result:\n"<<X<<endl;
        X=A.colPivHouseholderQr().solve(B);
        cout<<"QR result:\n"<<X<<endl;
        return 0;
}

CMakeLists.txt的程序

cmake_minimum_required(VERSION 2.8)
project(useEigen)

set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-O3")

# 添加Eigen头文件
include_directories("/usr/include/eigen3")
add_executable(eigenMatrix eigenMatrix.cpp)
add_executable(eigenMatrix2 eigenMatrix2.cpp)
add_executable(eigenMatrix3 eigenMatrix3.cpp)
add_executable(eigenMatrix4 eigenMatrix4.cpp)

深蓝学院SLAM十四讲第二章作业_第1张图片
三、几何运算练习.
coordinateTransform2.cpp的程序

#include <vector>
#include <algorithm>
#include <Eigen/Core>
#include <Eigen/Geometry>

using namespace std;
using namespace Eigen;

int main(int argc, char** argv) {
  Quaterniond q1(0.55, 0.3, 0.2, 0.2), q2(-0.1, 0.3, -0.7, 0.2);
  q1.normalize();
  q2.normalize();
  Vector3d t1(0.7, 1.1, 0.2), t2(-0.1, 0.4, 0.8);
  Vector3d p1(0.5,-0.1, 0.2);

  Isometry3d T1w(q1), T2w(q2);
  T1w.pretranslate(t1);
  T2w.pretranslate(t2);

  Vector3d p2 = T2w * T1w.inverse() * p1;
  cout << endl << p2.transpose() << endl;
  return 0;
}

CMakeLists.txt的程序

include_directories("/usr/include/eigen3")
#add_executable(coordinateTransform coordinateTransform.cpp)
add_executable(coordinateTransform2 coordinateTransform2.cpp)

find_package(Pangolin REQUIRED)
include_directories(${Pangolin_INCLUDE_DIRS})
add_executable(plotTrajectory plotTrajectory.cpp)
target_link_libraries(plotTrajectory ${Pangolin_LIBRARIES})

深蓝学院SLAM十四讲第二章作业_第2张图片
四、旋转的表达
深蓝学院SLAM十四讲第二章作业_第3张图片深蓝学院SLAM十四讲第二章作业_第4张图片
五、罗德里格斯公式的证明
深蓝学院SLAM十四讲第二章作业_第5张图片
深蓝学院SLAM十四讲第二章作业_第6张图片
六、四元数运算性质的验证
深蓝学院SLAM十四讲第二章作业_第7张图片
深蓝学院SLAM十四讲第二章作业_第8张图片
七、*熟悉C++11
深蓝学院SLAM十四讲第二章作业_第9张图片
范围for循环:有了类似于Java的简化的for循环,可以用于遍历数组,容器,string以及由begin和end函数定义的序列。
Lambda表达式:lambda表达式类似于JavaScript中的闭包,它可以用于创建并定义匿名的函数对象,以简化编程工作。语法:
[函数对象参数] (操作符重载函数参数) ->返回值类型{函数体}
auto自动类型推导:用于从初始化表达式中推断出变量的数据类型。
初始化方式变化:引入C++11之前,只有数组能使用初始化列表。C++11以后容器也能使用。
下一节:深蓝学院SLAM十四讲第三章作业

你可能感兴趣的:(视觉SLAM)