Eigen:Eigen 是 C++ 的一个开源线性代数库,主要是进行矩阵运算,对导航算法相当关键,要知道导航算法基本都是矩阵计算。除了基本的矩阵计算之外,支持四元数、旋转矩阵,C++ 写的导航定位的开源代码中基本都是用 Eigen。使用 Eigen 有个麻烦的地方就在于难以调试,经常报错了,你找不到问题在哪,尤其是一口气写了一大段。有的错误写出来的时候编译器就会提示你错了,有的编译的时候就报错并且告诉你哪一行出错了,这两种都还比较友好;麻烦的是的是有的编译的时候报错不告诉你哪一行错,有的编译能过,运行到那一行才出错。所以如果你对 Eigen 不是很熟,建议写两行就编译一下,写几句就单步调试一下,要不然写多了不好调试。
Gflags:Gflags 是一个由 Google 开发并用于 C++ 的命令行参数管理库,它为C++开发者提供了一种高效、简洁的方式来处理命令行参数,从而简化了程序的配置和使用过程。提供一种声明式的方式来定义、解析和检查命令行标志。这些命令行标志(或称为“参数”)允许程序员在程序执行时通过命令行参数传递配置信息,从而控制程序的行为,例如设置日志级别、指定配置文件位置等。通过 gflags,用户可以在运行程序时方便地临时修改输入参数,如果没有指定参数,则使用默认参数。例如,一个可执行程序可以通过命令行参数来指定其连接的IP地址和端口号,或者使用默认设置。
Glog:Glog,即 Google Logging,是一个由 Google 开发的、基于程序级记录日志信息的C++库。这个库的设计是为了在应用程序中实现高性能、灵活和可定制的日志记录。采用了高效的缓冲机制和异步写入日志的方式,使得日志记录操作不会阻塞主程序的执行;提供了丰富的配置选项,允许开发者通过命令行参数或配置文件来定制日志输出的行为,包括指定要记录的日志级别、日志文件的路径、是否同时输出到标准错误流等;Glog 支持多种日志级别,包括 INFO、WARNING、ERROR和FATAL;此外,Glog还具有一些其他的功能,如条件中止程序(通过丰富的条件判定宏来预设程序终止条件)、异常信号处理(自定义异常处理过程)以及系统级日志记录等。
Ceres-Solver:Ceres Solver是一个 Google 开源的C++库,用于解决具有边界约束的非线性最小二乘问题和一般无约束优化问题,是图优化程序使用最多的库,Ceres Solver的依赖项包括 CMake、Eigen、glog和gflags,这些都是必要的。还有一些可选的依赖项,如SuiteSparse、BLAS and LAPACK 以及 CUDA。