VINS-Mono配置记录 & 源码导读 & Modern C++ 实战指引
Ceres
要安装与现有的 Eigen 3.3.7 和 CMake 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 的编译选项
-
清理之前的构建:
cd ~/autodl-tmp/ORB_SLAM3/Thirdparty/ceres-solver-1.14.0 rm -rf build mkdir build cd build -
配置编译:
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 |
四、推荐重写/改写模块
- parameters.cpp:改写参数读取逻辑
用 std::filesystem (C++17) 判断路径有效性
添加配置热加载:读取 YAML 时支持动态更新
上手难度低,练习文件IO、map、string处理
2.imu_process.cpp:实现自己的 IMU 预处理逻辑
将线性预积分结构改写为协方差传播版本
添加 constexpr 常量定义 & if constexpr 精简处理
练习类、构造函数、Eigen 与数据结构设计 - feature_tracker.cpp:引入 SuperPoint 作为替代前端
修改角点检测逻辑为来自深度模型的输入
添加 cv::dnn 或 Python socket 接口输入
练习 C++ 与 Python 接口(cv::Mat转换、结构封装) - main.cpp:加一个 REST API 或 WebSocket 接口
使用 crow 或 uwebsockets 集成 HTTP 接口
发布轨迹或接收控制指令
练习异步 IO、线程安全、模块分离
https://en.cppreference.com/w/

浙公网安备 33010602011771号