WOLF


  • Description:WOLF 论文与代码笔记 — 基于因子图的模块化机器人估计框架,含框架架构与核心类结构走读 (node 树、problem)
  • Paper:Solà, J., Vallvé, J., Casals, J., Deray, J., Fourmy, M., Atchuthan, D., Corominas-Murtra, A., & Andrade-Cetto, J. (2022). WOLF: A Modular Estimation Framework for Robotics Based on Factor Graphs. IEEE RA-L. arXiv:2110.12919.
  • K2E-B ID:[K2E-B-S19-1]
  • Notion ID374d3826-c6a1-81be-b6e0-de1c03022add
  • Created:2023-06-08
  • Updated:2026-06-02
  • License转载欢迎 — 请署名 Yu Zhang 并链回 yuzhang.io 原文

Table of Contents


1. WOLF 概述

WOLF — 西班牙 IRI (Barcelona) 出品的模块化因子图估计框架 (Solà 等 2022)。(论文未将 WOLF 展开为缩写,仅作框架名)

定位:不是一个具体 SLAM 系统,而是一个通用估计后端框架 — 把机器人状态估计 (定位、SLAM、传感器融合) 统一表述成因子图,并提供模块化的传感器/处理器/约束插件结构。底层求解通过 solver wrapper 接外部优化库;core 仅自带 Ceres wrapper,GTSAM/g2o/SLAM++ 等为论文列举的可对接求解库 (需自行实现 wrapper),WOLF 本身不含求解器。

类比:GTSAM / g2o 是因子图优化库 (见 SLAM 学习资源),WOLF 在其之上提供更面向机器人应用的框架抽象 (sensor / processor / capture / feature / factor 分层)。

2. 设计理念

WOLF 把估计问题拆成树状的实体层级:

Problem
 └── Hardware → Sensor → Processor
 └── Trajectory → Frame → Capture → Feature → Factor
 └── Map → Landmark
  • Sensor — 传感器 (相机/IMU/激光...) + 外参
  • Processor — 处理传感器数据、生成 Capture/Feature/Factor
  • Frame — 一个时刻的状态 (位姿等)
  • Factor — 因子图的约束边
  • Landmark — 地图路标

模块化 → 加新传感器只需写对应 Sensor + Processor 插件,不动核心。

3. 核心类结构走读

(对照当前 WOLF 源码 — IRI GitLab gitlab.iri.upc.edu,2022 RA-L 版及之后)

NodeBase — 所有节点基类

include/core/common/node_base.h,每个 Wolf Tree 节点的共同基类:

  • 身份字段:node_id_ (静态计数器自增、全局唯一)、node_category_ (类别,如 "SENSOR"/"FEATURE")、node_type_ (子类型,如 "SensorCamera")、node_name_ (应用自定义名)
  • problem_ptr_weak_ptr 指回 Problem 根 (取用时 .lock())
  • is_removing_ — 安全移除标志
  • 全程智能指针 (shared_ptr / weak_ptr),无裸指针

父子链 — 各派生类自持

无统一的 "linked node" 基类;父子关系放在各节点类型里:

  • 向上 (父)weak_ptr — 如 FrameBaseTrajectoryBaseWPtr trajectory_ptr_
  • 向下 (子)shared_ptr 列表 — 如 FrameBaseCaptureBasePtrList capture_list_
  • link() / remove() 接入/移除树
  • weak 向上 + shared 向下 → 免环引用,生命周期由 shared_ptr 自动管理

NodeStateBlocks — 带状态块的中间基类

含状态块的节点 (Frame / Capture / Feature / Sensor / Landmark 等) 继承 NodeStateBlocks (在 NodeBase 之上加 state block 管理 + 树链接),而非直接继承 NodeBase


注:早期 WOLF 曾用 node_linked (TOP/MID/BOTTOM + 裸指针 up_node_ptr_/down_node_list_ + isDeleting()) 和 node_terminus 哨兵;现版本已重构为上述智能指针方案。完整的 sensor/processor/factor 插件机制与具体应用 (VIO/激光) 见论文与官方代码。

References

  • Solà, J., et al. (2022). WOLF: A Modular Estimation Framework for Robotics Based on Factor Graphs. IEEE RA-L. — 论文
  • WOLF 库与文档: 官方 IRI GitLab (IRI / UPC-CSIC Barcelona);文档 mobile_robotics.pages.iri.upc-csic.es/.../wolf-doc-sphinx
  • 因子图优化库 (GTSAM/g2o/Ceres) 见 SLAM 学习资源;因子图基础见 SLAM 面试题汇总 D3 (g2o 类结构)