当前位置: 首页 > news >正文

【9】lightning_lm项目-阶段4-定位系统

文章目录

    • 阶段四:定位系统(Localization)
      • 一、定位系统的整体架构
      • 二、核心模块 1:LocSystem(ROS 接口层)
      • 三、核心模块 2:LidarLoc(核心定位层)
    • 阶段四:定位系统(定位+动态地图)
      • 一、定位系统的核心亮点
      • 二、核心模块 1:TiledMap(分区动态地图)
      • 三、核心模块 2:LidarLoc(激光定位)
      • 四、核心模块 3:LocSystem(ROS 接口层)
      • 五、建图和定位主要区别
      • 六、定位系统的完整流程图
    • 阶段四总结

阶段四:定位系统(Localization)

现在学习定位系统!这是实际部署时最常用的功能——在建好的地图上实时定位!

一、定位系统的整体架构

定位系统有三层结构:

┌─────────────────────────────────────┐ │ LocSystem (ROS接口层) │ │ - 订阅IMU/LiDAR │ │ - 发布TF │ └─────────────────────────────────────┘ ↓ ┌─────────────────────────────────────┐ │ Localization (协调层) │ │ - 协调LIO/LidarLoc/PGO │ └─────────────────────────────────────┘ ↓ ┌─────────────────────────────────────┐ │ LidarLoc (核心定位层) │ │ - NDT匹配 │ │ - 动态地图更新 │ │ - 位姿图优化 │ └─────────────────────────────────────┘

二、核心模块 1:LocSystem(ROS 接口层)

看 loc_system.h 和 loc_system.cc ,这个很简单:

主要功能 :

  • 创建 ROS node
  • 订阅 IMU、LiDAR(标准点云和 Livox 点云)
  • 调用 loc::Localization 处理数据
  • 设置 TF 回调,发布定位结果

三、核心模块 2:LidarLoc(核心定位层)

看 lidar_loc.h ,这个是核心!

3.1 主要成员变量(先看有什么)

structOptions{boolupdate_dynamic_cloud_=true;// 是否更新动态图层boolforce_2d_=true;// 强制在2D空间};std::shared_ptr<TiledMap>map_=nullptr;// 分区地图!NDTType::Ptr pcl_ndt_=nullptr;// NDT配准std::deque<TimedPose>lidar_loc_pose_queue_;// 位姿队列SE3 current_abs_pose_;// 当前绝对定位位姿

阶段四:定位系统(定位+动态地图)

这是 Lightning-LM 的一大特色—— 动静态图层分离的定位系统 !

一、定位系统的核心亮点

二、核心模块 1:TiledMap(分区动态地图)

看 tiled_map.h ,这个是核心!
2.1 地图结构

TiledMap ├── static_chunks_ (静态地图块) │ ├── chunk (100m x 100m) │ ├── chunk (100m x 100m) │ └── ... └── dynamic_chunks_ (动态地图块) ├── chunk ├── chunk └── ...

2.2 动态地图策略
看 DynamicCloudPolicy 枚举:

2.3 动态地图更新
看 UpdateDynamicCloud() 接口:

  • 用定位后的点云更新动态图层
  • 只在一定范围内更新( update_kf_dis_ =5米)

三、核心模块 2:LidarLoc(激光定位)

看 lidar_loc.h
3.1 定位流程

输入:IMU + LiDAR ↓ LIO 预测相对运动(激光里程计) ↓ LidarLoc:NDT 匹配到地图上(绝对定位) ↓ PGO:位姿图优化,融合LO和绝对定位 ↓ 输出:高精度定位位姿 ↓ (可选)更新动态地图

3.2 关键参数
看 Options 结构体:

  • force_2d_ :强制在2D空间定位(大多数场景适用)
  • update_dynamic_cloud_ :是否更新动态地图
  • update_kf_dis_ :每隔多少米更新一次动态地图(5米)

四、核心模块 3:LocSystem(ROS 接口层)

看 loc_system.h

这个很简单,就是封装 ROS 接口:

  1. 订阅 IMU 话题
  2. 订阅 LiDAR 话题(标准点云和 Livox)
  3. 调用定位模块
  4. 发布 TF(世界坐标系 -> 机器人坐标系)

五、建图和定位主要区别

  • 建图阶段需要 回环、关键帧保存
  • 定位阶段只需 加载地图、高频匹配
模式主体节点功能
建图 (run_slam_online)LIO + LoopClosing + G2P5实时构建地图、优化位姿、输出全局 PCD
定位 (run_loc_online)LIO + Localization在已有地图上做 scan-to-map 匹配,输出位姿

两者在参数上存在差异,放在一个文件里会互相干扰

模块建图模式定位模式
地图加载初始化空地图读取 map_path 下保存地图
回环检测开启关闭
栅格生成(g2p5)在线生成通常关闭
动态层策略新建仅更新/加载
关键帧存储每隔一段时间保存只用作定位参考
优化线程全量图优化局部匹配修正

六、定位系统的完整流程图

┌─────────────────────────────────────────────────────────────┐ │ 输入:IMU + LiDAR │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 1. LIO 处理 (激光里程计) → 相对运动预测 │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 2. TiledMap 加载 → 只加载车辆附近的地图块 │ │ (load_nearby_chunks_ = 8) │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 3. LidarLoc::Localize() → NDT 配准 │ │ - 粗分辨率匹配 (10.0) │ │ - 精分辨率匹配 (2.0 / 1.0) │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 4. PGO 优化 → 融合 LIO 和绝对定位 │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 5. 更新动态地图 (可选) │ │ - 用定位后的点云更新动态图层 │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 6. 输出 → 发布 TF / 定位结果 │ └─────────────────────────────────────────────────────────────┘

阶段四总结

定位系统学完了!主要特色是:

  1. 分区动态地图 :大场景下高效加载
  2. 动静态图层分离 :静态存环境,动态存变化的物体
  3. NDT+LIO+PGO :融合定位,高精度鲁棒
http://www.jsqmd.com/news/1240962/

相关文章:

  • WordPress分面筛选插件FacetWP完整使用指南
  • 奶茶海报平平无奇?6个零门槛站点,新手轻松做出出圈内容
  • 基于SpringBoot的超市管理系统
  • 深入解析TI TM4C1299NCZAD ADC:从架构到实战的嵌入式数据采集指南
  • 东莞长安黄金回收高价技巧|正规连锁易奢福无套路安全变现 - 回收奢侈品探店测评
  • 智能体开发中的数据合规实践:从技术原理到工程落地
  • 3D高斯泼溅技术发展及其在具身智能领域的应用综述
  • 深入解析PWM模块:从信号生成到同步与故障处理
  • 2024年正规中考美术培训机构**,家长必收藏的** - 资讯速览
  • 深圳联众合超融合虚拟化落地实战指南
  • AU-48双模拟麦模组:T1/T2参数切换与拾音距离自适应的实现机制
  • YOLOv8在皮肤病检测中的应用与实践
  • 奇迹MU剑与翼:高效挂机与收益优化指南
  • Tiva™ TM4C129 I2C中断机制详解:从寄存器到实战编程
  • 1985-2024年各省市区县绿色专利双向引用次数(WIPO 筛选标准)
  • 腾讯混元7B翻译模型部署与优化实战
  • 2026盛京黄金回收红榜新鲜出炉!本土老牌门店凭硬核实力斩获好评 - 商业每日快报
  • DSP上μ律/A律压扩算法汇编优化实战:从原理到极致性能
  • 谷歌 GEO 优化效果不佳?剖析 7 个高频踩坑点与合规落地方案
  • 从UART到LIN总线:深入解析SCI/LIN模块原理与汽车电子应用
  • 电价API是什么?一文讲清电价数据接口的作用
  • 深入解析Tiva TM4C129 GPIO高级寄存器:锁存、提交与硬件保护机制
  • TM4C129LNCZAD低功耗实战:从寄存器配置到电池续航优化
  • Mac开发者标准化环境配置指南
  • A2A-Agent认证鉴权:安全通信与权限控制实践
  • 如何绘制一幅让论文评审专家眼前一亮的技术路线图
  • Spring Batch企业级批处理框架实战指南
  • 2026最适合中小短视频直播运营培训机构低成本获客神器,主流招生裂变工具功能实测,含零代码SAAS、AI编程、源码定制交付
  • Agent长程任务架构实战指南,搞定上下文膨胀、错误累积与目标漂移
  • 深入解析Tiva™ TM4C1294 QSSI寄存器:从SPI原理到高效驱动实践