多激光雷达手眼标定

手眼标定方法已经有很多博客进行解析,但是都是针对机器人的手(夹爪)眼睛(相机)进行标定。例如:
标定学习笔记(四)-- 手眼标定详解
手眼标定_全面细致的推导过程

本文主要描述多激光雷达应用中如何使用手眼标定的方法进行标定。
假如存在以下问题,在一个小车上存在两个激光雷达,激光雷达A与激光雷达B,须求解激光雷达B到激光雷达A的转换参数 B A T ^A_BT BAT(外参)。
在这里插入图片描述

利用手眼标定方法原理如下:

变量定义

如上图中所示,存在一个世界坐标系G,点 P P P在世界坐标系中的坐标为 P G P_G PG
t 1 t_1 t1时刻,激光雷达A与激光雷达B分别观测到点 P P P的坐标为: P A 1 P_{A1} PA1 P B 1 P_{B1} PB1
t 2 t_2 t2时刻,激光雷达A与激光雷达B分别观测到点 P P P的坐标为: P A 2 P_{A2} PA2 P B 2 P_{B2} PB2

t 1 t_1 t1时刻,激光雷达A与激光雷达B分别到全局坐标系 G G G的转换关系为: A 1 G T ^{G}_{A1}T A1GT B 1 G T ^{G}_{B1}T B1GT
t 2 t_2 t2时刻,激光雷达A与激光雷达B分别到全局坐标系 G G G的转换关系为: A 2 G T ^{G}_{A2}T A2GT B 2 G T ^{G}_{B2}T B2GT

t 1 t_1 t1时刻,激光雷达A与激光雷达B之间的转换关系为 B 1 A 1 T ^{A1}_{B1}T B1A1T
t 2 t_2 t2时刻,激光雷达A与激光雷达B之间的转换关系为 B 2 A 2 T ^{A2}_{B2}T B2A2T

推导过程

t 1 t_1 t1时刻,点 P P P在世界坐标系中的坐标 P G P_G PG可以通过下式计算:

P G = ( A 1 G T ) ( B 1 A 1 T ) P B 1 P_G=(^{G}_{A1}T)(^{A1}_{B1}T)P_{B1} PG=(A1GT)(B1A1T)PB1
t 2 t_2 t2时刻,
P G = ( A 2 G T ) ( B 2 A 2 T ) P B 2 P_G=(^{G}_{A2}T)(^{A2}_{B2}T)P_{B2} PG=(A2GT)(B2A2T)PB2

由上述两式可得:
P G = ( A 1 G T ) ( B 1 A 1 T ) P B 1 = ( A 2 G T ) ( B 2 A 2 T ) P B 2 = P G P_G=(^{G}_{A1}T)(^{A1}_{B1}T)P_{B1}=(^{G}_{A2}T)(^{A2}_{B2}T)P_{B2}=P_G PG=(A1GT)(B1A1T)PB1=(A2GT)(B2A2T)PB2=PG

由于认为激光雷达A与激光雷达B之间是刚性连接,所以二者之间的变换不随时间进行变化,即:
B 1 A 1 T = B 2 A 2 T = B A T ^{A1}_{B1}T=^{A2}_{B2}T=^{A}_{B}T B1A1T=B2A2T=BAT
则上式变换为:
( A 1 G T ) ( B A T ) P B 1 = ( A 2 G T ) ( B A T ) P B 2 (^{G}_{A1}T)(^{A}_{B}T)P_{B1}=(^{G}_{A2}T)(^{A}_{B}T)P_{B2} (A1GT)(BAT)PB1=(A2GT)(BAT)PB2

两边同左乘 ( A 2 G T ) − 1 (^{G}_{A2}T)^{-1} (A2GT)1,并同时右乘 ( P B 1 ) − 1 (P_{B1})^{-1} (PB1)1,转换为下式:
( A 2 G T ) − 1 ( A 1 G T ) ( B A T ) = ( B A T ) P B 2 ( P B 1 ) − 1 (^{G}_{A2}T)^{-1}(^{G}_{A1}T)(^{A}_{B}T)=(^{A}_{B}T)P_{B2}(P_{B1})^{-1} (A2GT)1(A1GT)(BAT)=(BAT)PB2(PB1)1

假设 ( B A T ) (^{A}_{B}T) (BAT)为要求解的变量 X X X,系数为 A = ( A 2 G T ) − 1 ( A 1 G T ) A=(^{G}_{A2}T)^{-1}(^{G}_{A1}T) A=(A2GT)1(A1GT) B = P B 2 ( P B 1 ) − 1 B=P_{B2}(P_{B1})^{-1} B=PB2(PB1)1
则上式转换为:
A X = X B AX=XB AX=XB
这就是我们经常所说的手眼标定推导出的形式了。但是,这和我们的激光雷达轨迹有什么关系呢?

接着,对系数 A A A B B B分别进行转换,过程如下:

对式 A A A,代入 A 1 G T = ( A 2 G T ) ( A 1 A 2 T ) ^{G}_{A1}T=(^{G}_{A2}T)(^{A2}_{A1}T) A1GT=(A2GT)(A1A2T)得:
A = ( A 2 G T ) − 1 ( A 1 G T ) = ( A 2 G T ) − 1 ( A 2 G T ) ( A 1 A 2 T ) = A 1 A 2 T A=(^{G}_{A2}T)^{-1}(^{G}_{A1}T)=(^{G}_{A2}T)^{-1}(^{G}_{A2}T)(^{A2}_{A1}T)=^{A2}_{A1}T A=(A2GT)1(A1GT)=(A2GT)1(A2GT)(A1A2T)=A1A2T

对式 B B B,分别代入 P B 1 = ( G B 1 T ) P G P_{B1}=(^{B1}_{G}T)P_{G} PB1=(GB1T)PG P B 2 = ( G B 2 T ) P G P_{B2}=(^{B2}_{G}T)P_{G} PB2=(GB2T)PG得:
B = P B 2 ( P B 1 ) − 1 = ( G B 2 T ) P G ( G B 1 T P G ) − 1 B=P_{B2}(P_{B1})^{-1}=(^{B2}_{G}T)P_{G}(^{B1}_{G}TP_{G})^{-1} B=PB2(PB1)1=(GB2T)PG(GB1TPG)1
= ( G B 2 T ) P G P G − 1 ( G B 1 T ) − 1 = ( G B 2 T ) ( G B 1 T ) − 1 =(^{B2}_{G}T)P_{G}P_{G}^{-1}(^{B1}_{G}T)^{-1}=(^{B2}_{G}T)(^{B1}_{G}T)^{-1} =(GB2T)PGPG1(GB1T)1=(GB2T)(GB1T)1
代入 G B 2 T = ( B 1 B 2 T ) ( G B 1 T ) ^{B2}_{G}T=(^{B2}_{B1}T)(^{B1}_{G}T) GB2T=(B1B2T)(GB1T)得:
B = ( G B 2 T ) ( G B 1 T ) − 1 = ( B 1 B 2 T ) ( G B 1 T ) ( G B 1 T ) − 1 = B 1 B 2 T B=(^{B2}_{G}T)(^{B1}_{G}T)^{-1}=(^{B2}_{B1}T)(^{B1}_{G}T)(^{B1}_{G}T)^{-1}=^{B2}_{B1}T B=(GB2T)(GB1T)1=(B1B2T)(GB1T)(GB1T)1=B1B2T

由此,可得 A X = X B AX=XB AX=XB可以转换为下述形式:

( A 1 A 2 T ) X = X ( B 1 B 2 T ) (^{A2}_{A1}T)X=X(^{B2}_{B1}T) (A1A2T)X=X(B1B2T)

式中, A 1 A 2 T ^{A2}_{A1}T A1A2T为激光雷达 A A A t 1 t_1 t1时刻到 t 2 t_2 t2时刻的位姿变换(也就是轨迹)。同样的, B 1 B 2 T ^{B2}_{B1}T B1B2T为激光雷达 B B B t 1 t_1 t1时刻到 t 2 t_2 t2时刻的位姿变换。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

四、数据仓库详细介绍(规范)

大家好,这是数据仓库系列的第三个话题,排序在架构之后、建模之前。为什么会提的这么靠前呢? 因为规范约束的是数仓建设的全流程,以及后续的迭代和运维。事实上,数仓规范文档,应该随着架构设计文档&#xf…

Java 与排序算法(5):归并排序

一、归并排序 归并排序(Merge Sort)是一种基于分治思想的排序算法。它将待排序的数组分成两个长度相等的子数组,然后对这两个子数组分别进行归并排序,最后将两个排好序的子数组合并成一个有序的数组。 具体实现过程如下&#xf…

要做存储业务,我解析了一个项目的源码

最近在做存储相关的业务,更具体的来说是存储相关的研发,于是就上网查了一下相关的资料,思虑再三打算从最简单的 Json 数据交换格式开始研究。 JSON是独立于编程语言的数据交换格式,几乎所有与网络开发相关的语言都有JSON函数库&am…

基于Java+SpringMvc+vue+element实现高效学生社团平台管理

基于JavaSpringMvcvueelement实现高效学生社团平台管理 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式…

oracle数据库当中用户的创建,添加,授权,以及表的创建与表的简单介绍,以及在oracle数据库当中的约束以及约束条件的简单介绍

系列文章目录 (3条消息) oracle数据库简介 文章目录 系列文章目录 前言 一、用户的创建 1.1、创建命令 1.2、给予scott用户权限 1.3、以scott用户进行连接登录 二、表和表的设计原则 2.1、表的概念 2.1.1、表是从属于用户的 2.1.2、表是逻辑表(概念表),不…

gpt.4.0-gpt 国内版

gpt 使用 GPT(Generative Pre-trained Transformer)是一种预训练的语言模型,可用于多种自然语言处理任务,如情感分析、文本分类、文本生成等。下面是使用GPT的一些步骤和建议: 确定任务和数据集:首先&…

Hibernate 快速入门

Hibernate 快速入门 〇、前言一、搭建 Hibernate 项目步骤1:新建 Java 项目附录1:新建Java项目中的相关文件信息步骤2:添加 Hibernate 框架支持附录2:添加Hibernate框架支持后,Java项目中的相关文件信息步骤3:其他关键配置1、添加数据库驱动包(本文以MySQL为例)2、配置…

C++11 列表初始化initializer_list

引子 C11,是继C98后的一次有力更新,引进了很多好用的语法,STL也添加了几个新容器,也解决了很多的问题。本篇博客就学习一下C11列表初始化的新语法和 initializer_list 文章目录 引子一. 列表初始化二. initializer_list结束语 一…

计算机底层知识

汇编语言(机器语言)的执行过程 汇编语言的本质:机器语言的助记符 其实他就是机器语言 计算机通电->CPU读取内存中程序(电信号输入) ->时钟发生器不断震荡通电 ->推动CPU内部一步一步执行(执行多…

安卓开发 | 将Vue项目打包为app

知识目录 一、写在前面✨二、Hbuilder X准备💕2.1 Hbuilder X简介2.2 下载 三、打包💕3.1 获取dist目录3.2 新建5app3.3 替换文件3.4 编写manifast.json文件3.5 app云打包 四、总结撒花😊 一、写在前面✨ 大家好!我是初心&#xf…

OJ练习第107题——二叉搜索子树的最大键值和

二叉搜索子树的最大键值和 力扣链接:1373. 二叉搜索子树的最大键值和 题目描述 给你一棵以 root 为根的 二叉树 ,请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下: 任意节点的左子树中的键值都 小于 此节点的键值。 任意…

龙蜥白皮书精选:利用 io_uring 提升数据库系统性能

文/高性能存储 SIG 01 背景介绍 传统的 IO 软件栈已经无法完全释放出高性能存储设备的性能,高性能 IO 栈是当前存储领域重点研究的课题之一,代表性的如用户态方案 SPDK,以及标准的内核态方案 io_uring。 02 关键技术 Linux 社区从零开始设…

SeaweedFs使用-通过http接口实现文件操作

通过http接口实现文件操作 SeaweedFs可通过filer的http接口/master中的http接口来进行文件上传 1.通过master的接口进行上传文件 通过各种方式进行请求接口:http://localhost:9333/submit, ip和端口号是master服务的信息。此接口通过post请求方式将文件的二进制流…

esp32CAM环境安装教程---串口驱动安装

前言 (1)本人安装好arduino 的ESP32环境之后, 发现一直下载不进去程序。一直说Cannot configure port, something went wrong. Original message: PermissionError。 (2)查阅了很多资料,用了各种办法&#…

自动生成测试用例_接口测试用例自动生成工具

前言 写用例之前,我们应该熟悉API的详细信息。建议使用抓包工具Charles或AnyProxy进行抓包。 har2case 我们先来了解一下另一个项目har2case 他的工作原理就是将当前主流的抓包工具和浏览器都支持将抓取得到的数据包导出为标准通用的 HAR 格式(HTTP A…

图片模块封装:Glide高级使用+使用设计模式图片框架封装+Bitmap尺寸压缩和质量压缩+Bitmap加载大图长图

图片模块封装:Glide高级使用使用设计模式图片封装Bitmap尺寸压缩和质量压缩Bitmap加载大图长图 一.如何更换图片框架二.策略模式构建者模式图片框架搭建1.ImageOptions图片参数设置2.IImageLoader接口以及实现子类3.图片加载策略4.ImageLoaderManager6.业务模块中使…

tcp/ip

这里写自定义目录标题 线程 防止阻塞 123 windows下4 https://zhuanlan.zhihu.com/p/139454200 https://www.bilibili.com/video/BV1eg411G7pW/?spm_id_from333.337.search-card.all.click&vd_sourcee7d12c9f66ab8294c87125a95510dac9 with socket.socket() as s:s.bind(…

小航编程题库2022年NOC决赛图形化(小高组)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 单选题3.0分 删除编辑 答案:A 第1题运行下面的程序,最终“我的变量”的值是多少? A、5B、10C、25D、30 答案…

计及N-k安全约束的含光热电站电力系统优化调度模型【IEEE14节点、118节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

南京邮电大学算法与设计实验三:动态规划法(最全最新,与题目要求一致)

实验原理: 1、用动态规划法和备忘录方法实现求两序列的最长公共子序列问题。要求掌握动态规划法思想在实际中的应用,分析最长公共子序列的问题特征,选择算法策略并设计具体算法,编程实现两输入序列的比较,并输出它们的…