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

Point-LIO技术文档中文翻译解析

Point-LIO

Point-LIO:鲁棒的高带宽激光雷达-惯性里程计

1. 引言

Point-LIO 是一种鲁棒的高带宽激光雷达-惯性里程计(LIO),能够估计极端剧烈的机器人运动。Point-LIO包含两大创新点以实现高带宽LIO:

  1. 逐点更新的LIO框架:在每个激光雷达点测量时更新状态,无需累积成帧。这种逐点更新机制可实现极高频率的里程计输出(4-8kHz),显著提升带宽,并从根本上消除剧烈运动导致的人为帧内运动畸变。
  2. 随机过程增强的运动学模型:将IMU测量值建模为模型的输出(而非传统滤波里程计/SLAM系统中的输入)。这种新型建模方法即使在IMU测量饱和时,也能实现剧烈运动下的精确定位和可靠建图。

实验证明,Point-LIO能在超出IMU量程的高角速度(75 rad/s)、剧烈振动和运动场景下提供高精度、高频率的里程计和可靠地图,且计算高效、鲁棒性强,在常规运动的公开数据集上表现优异。作为里程计,Point-LIO可广泛应用于自主轨迹规划、控制和感知任务,特别适用于极快本体运动(如剧烈振动、高角/线速度场景)或需高频率里程计输出和建图的场景(如高速反馈控制和感知)。

1.1. 开发者

代码贡献者:
贺东娇 (Dongjiao He) 和 徐威 (Wei Xu)

1.2. 相关论文

论文已被《Advanced Intelligent Systems》(AIS)接收,预印本:Point-LIO_preprint.pdf

1.3. 演示视频

YouTube演示视频:https://youtu.be/oS83xUs42Uw

2. Point-LIO的功能

2.1 无运动畸变的同步定位与建图(SLAM)

2.2 生成高频率、高带宽的里程计输出

2.3 在IMU饱和时仍能处理剧烈运动的SLAM

3. 环境配置

3.1 Ubuntu与ROS

支持Ubuntu18.04(ROS Melodic)和Ubuntu20.04(ROS Noetic)。需安装额外ROS包:

sudo apt-get install ros-xxx-pcl-conversions  # 替换xxx为对应ROS版本

3.2 Eigen

官方安装指南:Eigen installation,或直接安装:

sudo apt-get install libeigen3-dev

3.3 livox_ros_driver2

按livox_ros_driver2安装指南配置。

重要提示:

  • Point-LIO支持Livox系列雷达,必须在运行前安装并激活此驱动。
  • 激活方法:在~/.bashrc末尾添加source $Livox_ros_driver2_dir$/install/setup.sh,其中$Livox_ros_driver2_dir$为驱动工作空间路径(按Livox官方文档默认为ws_livox目录)。

4. 编译

克隆仓库并使用colcon构建:

cd ~/$ROS_WORKSPACE$/src
git clone https://github.com/hku-mars/Point-LIO.git
cd ..
colcon build --symlink-install
source install/setup.sh
  • 编译前请确保已激活livox_ros_driver2(见3.3节)
  • 若使用自定义PCL版本,在~/.bashrc中添加:export PCL_ROOT={CUSTOM_PCL_PATH}

5. 直接运行

关键注意事项:

A. 确保IMU与激光雷达时间同步,否则将严重影响性能。

B. 必须获取所用IMU的饱和值(加速度计/陀螺仪)和加速度单位,据此修改.yaml配置文件。

C. 错误提示"Failed to find match for field ‘time’"表示点云数据缺失时间戳,将导致Point-LIO无法运行(因其依赖每个点的时间戳)。

D. 若已知外参,建议设置extrinsic_est_en: false。外参初始化方法请参考:激光雷达-IMU在线标定工具

E. 如需无降采样的高频率里程计输出,设置publish_odometry_without_downsample: true。此时可能因TF发布间隔过小触发"TF_REPEATED_DATA"警告,可通过以下方式抑制:

git clone --branch throttle-tf-repeated-data-error git@github.com:BadgerTechnologies/geometry2.git

重新编译后,警告频率将降至10秒/次(可自行调整时间间隔)。

5.1 Mid360设备

按Livox-ros-driver2指南连接Mid360后运行:

cd ~/$Point_LIO_ROS_DIR$
source devel/setup.sh
ros2 launch point_lio mapping_mid360.launch.py
ros2 launch livox_ros_driver2 msg_MID360_launch.py

注意:

  • 仅支持msg_MID360_launch.py(因其提供关键的点级时间戳)
  • 修改帧率需调整msg_MID360_launch.py中的publish_freq参数并重新编译驱动

5.2 Avia设备

需调整代码适配livox_ros2_driver

  1. 安装livox_ros2_driver
  2. 在代码中全局替换:
    • livox_ros_driver2::msg::CustomMsglivox_ros2_driver::msg::CustomMsg
    • <livox_ros_driver2/msg/custom_msg.hpp><livox_ros2_driver/msg/custom_msg.hpp>

连接Avia设备后运行:

cd ~/$Point_LIO_ROS_DIR$
source install/setup.sh
ros2 launch point_lio mapping_avia.launch.py
ros2 launch livox_ros2_driver livox_lidar_msg_launch.py

5.3 外接IMU的Livox设备

理论上支持Mid-70/Mid-40等Livox雷达,需在运行前配置config/avia.yaml

  1. 雷达点云话题:lid_topic
  2. IMU话题:imu_topic
  3. 平移外参:extrinsic_T
  4. 旋转外参:extrinsic_R(仅支持旋转矩阵)
    • 外参定义为:雷达在IMU坐标系中的位姿(IMU为基准坐标系)
  5. IMU饱和值:satu_acc, satu_gyro
  6. 加速度模值:acc_norm(与IMU消息单位一致)

5.4 Velodyne/Ouster设备(以Velodyne为例)

步骤A:运行前配置
编辑config/velodyne.yaml

  1. 点云话题:lid_topic
  2. IMU话题:imu_topic(支持内置/外接,6轴/9轴)
  3. 时间戳单位:timestamp_unit(根据PointCloud2中"time"/"t"字段设置)
  4. 雷达线数:scan_line(支持16/32/64线)
  5. 平移外参:extrinsic_T
  6. 旋转外参:extrinsic_R(仅支持旋转矩阵)
  7. IMU饱和值:satu_acc, satu_gyro
  8. 加速度模值:acc_norm

步骤B:运行命令

cd ~/$Point_LIO_ROS_DIR$
source install/setup.sh
ros2 launch point_lio mapping_velody16.launch.py

步骤C:启动雷达驱动或播放rosbag

5.5 PCD文件保存

在launch文件中设置pcd_save_enable: 1。终止Point-LIO时,所有全局坐标系下的点云将保存至Point-LIO/PCD/scans.pcd。使用pcl_viewer scans.pcd可视化点云。

PCL查看器快捷键:

1 - 随机着色
2 - X坐标值渲染
3 - Y坐标值渲染
4 - Z坐标值渲染
5 - 强度值渲染

6. 应用案例

6.1. 案例1:IMU饱和的剧烈运动场景SLAM

6.2. 案例2:FPV无人机与PULSAR系统应用

PULSAR为单电机驱动自旋平台,项目地址

项目地址:https://github.com/hku-mars/Point-LIO/

http://www.xdnf.cn/news/1306729.html

相关文章:

  • Python爬取推特(X)的各种数据
  • 活侠传 送修改器 免安装中文版
  • 深入理解 Python 闭包:从原理到实践
  • UE UDP通信
  • 小白挑战一周上架元服务——装饰器
  • 【C++】缺省参数
  • Java调用bat执行python脚本
  • 基于多分类的工业异常声检测及应用
  • Redis 知识点与应用场景
  • Linux软件编程-进程(2)及线程(1)
  • AI加持下的智能路由监控:Amazon VPC Direct Connect实战指南
  • Python 数据可视化:柱状图/热力图绘制实例解析
  • mc paper 1.20.4
  • 【机器学习深度学习】生成式评测
  • 谈谈《More Effective C++》的条款30:代理类
  • 宋红康 JVM 笔记 Day02|JVM的架构模型、生命周期、发展历程
  • 命令模式C++
  • LPDDR5训练过程
  • 【模型评估中的BLEU、ROUGE、Bertscore、BERT分别什么意思?】
  • 洛谷 P2842 纸币问题 1 -普及-
  • 系统时钟配置
  • 《WINDOWS 环境下32位汇编语言程序设计》第1章 背景知识
  • ​Visual Studio 2013.5 ULTIMATE 中文版怎么安装?iso镜像详细步骤
  • 斯诺登:数据迷雾中的哨兵与棱镜裂痕的永恒回响
  • 【Python办公】Excel转json(极速版)-可自定义累加字段(如有重复KEY)
  • 疏老师-python训练营-Day46通道注意力(SE注意力)
  • w484扶贫助农系统设计与实现
  • redis-sentinel基础概念及部署
  • HarmonyOS 实战:用 @Observed + @ObjectLink 玩转多组件实时数据更新
  • ConRFT--RSS2025--中科院自动化所--2025.4.14