Apollo10.0学习之固态雷达与IMU的外参标定

固态雷达(如Livox、禾赛等非旋转式激光雷达)与IMU(惯性测量单元)的外参标定(Extrinsic Calibration)是自动驾驶、机器人定位(如LIO-SAM、FAST-LIO)的关键步骤。


1. 标定原理

外参标定的目标是找到雷达与IMU之间的相对位姿(平移 (t)( \mathbf{t} )(t) 和旋转 (R)( \mathbf{R} )(R)),即:
TLiDARIMU=[Rt01] \mathbf{T}_{\text{LiDAR}}^{\text{IMU}} = \begin{bmatrix} \mathbf{R} & \mathbf{t} \\ \mathbf{0} & 1 \end{bmatrix} TLiDARIMU=[R0t1]


2. 标定方法分类

(1) 基于目标物的标定(Target-Based)

适用场景:实验室或可控环境,精度高。
工具:棋盘格、AprilTag、标定板。
步骤

  1. 安装标定板:固定棋盘格或AprilTag在墙面/支架上。
  2. 同步采集数据
  • 雷达点云(检测标定板角点/平面)。
  • IMU数据(提供姿态信息)。
  1. 标定流程
  • 通过标定板在雷达坐标系下的3D点云拟合平面,计算标定板位姿 (TBoardLiDAR)( \mathbf{T}_{\text{Board}}^{\text{LiDAR}} )(TBoardLiDAR)
  • 通过相机或手动测量获取标定板在IMU坐标系下的位姿 (TBoardIMU)( \mathbf{T}_{\text{Board}}^{\text{IMU}} )(TBoardIMU)
  • 计算外参:
    TLiDARIMU=TBoardIMU⋅(TBoardLiDAR)−1 \mathbf{T}_{\text{LiDAR}}^{\text{IMU}} = \mathbf{T}_{\text{Board}}^{\text{IMU}} \cdot (\mathbf{T}_{\text{Board}}^{\text{LiDAR}})^{-1} TLiDARIMU=TBoardIMU(TBoardLiDAR)1

工具推荐

  • Livox_Calibration(Livox官方工具,支持棋盘格标定)。
  • lidar_align(基于点云与IMU轨迹对齐)。

(2) 基于运动的方法(Motion-Based)

适用场景:无标定板,依赖设备运动。
原理:IMU和雷达对同一运动的观测应一致。
步骤

  1. 数据采集
  • 手持设备做剧烈运动(旋转+平移,激励充分)。
  • 录制雷达点云(rosbag record /points)和IMU数据(/imu)。
  1. 标定工具
  • LIO-SAM/FAST-LIO:直接运行SLAM,在线优化外参。
  • Kalibr(扩展支持雷达-IMU标定)。
  • LI_Init(专为固态雷达设计,见GitHub)。
  1. 优化目标
  • 最小化雷达点云匹配误差与IMU预积分误差。

代码示例(LI_Init)

git clone https://github.com/Livox-SDK/LI_Init
cd LI_Init
roslaunch li_init li_calib.launch

(3) 联合标定(SLAM-Based)

适用场景:长时间运行SLAM,自动优化外参。
方法

  • LIO-SAM:在配置文件中启用 optimizeExtrinsic
optimizeExtrinsic: 1# 1=在线优化, 2=固定外参
  • FAST-LIO2:修改配置文件的 extrinsic_est_en
extrinsic_est_en: true# 在线估计外参

3. 标定验证

  1. 点云对齐检查
  • 在Rviz中叠加雷达点云和IMU坐标系,运动时观察是否一致。
  1. 轨迹对比
  • 运行SLAM,对比纯IMU积分和雷达建图轨迹。
  1. 重投影误差
  • 将雷达点云投影到IMU坐标系,检查静止场景点云是否稳定。

4. 注意事项

  1. 时间同步
  • 确保雷达和IMU时间戳同步(硬件同步或软件对齐)。
  1. 运动激励
  • 标定时需充分激励(旋转+加速度变化)。
  1. 初始值设置
  • 外参初始值尽量接近真实值(如CAD模型测量)。
  1. 多传感器标定顺序
  • 先标定IMU-相机(如Kalibr),再标定雷达-IMU

5. 开源工具对比

工具适用传感器方法特点
LI_InitLivox雷达+IMU运动激励专为固态雷达设计
lidar_align机械雷达+IMU轨迹对齐简单易用
Kalibr相机+IMU+雷达多模态标定支持多传感器
LIO-SAM雷达+IMUSLAM优化在线标定

6. 常见问题解决

  • 标定发散:检查IMU噪声参数(accelerometer_noise_density等)。
  • 点云抖动:确认时间同步或降低雷达运动畸变。
  • 外参不准:尝试不同初始值或增加运动多样性。

如果使用Livox雷达,推荐优先尝试 LI_Init;若已部署LIO-SAM/FAST-LIO,可直接在线优化外参。

有用的链接:https://zhuanlan.zhihu.com/p/674902669

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93238.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML5实现古典音乐网站源码模板1

文章目录 1.设计来源1.1 网站首页1.2 古典音乐界面1.3 著名人物界面1.4 古典乐器界面1.5 历史起源界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:http…

40 C++ STL模板库9-容器2-vector

C STL模板库9-容器2-vector 文章目录C STL模板库9-容器2-vector一、基础概念1. 类型成员(Type Members)2. 模板参数二、构造函数1. 语法2. 示例三、元素访问1. 函数说明2. 示例代码四、容量操作1. 函数说明2. 关键点说明3. 关键操作解析4. 操作示例五、修…

GPT-5系列文章2——新功能、测试与性能基准全解析

引言 2025年8月,OpenAI正式发布了其新一代旗舰模型GPT-5。与业界此前期待的AGI(人工通用智能)突破不同,GPT-5更像是OpenAI对现有技术的一次深度整合与用户体验优化。本文将全面解析GPT-5的新特性、实际测试表现以及官方发布的基准数据,帮助开…

利用cursor+MCP实现浏览器自动化释放双手

小伙伴们,我们今天利用cursorMCP实现浏览器自动化,释放双手,工作效率嘎嘎提升!前期准备:安装node.js网址:https://nodejs.org/zh-cn下载下来安装即可。 下载browser-tools-mcp扩展程序:下载扩展…

指针/边界索引混淆梳理

在处理数组/链表等数据结构时,时常混淆长度和指针序号。处理技巧:使用0-base索引。则区间长度 rightIndex - LeftIndex 1总长度 lastIndex - firstIndex 1链表创建一个dummy节点,添加到head前,则可认为从索引0开始。末尾指针判…

LeetCode 刷题【43. 字符串相乘】

43. 字符串相乘 自己做 解1:矩阵计数 class Solution { public:string multiply(string num1, string num2) {int len1 num1.size();int len2 num2.size();if (num1[0] 0 || num2[0] 0) //结果为0的情况return "0";//存储计算过程的矩阵vector…

NLP数据增强方法及实现-A

目录 词替换 主要参考:paddlenlp/data_aug模块 词替换数据增强策略也即将句子中的词随机替换为其他单词进行数据增强,这里我们将介绍如何使用paddlenlp.dataaug.WordSubstitute进行词级别替换的数据增强。 WordSubstitute 参数介绍:aug_ty…

EhViewer安卓ios全版本类下载安装工具的完整路径解析

开发一款类似EhViewer的下载安装工具(集下载管理、应用部署等功能于一体),需要经历从需求锚定到落地发布的系统性流程。以下从需求拆解到技术落地的全维度指南,将帮你理清开发脉络,避开常见陷阱。安装 GitHub - huangy…

MySQL 主键详解:作用与使用方法

在 MySQL 数据库中,主键(Primary Key) 是表结构设计中最重要的约束之一。它不仅是数据唯一性的保障,也是多表关联、查询优化的核心工具。本文将从 主键的作用 和 主键的用法 两个方面进行讲解,并配合代码示例帮助理解一…

lib.dom.d.ts

lib.dom.d.ts 是一个 TypeScript 类型声明文件,它是 TypeScript 标准库的一部分,用于定义浏览器 DOM(文档对象模型)相关的类型和接口。这个文件为开发者提供了浏览器中所有内置的 DOM 类型的定义,包括 localStorage、d…

Spring 工具类:StopWatch

StopWatch 是 Spring 框架提供的一个简单而强大的计时工具类,用于测量代码块的执行时间。它特别适合在开发阶段进行性能分析、调试和优化。 基本使用方法 // 创建 StopWatch 实例(可指定 ID) StopWatch stopWatch new StopWatch("性能分…

解决 VSCode 运行 Python 时 ModuleNotFoundError: No module named ‘open_webui‘ 问题

目录 1. 问题原因分析 2. 解决思路 3. 解决步骤 3.1 打开或创建 .vscode/launch.json 3.2 添加调试配置 3.3 配置说明 3.4 运行测试 4. 总结 在使用 VSCode 调试 Python 项目时,我们经常会遇到类似下面的错误: Exception has occurred: ModuleN…

Python基础-数据结构

数据结构 Python提供了四种主要的内置数据结构:列表(List)、元组(Tuple)、字典(Dictionary)和集合(Set)。每种数据结构都有其特定的用途和特性。 Python数据结构概览&…

NLP学习之Transformer(1)

初识 Transformer (1) 1.简介 1.1主要特点: self-attention: 自注意力机制,Transformer的核心是自注意力机制,它允许模型在处理某个位置的输入时,能够直接与其他位置的输入交互,而不…

C语言笔记6:C高级 part1

1.gcc 编译器 编译流程 预处理-》编译》汇编》链接》 E 预处理的命令 S 编译汇编代码 -c汇编阶段命令 -o 输出对应的文件GDB调试工具2.作用域存储分类// C高级部分知识多, 加上这周 我学的知识量有点爆炸。家里又有事情,这周末要回老家 争取下周补齐吧。…

A12预装app

在A12上预装应用,出现了一个异常。在此记录问题描述:在A12上预装应用按照A13的预装方案报错,mk文件如下:LOCAL_PATH : $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS : optional LOCAL_MODULE : Tideen_PTT LOCAL_MODU…

termios 线程 poll epoll进化 二叉AVL红黑树

struct termios tio 是什么 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <termios.h>#define SERIAL_PORT "/dev/ttyS0" #define BUF_SIZE 256int main(v…

C++设计模式:类间关系

类封装了数据和行为&#xff0c;是面向对象的重要组成部分&#xff0c;它是具有相同属性、操作、关系的对象集合的总称。在系统中&#xff0c;每个类都具有一定的职责&#xff0c;职责指的是类要完成什么样子的功能&#xff0c;要承担什么样子的义务。一个类可以有多种职责&…

MSYS2+CMake配置C/C++开发环境

目录一、MSYS2是什么1.1 核心架构与组件​​1.1.1 背景介绍1.1.1.1 Cygwin1.1.1.2 MinGW和Mingw-w641.1.1.3MSYS和MSYS21.1.2 技术基础​​1.1.3 多环境支持​​1.2 核心功能​​1.2.1 类Unix开发环境​​1.2.2 开发工具链​​1.2.3 软件仓库与包管理​​二、安装和配置2.1 配置…

Vue 3 + TypeScript:package.json 示例 / 详细注释说明

一、示例 / 详细注释说明 {// 项目基础信息"name": "vite-project", // 项目名称&#xff08;建议使用 kebab-case 格式&#xff09;"private": true, // 标记为私有项目&#xff0c;避免意外发布到 npm"version": "1.0.…