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]
- Max3 PDF:
[K2E] SLAM/[K2E-B-S] SLAM Systems/[K2E-B-S19] WOLF/[K2E-B-S19-1][2022] WOLF A Modular Estimation Framework for Robotics Based on Factor Graphs.pdf - Notion ID:(待创建)
- 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— 如FrameBase持TrajectoryBaseWPtr trajectory_ptr_ - 向下 (子) 用
shared_ptr列表 — 如FrameBase持CaptureBasePtrList 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 类结构)