VINS-Mono配置记录 & 源码导读 & Modern C++ 实战指引

Ceres

要安装与现有的 Eigen 3.3.7CMake 3.16.3 兼容的 Ceres Solver,可以按照以下步骤操作:

1. 下载与 Eigen 3.3.7 兼容的 Ceres Solver

  • 根据 Eigen 版本和 Ceres Solver 的兼容性要求,推荐使用 Ceres Solver 1.14,因为它支持 Eigen 3.3.x。
  • 你已经下载了 Ceres Solver 1.14,因此无需重新下载。

2. 检查依赖

确保以下依赖已经安装:

sudo apt-get update
sudo apt-get install -y libgoogle-glog-dev libgflags-dev libatlas-base-dev libsuitesparse-dev

3. 配置 Ceres Solver 的编译选项

  1. 清理之前的构建:

    cd ~/autodl-tmp/ORB_SLAM3/Thirdparty/ceres-solver-1.14.0
    rm -rf build
    mkdir build
    cd build
    
  2. 配置编译:

    cmake .. -DEIGEN_INCLUDE_DIR=/usr/include/eigen3 -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
    

    解释:

    • -DEIGEN_INCLUDE_DIR=/usr/include/eigen3: 指定 Eigen 的安装路径。
    • -DBUILD_TESTING=OFF: 不构建测试。
    • -DBUILD_EXAMPLES=OFF: 不构建示例。

4. 编译 Ceres Solver

运行以下命令进行编译:

make -j$(nproc)

5. 安装 Ceres Solver

编译完成后安装:

sudo make install

6. 验证 Ceres Solver 的安装

通过以下方式确认安装:

ceres-solver-config.cmake

你应该会在 /usr/local/lib/cmake/Ceres 中看到 CeresConfig.cmake

注意事项

  • 如果 cmake 在其他地方找不到 Eigen,确保在编译 ORB_SLAM3 时使用 -DEIGEN_INCLUDE_DIR=/usr/include/eigen3
  • 如果还遇到问题,请检查其他依赖项(如 glog 和 gflags)是否正确安装。

完成以上步骤后,你的系统应该能成功安装与 Eigen 3.3.7 和 CMake 3.16.3 兼容的 Ceres Solver!

ROS

https://blog.csdn.net/weixin_39329788/article/details/119597419

下载这里的opencv和opencv_contrib
https://blog.csdn.net/weixin_39329788/article/details/119597419
然后解决make的报错,忽略xfeatures2d模块
cmake -D CMAKE_BUILD_TYPE=Release
-D CMAKE_INSTALL_PREFIX=/usr/local
-D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv_contrib-3.3.1/modules/
-DBUILD_opencv_xfeatures2d=OFF
..
make -j$(nproc)

VINS-Mono

参考下面的,终于跑起来了!
https://blog.csdn.net/weixin_39329788/article/details/119597419
https://blog.csdn.net/weixin_44417938/article/details/107294330
https://blog.csdn.net/weixin_44417938/article/details/107294330

源码导读 & Modern C++ 实战指引

在服务器复现

git clone git@github.com:HKUST-Aerial-Robotics/VINS-Mono.git

一、项目整体结构(源码导读)

VINS-Mono/
├── src/
│   ├── feature_tracker/        # 前端特征跟踪
│   ├── imu_process/            # IMU 数据处理
│   ├── estimator/              # 滑窗优化器 + 状态估计
│   ├── pose_graph/             # 回环检测与图优化(可选)
│   ├── utility/                # 参数读取、工具类
│   └── main/                   # ROS 节点入口

各模块 .cpp 文件职责

文件 作用 Modern C++ 技巧
feature_tracker.cpp 前端图像处理,跟踪角点,生成特征观测数据 lambda、vector操作
imu_process.cpp IMU 预积分,去除加速度偏差、插值 Eigen、shared_ptr
estimator.cpp 核心优化器,滑窗 BA(Ceres),状态传播 类结构、智能指针、模板
visualization.cpp 发布轨迹、特征点、IMU信息给 RViz ROS Publisher、stringstream
pose_graph.cpp 回环闭合(用到了 DBoW2) 多线程、std::thread
parameters.cpp 参数加载(YAML) + 传感器初始化 map、ifstream、string处理
main.cpp ROS 节点入口,发布订阅各个模块 std::thread、命名空间

二、调用流程图

Sensor Input → 预处理 → 优化 → 可视化/输出

[main.cpp]
     |
     |---> readParameters() → 解析配置文件
     |
     |---> FeatureTracker (前端) ← feature_tracker.cpp
     |
     |---> IMUProcessor        ← imu_process.cpp
     |
     |---> Estimator (滑窗BA) ← estimator.cpp
     |
     |---> Pub via ROS        ← visualization.cpp

三、现代 C++ 关键用法提取

特性 用法示例 出现位置
auto, lambda 简化遍历与回调写法 feature_tracker.cpp
std::shared_ptr 管理 IMU buffer、图像数据 多处
std::thread 异步图像处理 & 回环 pose_graph.cpp, main.cpp
std::map, std::unordered_map 存储轨迹、frame ID parameters.cpp, estimator.cpp
Eigen 矩阵表达 所有状态量管理 所有模块
class, friend, inline 类结构组织、接口封装 estimator.h, parameters.h

四、推荐重写/改写模块

  1. parameters.cpp:改写参数读取逻辑
    用 std::filesystem (C++17) 判断路径有效性
    添加配置热加载:读取 YAML 时支持动态更新
    上手难度低,练习文件IO、map、string处理
    2.imu_process.cpp:实现自己的 IMU 预处理逻辑
    将线性预积分结构改写为协方差传播版本
    添加 constexpr 常量定义 & if constexpr 精简处理
    练习类、构造函数、Eigen 与数据结构设计
  2. feature_tracker.cpp:引入 SuperPoint 作为替代前端
    修改角点检测逻辑为来自深度模型的输入
    添加 cv::dnn 或 Python socket 接口输入
    练习 C++ 与 Python 接口(cv::Mat转换、结构封装)
  3. main.cpp:加一个 REST API 或 WebSocket 接口
    使用 crow 或 uwebsockets 集成 HTTP 接口
    发布轨迹或接收控制指令
    练习异步 IO、线程安全、模块分离
    https://en.cppreference.com/w/
posted @ 2024-11-21 14:46  asandstar  阅读(236)  评论(0)    收藏  举报