SVD求解Ax=0

源于计算机视觉life的LiDAR+视觉+IMU多传感器融合SLAM:原理推导+源码逐行详解+项目实战

SVD求解Ax=0

首先,我们需要了解四元数的基本概念。四元数是由三个虚部和一个实部组成的复数扩展,可以用来表示三维空间中的旋转。四元数的乘法规则如下:

q 1 ⊗ q 2 = [ q 1 ] L q 2 = [ q 2 ] R q 1 q_1 \otimes q_2 = [q_1]_L q_2 = [q_2]_R q_1 q1q2=[q1]Lq2=[q2]Rq1

其中,

  • [ q 1 ] L [q_1]_L [q1]L 是左乘矩阵:
    [ p w − p x − p y − p z p x p w − p z p y p y p z p w − p x p z − p y p x p w ] \begin{bmatrix}p_w & -p_x & -p_y & -p_z\\p_x & p_w & -p_z & p_y\\p_y & p_z & p_w & -p_x\\p_z & -p_y & p_x & p_w\end{bmatrix} pwpxpypzpxpwpzpypypzpwpxpzpypxpw
  • [ q 1 ] R [q_1]_R [q1]R 是右乘矩阵:
    [ q w − q x − q y − q z q x q w − q z q y q y q z q w − q x q z − q y q x q w ] \begin{bmatrix}q_w & -q_x & -q_y & -q_z\\q_x & q_w & -q_z & q_y\\q_y & q_z & q_w & -q_x\\q_z & -q_y & q_x & q_w\end{bmatrix} qwqxqyqzqxqwqzqyqyqzqwqxqzqyqxqw

化简一下,即:

  • [ q 1 ] L = q w I + [ 0 − q v → q v → [ q v → ] × ] [q_1]_L = q_w I + \begin{bmatrix}0 & -\overrightarrow{q_v}\\ \overrightarrow{q_v} & [\overrightarrow{q_v}]_{\times}\end{bmatrix} [q1]L=qwI+[0qv qv [qv ]×]
  • [ q 1 ] R = q w I + [ 0 − q v → q v → − [ q v → ] × ] [q_1]_R = q_w I + \begin{bmatrix}0 & -\overrightarrow{q_v}\\ \overrightarrow{q_v} & -[\overrightarrow{q_v}]_{\times}\end{bmatrix} [q1]R=qwI+[0qv qv [qv ]×]

其中,

  • [ a ] × ≜ [ 0 − a z a y a z 0 − a x − a y a x 0 ] [\mathbf{a}]_{\times} \triangleq \begin{bmatrix}0 & -a_z & a_y\\a_z & 0 & -a_x\\-a_y & a_x & 0\end{bmatrix} [a]× 0azayaz0axayax0

对于SVD求解Ax=0,举个例子,如lidar和IMU的外参标定,有以下关系

Q b h + 1 b k L q i l = Q l h + 1 l i R q l b Q^{b_k L}_{b_h+1} q^l_i = Q^{l_i R}_{l_{h+1}} q^b_l Qbh+1bkLqil=Qlh+1liRqlb

合并之后为:

( Q b h + 1 b k L − Q l h + 1 l i R ) q l b = 0 (Q^{b_k L}_{b_h+1} - Q^{l_i R}_{l_{h+1}}) q^b_l = 0 (Qbh+1bkLQlh+1liR)qlb=0

通常来说,我们会收集若干个IMU和lidar的相对旋转和平移,则可以联立如下:

[ Q b n − 1 b n L − Q l n − 1 l n R Q b n − 2 b n − 1 L − Q l n − 2 l n − 1 R ⋮ Q b 0 b 1 L − Q l 0 l 1 R ] q l b = A 4 n × 4 q l b = 0 (1) \begin{bmatrix} Q^{b_n L}_{b_{n-1}} - Q^{l_n R}_{l_{n-1}} \\ Q^{b_{n-1} L}_{b_{n-2}} - Q^{l_{n-1} R}_{l_{n-2}} \\ \vdots \\ Q^{b_1 L}_{b_0} - Q^{l_1 R}_{l_0} \end{bmatrix} q^b_l = A_{4n\times 4} q^b_l = 0 \tag{1} Qbn1bnLQln1lnRQbn2bn1LQln2ln1RQb0b1LQl0l1R qlb=A4n×4qlb=0(1)

相当于已知一个 4 n × 4 4n\times 4 4n×4的小矩阵,求出一个 4 × 1 4\times 1 4×1向量的最优解,通常 n > 4 n > 4 n>4,因此,这是一个基本的超定方程组求解问题,通常使用SVD方法求解。

即将A矩阵进行SVD分解,得

U D V T x = 0 UDV^T x = 0 UDVTx=0

这里U矩阵和V矩阵都是正交矩阵(类比旋转矩阵,不改变大小),D是奇异值由大到小的对角矩阵,因此等价求解

D V T x = 0 DV^T x = 0 DVTx=0

然后,我们令 V T x = y V^T x = y VTx=y,y仍然是一个四元数,所以 ∣ ∣ y ∣ ∣ = 1 ||y||=1 ∣∣y∣∣=1

当仅当 y = [ 0 , 0 , 0 , 1 ] T y=[0,0,0,1]^T y=[0,0,0,1]T时, D y Dy Dy取得最小值,则 x = V ∗ [ 0 , 0 , 0 , 1 ] T x=V*[0,0,0,1]^T x=V[0,0,0,1]T

此时对应的 x x x即为V矩阵中最小奇异值对应的列向量,然后将其转换成四元数即为所求的旋转。

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

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

相关文章

数据恢复的救星!快速恢复手机数据的2个秘籍!

当我们的照片、视频、联系人、短信和应用程序丢失时,许多人可能会感到束手无策,无论是珍贵的照片、重要的工作文件还是个人的联系方式,一旦丢失,都可能带来极大的不便和困扰。但随着数据恢复技术的发展,我们有了更多的…

锐捷网络与您相约第七届数字中国建设峰会 共话数字未来

第七届数字中国建设峰会将于5月24日至25日在福建福州举办,本届峰会是国家数据工作体系优化调整后首次举办的数字中国建设峰会,主题是“释放数据要素价值,发展新质生产力”。作为行业领先的ICT基础设施及解决方案提供商,锐捷网络与福建省电子信息集团、星网锐捷,围绕“发展新质生…

2024中青杯数学建模竞赛A题人工智能视域下养老辅助系统的构建思路代码论文分析

2024中青杯数学建模A题论文和代码已完成,代码为A题全部问题的代码,论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解(问题1模型的建立和求解、问题2模型的建立和求解、问题3模型的建立和求解)、模型的评价…

java练习2

题目要求 创建一个Color枚举类有RED,BLUE,BLACK,YELLOW,GREEN这五个枚举值/对象Color有三个属性redValue,greenValue,blueValue创建构造方法,参数包括这三个属性每个枚举值都要给这三个属性赋值,三个属性对应的值分别是red&#…

Windows批处理命令和概念

Windows中的BAT文件是一种批处理文件,它允许用户执行一系列命令和脚本。这些命令可以是简单的,如复制文件或删除文件,也可以是更复杂的,如运行程序或调用其他批处理文件。以下是一些常用的Windows批处理指令: ECHO - 显…

用go语言实现一个有界协程池

写在文章开头 本篇文章算是对go语言系列的一个收尾,通过go语言实现一个实现一个简单的有界协程池。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源项目 Java Guide 的维护…

HDR视频相关标准-HDR vivid(二)

上文介绍了HDRvivid的一些技术。今天从全局角度来看看HDR视频的处理流程,HDR视频系统,即建立一个比SDR视频更大的色彩/亮度坐标体系,并改变系统的传输函数,以再现更大的色域(WCG)和更高的亮度动态范围。 菁彩 HDR技术的专业术语 …

【ROSUbuntu】常用工具合集

1. 源 ADM64 ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror arm64 ubuntu-ports | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2. FileZilla sudo apt-get install filezilla 3. Nomachine8 AMD64

操作系统实战(四)(linux+C语言)

目录 实验目的 前提知识 实验题目 题目分析 实验程序 头文件 头文件实现 核心代码文件 (各类进程) 生产者 抽烟者A 抽烟者B 抽烟者C makefile文件 实验运行 运行结果分析 总结 实验目的 加深对并发协作进程同步与互斥概念的理解&…

【DNS】linux 中让系统 NetworkManager 不自动生成无效的 DNS

1. 问题背景 一些系统安装之后会自动覆盖/添加无效 DNS 设置,导致反而无法上网。 2. 解决方法 修改 /etc/NetworkManager/NetworkManager.conf 文件,在 [main] 部分下添加或修改如下: [main] dnsnone然后用以下命令重启 NetworkManager …

C# 类(Class)

1. 类的基本概念 在C#中,类是一种引用类型,用于定义对象的模板。类可以包含字段(Field)、属性(Property)、方法(Method)、事件(Event)等成员。对象是类的实例,通过类的构造函数创建。 2. 类的声明和使用 你可以使用class关键字来声明一个类: public class Pers…

简述Vue初始化过程中都做了什么?

在Vue的初始化过程中(new Vue(options)),主要执行了以下几个步骤: 创建Vue实例: 使用new Vue(options)来创建一个新的Vue实例。这里的options是一个包含Vue实例初始化所需选项的对象。 合并配置: Vue会将传…

代码随想录算法训练营day34 | 455.分发饼干、376. 摆动序列、53. 最大子序和

理论基础 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。 455.分发饼干 result和j变化一致,可以去除一…

Jenkins配置(插件/角色/凭证)

目录 传送门前言一、Jenkins插件管理1、更换为国内下载源2、中文汉化插件下载(不推荐)3、低版本Jenkins爆红插件安装4、低版本Jenkins插件持续报错解决办法 二、Jenkins用户角色三、Jenkins凭证管理(svn/git)1、Username with pas…

Qt hide()和setVisible(false)区别

前言 在一些场景下,我们需要控制控件的显示与隐藏,QWidget 类提供了两种方法来隐藏控件hide() 和 setVisible(false)。那么他们有何区别呢? widget->hide(); // ? widget->setVisible(false);hide() 和 setVisible(false…

【本周面试问题总结】

01.如何判断链表中是否有环 ①穷举遍历:从头节点开始,依次遍历单链表中的每一个节点。每遍历到一个新节点,将新节点和此前节点进行比较,若已经存在则说明已被遍历过,链表有环。 ②快慢指针:创建两个指针&am…

NIO流(多路复用技术)

目录 什么是NIO使用场景 NIO(new IO)相关包路径NIO的实现基础NIO的核心组件Buffer缓冲区详解数据如何从磁盘读到用户进程 ChannelChannel的使用 其他组件字符集和Charset文件锁NIO工具类使用Files的FileVisitor遍历文件和目录使用WatchService监控文件变化访问文件属性 什么是N…

什么样的无线麦克风好?一文看懂哪种麦克风降噪效果好

作为视频创作者,拍摄视频除了要注意拍摄的画质外,声音的录制也很重要。声音录制的清晰度也会直接影响整个作品的整体水平,要想录的声音清晰,有专业级录制效果,必须选好麦克风,而无线领夹麦克风,…

craco-less 插件如何使用

craco-less 是一个用于 Create React App (CRA) 的插件,它允许你在项目中无缝集成和使用 Less 作为样式预处理器。以下是如何在你的 React 项目中配置并使用 craco-less 插件的步骤: 安装所需依赖 首先,确保你已经安装了 create-react-app …

SCSS入门指南:基本语法与高效用法

关于SCSS(Sassy CSS)基本使用的文章概述:### 1. SCSS简介* SCSS是一种CSS的扩展语言,它允许开发者使用更强大、更灵活的语法来编写样式表。* SCSS提供了变量、嵌套规则、混合宏等高级功能,使得CSS代码更加模块化和可维…