文章目录
前言
这里主要归纳下对第三讲里面3.6-3.7和普通的习题部分。
一、第三讲3.6-3.7实践部分
1.useGeometry项目
这里没遇到什么问题,直接运行就可以了。
2.coordinateTransform项目
这里也是一样的,直接运行就可以了。这里主要先将该点的坐标转换到世界坐标系,然后再通过旋转矩阵转化到小萝卜二号坐标系下。
3.plotTrajectory项目
这里开始出现问题了,报错说找不到pangolin.h的包
执行了下列指令:
git clone https://github.com/stevenlovegrove/Pangolin
cd Pangolin
mkdir build
cd build
cmake..
make
cmake…中间可能会报错说缺少glew之类的,用sudo apt install libglew-dev安装上就好,然后就好了。
这时编译项目,会报了个警告说没有文件名和最小运行版本。
增加了项目名称和最小运行版本后解决了警告。然而编译通过后运行还是报错
找不到轨迹文件,这里是因为地址的问题,把代码里的地址改成trajectory.txt对应的地址就好了。
大功告成。
4.visualizeGeometry项目
这里给了个惊喜,因为高博居然把如何安装pangolin的教程放在了这里,我看了下教程,基本就是我们刚刚的步骤:
git clone https://github.com/stevenlovegrove/Pangolin
sudo apt install libglew-dev
cd Pangolin
mkdir build
cd build
cmake..
make
只是顺序有点变化,但还额外多了另外两步很重要的步骤:
sudo make install
ldconfig
查了一下,第一句是安装了相应的动态库,而ldconfig命令的作用主要是在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库,进而创建出动态装入程序(ld.so)所需的连接和缓存文件,这两句非常重要
但是把这两步补完后我编译项目还是报如下的错误:
这里有人觉得是没有链接到对应的库,然后在Cmakelist.txt文件中补了很多语句,经过我的认真分析后,主要是这些人没有执行ldconfig,因此安装的库没有更新到查找列表中,而上面这个错误主要是是引用的一些东西c++标准为c++14,而对应Cmakelist.txt文件中为c++11,所以将CMakeList.txt中: -std=c++11改为-std=c++14即可。
果然一番操作下来,我的代码就跑起来了。看到很多教程都教人配置这个配置那个,十分复杂,我感觉很多时候是因为没有仔细去阅读高博的txt文件,照那个教程只需要修改这里的-std就可以了。当然他的文件名也没什么提示,所以很容易被忽略,而且plotTrajectory项目中就要用到Pangolin了,在visualizeGeometry项目中才来教怎么安装和配置的确也是晚了点。
总而言之,按照高博的教程+修改-std,可以很快把Pangolin安装并将对应的代码运行起来。
参考资料:
1、Pangolin报错
2、ldconfig命令
二、第三讲习题部分
1.验证旋转矩阵是正交矩阵
这个之前在看3.2的时候我就自己纯手算验证过。具体可见SLAM学习记录里面的2.1,这里不再赘述。
3.验证四元数旋转点的结果是虚四元数
证明:单位四元数对点进行旋转的公式为 p ’ = q p q − 1 p^’=qpq^{-1} p’=qpq−1
可设 p = x b i + y b j + z b k , q = s a + x a i + y a j + z a k ,则 q − 1 = q ∗ = s a − x a i − y a j − z a k p = x_bi+y_bj+z_bk,q = s_a+x_ai+y_aj+z_ak,则q^{-1}=q^{*}=s_a-x_ai-y_aj-z_ak p=xbi+ybj+z