SLAM技术之FAST_LIO和FAST_LIO2算法复现

FAST_LIO与FAST_LIO2算法复现指南

FAST_LIO(Fast LiDAR-Inertial Odometry)及其改进版FAST_LIO2是高效的激光雷达-惯性里程计算法,基于紧耦合的迭代误差状态卡尔曼滤波(IESKF)实现。以下是复现关键步骤:


环境配置

系统要求:Ubuntu 18.04/20.04,ROS Melodic/Noetic
依赖安装

sudo apt-get install ros-${ROS_DISTRO}-cv-bridge ros-${ROS_DISTRO}-tf sudo apt-get install libomp-dev libceres-dev 

Eigen3.3.7+:需手动安装高版本Eigen(FAST_LIO2要求Eigen≥3.3.7):

git clone https://gitlab.com/libeigen/eigen.git cd eigen && mkdir build && cd build cmake .. && sudo make install 


源码编译

FAST_LIO

git clone https://github.com/hku-mars/FAST_LIO.git cd FAST_LIO && mkdir build && cd build cmake .. && make -j4 

FAST_LIO2

git clone https://github.com/hku-mars/FAST_LIO2.git cd FAST_LIO2 && mkdir build && cd build cmake .. && make -j4 


 


数据集准备

支持格式

  • ROS bag文件(需包含/imu/points话题)
  • 公开数据集(如NTU VIRAL、HILTI等)

数据播放

rosbag play your_bag.bag --clock 


参数配置

关键参数文件

  • config/velodyne.yaml(传感器参数)
  • config/mapping.yaml(算法参数)

修改示例

# velodyne.yaml lidar_topic: "/points" imu_topic: "/imu" 


运行与可视化

启动FAST_LIO

roslaunch fast_lio mapping_velodyne.launch 

启动FAST_LIO2

roslaunch fast_lio2 mapping_velodyne.launch 

可视化工具

  • RViz:显示点云地图和轨迹
  • rosrun rviz rviz 加载配置config/rviz_config.rviz

性能调优

常见调整参数

  • max_iteration:IESKF最大迭代次数(默认4-6)
  • cube_side_length:地图分辨率(默认200m)
  • filter_size_surf:点云降采样分辨率

实时性优化

  • 启用fov_degree限制视场角
  • 降低max_points_num减少计算量

注意事项

  1. 时间同步:确保IMU和LiDAR时间戳严格同步,否则需外部同步工具。
  2. 传感器标定:提供准确的LiDAR-IMU外参(extrinsic_Textrinsic_R)。
  3. 点云类型:支持非结构化点云(如Velodyne、Ouster),需在配置中指定point_type

通过上述步骤可完成算法复现,具体效果取决于传感器质量与环境复杂度。建议从公开数据集开始验证。

Read more

【C++ Qt】网络编程(QUdpSocket、QTcpSocket、Http)

【C++ Qt】网络编程(QUdpSocket、QTcpSocket、Http)

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论 : 本章将提到Qt中的网络部分,在看这篇文章之前需要有一定的网络基础也就是TCP/HTTP、本篇文章主要讲到的是Qt中基础的Udp、Tcp、Http的使用方法,并附有了多个小demo方便实操练习,并且其中还在每章最后进行了小总结回顾重要接口和函数方便回顾。 ———————— 早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。 网络编程主要依赖于操作系统提供的Socket API。需要注意的是,C++标准库本身并未封装网络编程相关的API。 关于Qt网络编程的几个要点: 1. 网络应用开发本质上是编写应用层代码,需要传输层协议(如TCP/UDP)的支持 2. 为此,Qt提供了两套专门的网络编程API(QUDPSocket和QTcpSocket) 3. 使用Qt网络编程API时,需先在.pro文件中添加network模块 4. 之前学习的Qt控件和核心功能都属于QtCore模块(默认已包含) 为什么Qt要划分出这些模块呢? Qt 本身是一个非常庞

By Ne0inhk
毕设项目·SpringBoot学校访客管理系统\02-06(白嫖源码+演示录像)可做计算机毕设JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、文案

毕设项目·SpringBoot学校访客管理系统\02-06(白嫖源码+演示录像)可做计算机毕设JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、文案

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统流程分析 2.2.1 数据新增流程 2.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.

By Ne0inhk

Pinocchio 3.5.0版本:C++可视化引擎与模仿关节技术带来机器人动力学计算革命

Pinocchio 3.5.0版本:C++可视化引擎与模仿关节技术带来机器人动力学计算革命 【免费下载链接】pinocchioA fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives 项目地址: https://gitcode.com/gh_mirrors/pi/pinocchio 项目概述 Pinocchio作为机器人动力学领域的标杆性C++库,以其毫秒级计算效率和模块化架构著称。该库专注于提供刚体动力学算法及其解析导数的快速实现,广泛应用于工业机器人仿真、人形机器人控制、医疗康复设备开发等前沿领域。最新发布的3.5.0版本通过五大技术革新,将机器人建模与计算能力提升至全新高度,特别在复杂机构仿真和实时控制场景中展现出突破性价值。 图:Pinocchio在不同机器人模型上的动力学计算性能对比,展示了其在逆动力学、质量矩阵和正向动力学任务中的高效表现 核心升级亮点 🔧 C++原生可视化引擎:告别Python依赖的开发新范

By Ne0inhk
【C++动态规划】1547. 切棍子的最小成本|2116

【C++动态规划】1547. 切棍子的最小成本|2116

本文涉及知识点 C++动态规划 LeetCode1547. 切棍子的最小成本 有一根长度为 n 个单位的木棍,棍上从 0 到 n 标记了若干位置。例如,长度为 6 的棍子可以标记如下: 给你一个整数数组 cuts ,其中 cuts[i] 表示你需要将棍子切开的位置。 你可以按顺序完成切割,也可以根据需要更改切割的顺序。 每次切割的成本都是当前要切割的棍子的长度,切棍子的总成本是历次切割成本的总和。对棍子进行切割将会把一根木棍分成两根较小的木棍(这两根木棍的长度和就是切割前木棍的长度)。请参阅第一个示例以获得更直观的解释。 返回切棍子的 最小总成本 。 示例 1: 输入:n = 7, cuts = [1,3,4,5] 输出:16 解释:按 [1, 3, 4, 5]

By Ne0inhk