从零到一:在Ubuntu上部署GTSAM因子图工具箱的完整指南
1. 环境准备打造GTSAM的温床第一次接触GTSAM时我像大多数开发者一样被各种依赖项搞得晕头转向。后来发现只要把基础环境搭好后续的安装就像搭积木一样顺理成章。这里我推荐使用Ubuntu 20.04 LTS版本不仅因为它的长期支持特性更因为GTSAM社区对这个版本的支持最完善。先说说硬件准备。虽然GTSAM对硬件要求不高但如果你打算处理大规模因子图比如城市级SLAM问题建议至少准备16GB内存。我在开发自动驾驶感知算法时就曾因为8GB内存不够用而不得不中途升级配置。虚拟机方案确实方便但直接安装双系统性能会更好特别是需要调用MKL数学库时。安装Ubuntu时有个小技巧分区时单独给/home分配大些的空间。有次我默认安装后编译大型数据集时才发现根目录空间不足不得不重新分区。另外记得勾选安装第三方软件选项这样能自动装上常用的显卡驱动和编解码器。2. 依赖安装构建GTSAM的基石2.1 基础依赖安装打开终端我们先来场依赖大扫除。这些命令我用了不下二十次保证靠谱sudo apt-get update sudo apt-get install -y build-essential cmake libboost-all-dev libtbb-dev这里有个坑要注意不同版本的GTSAM对Boost要求不同。比如GTSAM 4.2需要Boost 1.65而最新版可能需要更高版本。有次我用了Ubuntu默认的Boost 1.58编译时各种报错折腾半天才发现是版本问题。2.2 数学库的选择GTSAM支持多种数学后端实测下来Intel MKL性能最好。安装MKL时我建议用官方提供的APT仓库wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB sudo sh -c echo deb https://apt.repos.intel.com/oneapi all main /etc/apt/sources.list.d/oneAPI.list sudo apt-get update sudo apt-get install -y intel-oneapi-mkl装完后别忘了设置环境变量这个步骤很多教程都漏掉了source /opt/intel/oneapi/mkl/latest/env/vars.sh3. MATLAB环境配置3.1 MATLAB安装要点如果你需要MATLAB接口做SLAM的同行基本都需要建议安装R2020b或更新版本。下载ISO镜像后挂载安装时要注意sudo mkdir /media/matlab sudo mount -o loop MatlabR2020b_Linux.iso /media/matlab cd /media/matlab sudo ./install安装向导中一定要勾选符号计算工具箱和MATLAB编译器。我有次漏装了编译器结果生成工具箱时各种报错重装了三次才找到原因。3.2 关键头文件准备这是最容易出错的一步。MATLAB的三个关键头文件必须复制到正确位置cp /usr/local/MATLAB/R2020b/extern/include/{matrix.h,tmwtypes.h,mex.h} ~/gtsam-4.2a9/我曾经因为路径中有空格比如MATLAB R2020b导致复制失败建议安装MATLAB时使用无空格路径。另外如果找不到这些文件可能是你没用管理员权限安装MATLAB。4. GTSAM编译与安装4.1 源码准备现在从GitHub下载GTSAM源码。我习惯用特定版本而非master分支这样更稳定wget https://github.com/borglab/gtsam/archive/refs/tags/4.2a9.zip unzip 4.2a9.zip cd gtsam-4.2a9 mkdir build cd build4.2 CMake配置技巧这是最关键的一步配置不当会导致后续各种问题。我的万能配置模板cmake -DGTSAM_BUILD_EXAMPLES_ALWAYSOFF \ -DGTSAM_BUILD_TESTSOFF \ -DGTSAM_BUILD_TIMINGOFF \ -DGTSAM_BUILD_UNSTABLEOFF \ -DGTSAM_WITH_EIGEN_MKLON \ -DGTSAM_USE_SYSTEM_EIGENOFF \ -DEXAMPLES_BUILD_MATLAB_TOOLBOXON \ -DGTSAM_TOOLBOX_INSTALL_PATH/usr/local/gtsam_toolbox ..特别注意如果不需要MATLAB接口把EXAMPLES_BUILD_MATLAB_TOOLBOX设为OFF能大幅加快编译速度。但如果你像我一样要做SLAM算法验证这个选项必须开启。4.3 编译优化开始编译前先看看你的CPU核心数nproc然后用-j参数并行编译我的16核机器上这样用make -j16第一次编译大概需要15-30分钟取决于机器性能。如果遇到内存不足可以减小-j后面的数字。我见过最奇葩的错误是编译时内存不够系统开始用swap结果编译了整整三小时。5. 安装与权限处理编译完成后安装到系统目录sudo make install这里经常遇到权限问题。如果出现permission denied可以先用sudo chown -R $USER /usr/local获取权限或者指定安装到用户目录cmake -DCMAKE_INSTALL_PREFIX~/local ..安装完成后需要让系统找到库文件echo export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc6. MATLAB工具箱集成6.1 工具箱生成在build目录下执行make matlab这个步骤会生成gtsam_toolbox文件夹。我建议把它放在固定位置sudo mv gtsam_toolbox /usr/local/6.2 MATLAB路径配置启动MATLAB在命令窗口输入addpath(/usr/local/gtsam_toolbox); savepath;为了避免每次更新都要重新配置我习惯写个startup.m脚本放在MATLAB的启动路径function startup() addpath(/usr/local/gtsam_toolbox); disp(GTSAM toolbox loaded successfully!); end7. 验证安装7.1 C测试在build目录下运行示例./examples/LocalizationExample如果看到机器人轨迹输出说明核心库工作正常。我第一次运行时遇到libgtsam.so找不到的问题原因是忘了设置LD_LIBRARY_PATH。7.2 MATLAB接口测试在MATLAB中尝试import gtsam.* pose Pose2(0.5, 0.0, pi/2); disp(pose);如果能看到位姿输出恭喜你不过我第一次运行时遇到了mex文件错误原因是MATLAB版本与编译环境不匹配重装MATLAB才解决。8. 常见问题解决8.1 版本冲突最常见的错误是版本不匹配。我的检查清单Boost ≥ 1.65CMake ≥ 3.0g ≥ 7.0MATLAB R2018b8.2 内存不足编译大型项目时可能遇到。我的解决方案关闭所有其他程序增加swap空间使用make -j4减少并行任务8.3 MATLAB接口失效如果MATLAB找不到工具箱检查路径是否正确确认gtsam_toolbox文件夹包含.m和.mex文件尝试重新生成工具箱9. 进阶配置9.1 Python接口GTSAM也支持Python绑定安装方法cmake -DGTSAM_BUILD_PYTHONON .. make python cd python pip install -e .9.2 自定义优化在CMake配置时可以开启高级选项GTSAM_BUILD_WITH_MARCH_NATIVEON启用CPU特定优化GTSAM_THROW_CHEIRALITY_EXCEPTIONOFF关闭异常检查提升性能GTSAM_TANGENT_PREINTEGRATIONON启用新的预积分方法10. 实际应用建议在机器人项目中我习惯这样初始化GTSAM#include gtsam/geometry/Pose2.h #include gtsam/nonlinear/LevenbergMarquardtOptimizer.h gtsam::NonlinearFactorGraph graph; gtsam::Values initialEstimate; // 添加因子和初始值... gtsam::LevenbergMarquardtOptimizer optimizer(graph, initialEstimate); gtsam::Values result optimizer.optimize();对于MATLAB用户等效代码更简洁graph NonlinearFactorGraph; initial Values; % 添加因子... optimizer LevenbergMarquardtOptimizer(graph, initial); result optimizer.optimize();记住GTSAM的强大之处在于因子图的灵活性。在我的SLAM项目中通过自定义因子实现了毫米级定位精度。刚开始可能觉得复杂但熟悉后你会发现它比传统优化库高效得多。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2519483.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!