视觉slam十四讲实践部分记录——ch2、ch3

ch2

一、使用g++编译.cpp为可执行文件并运行(P30)

g++ helloSLAM.cpp

 ./a.out运行

二、使用cmake编译

mkdir build
cd build
cmake ..
make

CMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路径。我们需要彻底清理并重新开始。 

详细解决步骤

步骤1:彻底清理源代码目录和构建目录

        删除源代码目录中的 CMakeCache.txt 文件(如果存在):

rm /home/huang/slam/learn/slambook2/ch2/CMakeCache.txt

        删除整个构建目录

rm -rf /home/huang/slam/learn/slambook2/ch2/build
步骤2:重新创建构建目录并运行 cmake

        重新创建 build 文件夹

mkdir /home/huang/slam/learn/slambook2/ch2/build

        进入 build 文件夹:

cd /home/huang/slam/learn/slambook2/ch2/build

        运行 cmake

cmake ..

详细解释

删除 CMakeCache.txt 文件:这个文件存储了上次运行 cmake 时的配置信息,如果路径发生变化,需要删除它以避免冲突。

删除整个构建目录:确保没有残留的文件或配置信息,避免干扰新的构建过程。

重新创建构建目录并运行 cmake:确保在新的、干净的环境中重新配置项目。

 

cmake 的作用

cmake 是一个跨平台的构建系统生成器,它根据 CMakeLists.txt 文件生成适合特定构建系统的配置文件(如 Makefile)。

在运行 cmake 后,build 目录中会生成 Makefile 和其他必要的配置文件。

make 的作用

make 是一个构建工具,它根据 Makefile 中的规则来编译源代码,生成目标文件(如 .o 文件),并最终链接生成可执行文件或库。

make 会自动解析 Makefile 中的依赖关系,确保只有在相关文件发生变化时才重新编译。

ch3

一、安装Eigen库(P51)

sudo apt-get update
sudo apt-get install libeigen3-dev

二、查找Eigen库

sudo uodatedb
locate eigen3

sudo updatedb

这个命令会更新 locate 数据库。locate 数据库是一个包含系统中所有文件路径的索引,用于快速查找文件。

使用 sudo 是因为更新数据库需要管理员权限。

locate eigen3

这个命令会搜索系统中所有包含 “eigen3” 的文件路径。它会返回一个列表,显示所有匹配的文件路径。

 三、编译并运行eigenMatrix.cpp

有多个库就locate要用的那个,修改CMakeLists.txt中的地址。(慎用rm -rf,因为我有多个eigen库,版本不同,没细想就用rm -rf删了很多,不知道之后运行其他代码文件会不会报错。orz..)

根据下载的库的位置修改:

 运行结果:

 注意是在useEigen的文件夹中build:

四、Eigen几何模块

mkdir build

cd build

cmake ..

make

坐标变换

1.cmake..警告:

CMakeLists.txt 文件中存在一些问题。

1>缺少 project() 命令

2>缺少 cmake_minimum_required() 命令

解决方法:

修改CMakeLists.txt:

cmake_minimum_required(VERSION 3.16)
project(MyProject)

# 包含 Eigen 的头文件目录
include_directories("/usr/local/include/eigen3")

# 添加 coordinateTransform 可执行文件
add_executable(coordinateTransform coordinateTransform.cpp)

# 查找 Pangolin 库
find_package(Pangolin REQUIRED)
include_directories(${Pangolin_INCLUDE_DIRS})

# 添加 plotTrajectory 可执行文件
add_executable(plotTrajectory plotTrajectory.cpp)
target_link_libraries(plotTrajectory ${Pangolin_LIBRARIES})

然后重新编译

2.无法找到文件:

huang@huang-System-Product-Name:~/slam/learn/slambook2/ch3/examples/build$ ./plotTrajectory cannot find trajectory file at ./examples/trajectory.txt

解决方法:

在plotTrajectory.cpp中:

修改第10行为绝对路径:

运行:

./coordinateTransform

可视化演示(显示运动轨迹)

编译失败 :

从错误信息来看,编译器无法识别 Isometry3d 类型,这通常是因为没有正确包含 Eigen 的相关头文件。 

解决方法:

plotTrajectory.cpp 文件中,添加头文件:

#include <Eigen/Geometry>

运行:

./plotTrajectory

显示相机的位姿

 左侧实时显示相机位姿对应旋转矩阵、平移、欧拉角和四元数。

1. 旋转矩阵

    旋转矩阵是一个 3×3 的正交矩阵,用于表示相机坐标系相对于世界坐标系的旋转。旋转矩阵 R 满足 RTR=I 和 det(R)=1,其中 I 是单位矩阵,det 表示行列式。

2. 平移向量

    平移向量是一个 3 维向量,表示相机坐标系相对于世界坐标系的平移。通常与旋转矩阵一起使用,可以表示为一个 4×4 的齐次变换矩阵:

其中 R 是旋转矩阵,t 是平移向量。

3. 欧拉角

    欧拉角是三个角度的集合,用于描述相机坐标系相对于世界坐标系的旋转。欧拉角有多种表示方式,如 ZYX、XYZ 等,每种方式对应不同的旋转顺序。欧拉角易于直观理解,但存在万向节死锁问题,即在某些特定角度下,两个轴的旋转会重合,导致无法表示某些旋转。

4. 四元数

    四元数是一个 4 维向量,用于表示旋转。四元数 q 可以表示为 q=w+xi+yj+zk,其中 w,x,y,z 是实数,i,j,k 是虚数单位。四元数的模长为 1,即 w2+x2+y2+z2=1。四元数可以避免万向节死锁问题,且在插值和组合旋转时更加方便。

转换关系

旋转矩阵到欧拉角:可以通过旋转矩阵的元素计算出欧拉角。

旋转矩阵到四元数:可以通过旋转矩阵的迹和元素计算出四元数。

欧拉角到旋转矩阵:可以通过欧拉角的三个角度计算出旋转矩阵。

欧拉角到四元数:可以通过欧拉角的三个角度计算出四元数。

四元数到旋转矩阵:可以通过四元数的元素计算出旋转矩阵。

四元数到欧拉角:可以通过四元数的元素计算出欧拉角。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容