当前位置: 首页 > news >正文

高翔博士slambook2 ch9 编译运行笔记

一、主要内容

ch9讲如何把多个相机位姿和大量三维地图点放在一起优化,使整体重投影误差最小。Bundle Adjustment,简称BA,光束法平差 / 捆集调整,是视觉SLAM和SFM中非常重要的后端优化方法。

在视觉SLAM中,通常有多个相机位姿、多个三维地图点、很多图像观测,这些数据一开始都是有误差的,因此用BA来同时调整相机位姿和三维地图点,使它们投影到图像上的位置尽量接近真实观测位置。

min Σ || u_observed - u_projected ||²

BA 是一个很大的非线性最小二乘问题。

二、安装依赖

下载 Ceres 2.1.0 + Eigen 3.3.7

最重要的放在最前面,我在编译ch9代码时掉坑里了,一直报错Eigen的版本号对不上,要求版本3.3.7,结果读出来是空值。

-- Found required Ceres dependency: absl version 20240116 in /usr/local/lib/cmake/absl CMake Error at CMakeLists.txt:11 (Find_Package): Found package configuration file: /usr/local/lib/cmake/Ceres/CeresConfig.cmake but it set Ceres_FOUND to FALSE so package "Ceres" is considered to be NOT FOUND. Reason given by package: Found Eigen dependency, but the version of Eigen found () does not exactly match the version of Eigen Ceres was compiled with (3.3.7). This can cause subtle bugs by triggering violations of the One Definition Rule. See the Wikipedia article http://en.wikipedia.org/wiki/One_Definition_Rule for more details

于是我apt重装了Eigen,fail。

于是我源码重装了Eigen,指定版本3.3.7,fail。(这里已经确定了Eigen版本正确,就是3.3.7)

cd ~/Desktop rm -rf eigen git clone https://gitlab.com/libeigen/eigen.git cd eigen git checkout 3.3.7 rm -rf build mkdir build cd build cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local sudo make install #确认eigen版本 grep -R "EIGEN_WORLD_VERSION\|EIGEN_MAJOR_VERSION\|EIGEN_MINOR_VERSION" /usr/local/include/eigen3/Eigen/src/Core/util/Macros.h

报错如下

Found package configuration file: /usr/local/lib/cmake/Ceres/CeresConfig.cmake but it set Ceres_FOUND to FALSE so package "Ceres" is considered to be NOT FOUND. Reason given by package: Found Eigen dependency, but the version of Eigen found () does not exactly match the version of Eigen Ceres was compiled with (3.3.7). This can cause subtle bugs by triggering violations of the One Definition Rule. See the Wikipedia article http://en.wikipedia.org/wiki/One_Definition_Rule for more details -- Configuring incomplete, errors occurred!

找AI看了下,是因为Ceres是之前编译的,和当前的Eigen版本没有绑定,于是我重新编译了2.2.1版本的Ceres。

#安装依赖 sudo apt update sudo apt install -y build-essential cmake git sudo apt install -y libsuitesparse-dev sudo apt install -y libgoogle-glog-dev libgflags-dev cd ~/Desktop rm -rf ceres-solver #下载Ceres源码 + 指定版本2.1.0 git clone https://github.com/ceres-solver/ceres-solver.git cd ceres-solver git checkout 2.1.0 #用eigen3.3.7重新编译 rm -rf build mkdir build cd build cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DEigen3_DIR=/usr/local/eigen-3.3.7/share/eigen3/cmake \ -DCMAKE_PREFIX_PATH=/usr/local/eigen-3.3.7 \ -DBUILD_TESTING=OFF \ -DBUILD_EXAMPLES=OFF \ -DMINIGLOG=OFF \ -DCMAKE_INSTALL_PREFIX=/usr/local make -j$(nproc) sudo make install sudo ldconfig

三、编译代码

前面的依赖问题解决了以后,就可以开始编译ch9的代码了。

cd ~/Desktop/slambook2/ch9 rm -rf build mkdir build cd build cmake .. \ -DEigen3_DIR=/usr/local/eigen-3.3.7/share/eigen3/cmake \ -DCeres_DIR=/usr/local/lib/cmake/Ceres \ -DSophus_DIR=/usr/local/lib/cmake/Sophus \ -DCMAKE_PREFIX_PATH="/usr/local/eigen-3.3.7;/usr/local" make -j$(nproc)

编译结果如图:

四、运行实例

查看生成的exe文件

find . -type f -executable

结果如图:

4.1 运行Ceres BA

ch9程序的运行一般需要输入BAL数据集文件,在ch9文件夹下。

./bundle_adjustment_ceres ../problem-16-22106-pre.txt

运行结果如图

4.2 运行g2o BA

./bundle_adjustment_g2o ../problem-16-22106-pre.txt

运行结果如图

五、总结

ch9 开始进入SLAM后端优化,将前面的位姿、地图点、投影模型、优化方法全部结合起来,做全局或局部优化。

http://www.jsqmd.com/news/941062/

相关文章:

  • 浙江国际物流服务选型指南 适配外贸全场景需求 - 奔跑123
  • 从 RFdiffusion 到 RFdiffusion3:AI 蛋白质设计模型的三次跃迁
  • 人机交互设计指南:构建可信AI产品的四大核心原则与实战模式
  • 2026 深度测评|视频去水印软件实测对比,手机电脑热门工具全盘点
  • 不只是显示:用STM32的OLED和串口打造智能小车‘仪表盘’,实时监控PID参数与OpenMV数据
  • html零基础入门指南:用快马平台生成代码示例快速掌握标签语法
  • WeChatPad终极指南:快速实现微信平板模式,轻松解锁双设备同时在线
  • 4.3 模型评估与调参:避免过拟合
  • Visual Studio图像调试器开发指南:从原理到实现
  • 保姆级教程:在银河麒麟V10服务器上配置bond双网卡(附7种模式详解与选型建议)
  • 人脸识别、用户分群...Fisher判别在业务中真的过时了吗?对比XGBoost与LDA实战案例
  • WPF大屏看板源码工程:含完整目录结构、双素材包与调试配置
  • 如何在10分钟内完成BepInEx游戏插件框架安装:完整指南
  • 告别Keil!用CLion无缝接手同事的STM32项目(附CubeMX迁移文件清单)
  • Agent性能评测基准深度调研:AgentBench、WebArena及其局限
  • 新手必看:用逻辑分析仪抓取杰发AC7840的CAN总线波形,一步步教你分析数据帧
  • 微软Project Silica:用石英玻璃实现千年数据存储的技术解析
  • 效率提升:无需全网搜索下载,用快马AI即刻生成专属在线图片处理工具
  • 保姆级教程:用yum downloadonly为银河麒麟V10 ARM系统制作Docker离线安装包
  • 实战指南:基于快马平台,快速开发一个电商智能客服AI Agent
  • 连续长度测量型菲林尺介绍
  • Claude项目计划书黄金结构:1份模板+6个数据锚点+12项必须签署的法律附件(限2024Q3内部流出版)
  • AI智能体与软考架构设计深层关联(4)
  • MPC-BE深度解析:Windows平台开源媒体播放器的架构设计与工程实践
  • STM32L431电池供电场景下的双路低功耗唤醒工程:RTC定时+按键即时响应
  • 开放软件设计:从互操作性到科学工作流构建的实践指南
  • 保姆级教程:用Pandas+Matplotlib搞定公交刷卡数据分析(从数据清洗到可视化)
  • 城市数字文化空间建设平台技术方案
  • 从杰卡德相似度到最小哈希:构建海量数据去重与相似搜索系统
  • 3步解决城通网盘下载难题:ctfileGet直连地址获取终极指南