VINS-Fusion 移植 ROS2 Jazzy 踩坑(一):环境与编译

VINS-Fusion 官方只有 ROS1 版。现以其 Humble 版( zinuok/VINS-Fusion-ROS2)为底座完成 Jazzy 适配,代码开源:stronghasaki/VINS-ROS2_jazzy,EuRoC MH_01_easy VIO ATE 0.118m(与 ROS1 原版同数量级)。

坑 1:Ceres 2.1.0 CMake 报 CXSparse::CXSparse target 不存在

  • 现象:

    CMake Error at internal/ceres/CMakeLists.txt:329 (target_link_libraries):
    Target "ceres" links to: CXSparse::CXSparse
    but the target was not found. ... An ALIAS target is missing.

  • 根因 :noble 的 SuiteSparse/CMake 打包方式变更,Ceres 2.1.0 自带的 FindCXSparse.cmake 找不到新的 imported target。该兼容问题在 Ceres 2.2.0 修复。

  • 为什么不能升 Ceres 2.2 :VINS-Fusion 与 camera_models(camodocal)大量使用 ceres::LocalParameterization,该类 2.1 已 deprecated、2.2 中移除 (替代品 Manifold)。升级 = 手改全部因子类,工作量高一个量级。

  • 解法:VINS 求解器不使用 CXSparse,直接关闭:

bash 复制代码
cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF -DCXSPARSE=OFF
  • 原理:报错指向的依赖不等于被使用的依赖,先确认依赖的实际使用方,再决定修复路径。

坑 2:编译 loop_fusion 时 cc1plus 被 Killed

  • 现象 :c++: fatal error: Killed signal terminated program cc1plus(无任何 error 行,只有 Killed = OOM 签名)。
  • 根因 :DBoW2 词袋模板代码 + Release -O3,单翻译单元峰值内存超 2GB;colcon 默认按核数开 8 路并行,8G 内存爆掉。
  • 解法:
bash 复制代码
MAKEFLAGS=-j2 colcon build --parallel-workers 1
  • 原理 :模板重度代码在 -O3 下内存膨胀是乘法关系(模板实例数 × 优化开销),并行度决定峰值内存,低配机器先限并行度。

坑 3:ros:jazzy 基础镜像缺 OpenCV 开发包

  • 现象 :colcon 报 Could NOT find OpenCV (missing: OpenCVConfig.cmake)。
  • 根因 :ros 基础镜像只含运行库,不含开发头文件(OpenCVConfig.cmake 在 dev 包里)。
  • 解法:Dockerfile 补装(Boost 三件套为 camera_models 所需):
dockerfile 复制代码
RUN apt-get install -y libopencv-dev libboost-filesystem-dev \
    libboost-program-options-dev libboost-system-dev
  • 现象 :ament_cmake_symlink_install_directory() can't find '/ws/src/src/vins/../config/'。
  • 根因 :CMakeLists 用 install(DIRECTORY ../config/) 引用包外目录(zinuok 原仓库 layout 为 workspace 根下 config/),目录结构变化后相对路径断裂。
  • 解法:照原 layout 将 config/ 放回包的兄弟目录。
  • 原理 :CMake 引用包外路径时,编译期不校验、install 期才解析,报错点远离出错点。移植他人仓库先执行 git grep "\.\./" 排查此类引用。

下一篇

评测链路的坑:Jazzy 移除了 rosbag1 支持(.bag 需转 rosbag2)、VINS 上游 vio.csv 时间戳被截成整数秒无法对齐真值、evo 的 numpy/scipy 二进制混搭问题。

仓库:https://github.com/stronghasaki/VINS-ROS2_jazzy (Docker 一键复现 + MH_01 基准数字)

相关推荐
可乐ea6 分钟前
智能体的模型列表为什么要从三处来源合成:一次让 GPT-6.1 Sol 选不上的发布延迟
人工智能·gpt·chatgpt·智能体框架·模型列表·多源数据合成·客户端工程
freewebsys13 分钟前
【原始POSTMAN】最老一个版本的postman 大家还记得吗?官方已经不支持没有升级了,下载了组件用AI直接升级了下可以使用了!
人工智能
云南新人和数采集团24 分钟前
云南靠谱软件开发公司选型指南:以昆明新腾科技为例
大数据·人工智能·科技
YLCHUP33 分钟前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
思麟呀1 小时前
背包DP(01背包+完全背包)
c++·算法
发现你走远了1 小时前
05-权限不是开关:工具调用如何在放行、拦截与追问之间做决定
人工智能·agent·claude
AllData公司负责人1 小时前
AI大模型数据开发底座系列说明书:AllData集成DB-GPT开源项目建设 AI 多模态分析底座,涵盖模态解析/智能大屏/MCP 扩展!
大数据·数据库·人工智能·gpt·数据采集·数据接入·模态解析
鲁邦通物联网2 小时前
机器人梯控状态模型与反馈可靠性验证方法
机器人·巡检机器人·机器人梯控·agv梯控·非侵入式采集·机器人乘梯·机器人自主乘梯
笑容掩饰我的失落2 小时前
区块链从小白到精通(七):Solidity 语法精讲——数据类型、函数、修饰器与事件
算法·区块链·php·智能合约·哈希算法
syyjhchou3 小时前
自己搭企业内部中转站,怎么让请求更容易命中缓存
人工智能·后端·语言模型·aigc