自动驾驶中,实现三维点旋转原理

文章目录

      • 1. 三维点旋转的方案
      • 2. 使用复数表示二维点的旋转
        • 2.1. 复数的概念
        • 2.2. 复数的三种形式及相互转换
        • 2.3. 复数概念扩展:实数、虚数、复数
      • 3. 四元数旋转三维点原理
      • 4. 使用四元数进行旋转的公式
      • 5. 旋转叠加
      • 6. 四元数转换为三维点
      • 7. 代码实现

1. 三维点旋转的方案

三维旋转的方案,主要有:

  • 欧拉角:简单易懂,但有万向节锁问题。在三维软件的用户界面上通常都用欧拉角表示。但是软件内部的计算过程都用四元数。

  • 旋转矩阵:可以累乘,但有误差累计问题。

  • 四元数:正是因为这两种表示方式的缺陷,才造就了四元数表示法的流。

本文仅对四元数的旋转进行说明。

2. 使用复数表示二维点的旋转

2.1. 复数的概念

复数为: a + b i

复数可以表示二维点的旋转。

在这里插入图片描述

其中的圆是单位圆。

如图,就表示点或向量绕着原点旋转了θ (theta)角度。可以把图中的二维坐标(a,b)写成一个复数:

在这里插入图片描述

2.2. 复数的三种形式及相互转换
  • 代数形式

  • 三角形式

  • 指数形式

在这里插入图片描述

2.3. 复数概念扩展:实数、虚数、复数

在这里插入图片描述

3. 四元数旋转三维点原理

四元数就是四个数。它是复数的推广。

四元数则多了两个虚部: q = w + (ai + bj + ck) , 其中i,j,k都是虚数。所以:

在这里插入图片描述

四元数可以表示三维单位球面上的一个点(或者说是一个单位方向向量)的旋转:

在这里插入图片描述

这就表示绕着一个轴(a,b,c)(它是个单位向量)旋转θ (theta)角度。

在这里插入图片描述

4. 使用四元数进行旋转的公式

使用四元数进行旋转的公式如下(结果为一个新的四元数):

在这里插入图片描述

假设有四元数q : q = w + (ai + bj + ck) , 那么四元数的逆的公式为:

在这里插入图片描述

这就是实部不变,虚部加个负号而已!

以试验一下,它是否符合逆的概念,也就是:

在这里插入图片描述

注意:如果q没有归一化,那么q的逆只需要再除以模的平方:

在这里插入图片描述

5. 旋转叠加

四元数也像旋转矩阵那样能够累乘!比如先旋转q1,再旋转q2:

在这里插入图片描述

6. 四元数转换为三维点

旋转之后,怎么得到三维的点坐标呢?

我们只需要把实部抛弃(或者写成0),虚部的三个值恰好就是一个三维点的坐标。

也就是说:( 0 , x i + y j + z k )

恰好就是三维点:( x , y , z )

7. 代码实现

关于代码实现,请参考下一篇文章:《Eigen C++ 代码实现三维点的旋转》

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

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

相关文章

66、Flink 的 DataStream Connectors 支持的 Formats 详解

支持的 Formats 1.概述 Format 定义如何对 Record 进行编码以进行存储,目前支持以下格式: Avro Azure Table Hadoop Parquet Text files2.Avro format Flink 内置支持 Apache Avro 格式,Flink 的序列化框架可以处理基于 Avro schemas 生成…

人脸检测+调整分辨率+调整帧率

初始检测:只在视频的前几秒内进行一次人脸检测,以确定主持人的大致位置。计算裁剪框:基于检测到的主持人位置,计算一个以主持人面部为中心的固定裁剪框。视频裁剪:使用计算出的裁剪框对整个视频进行裁剪,将…

一文学会用RKE部署高可用Kubernetes集群

k8s架构图 RKE简介 RKE全称Rancher Kubernetes Engine,是一个快速的,多功能的 Kubernetes 安装工具。通过RKE,我们可以快速的安装一个高可用K8S集群。RKE 支持多种操作系统,包括 MacOS、Linux 和 Windows。 K8S原生安装需要的先…

【YOLOv5/v7改进系列】改进池化层为SimSPPF

一、导言 SimSPPF(Simplified Spatial Pyramid Pooling with Fixed-size kernel)模块是在YOLOv6架构中引入的一个关键组件,它旨在优化原始SPPF(Spatial Pyramid Pooling Fixed-size)模块的效率。以下是SimSPPF的一些优…

开发TEE的踩坑之开发TEE

系统:Ubuntu20.04(双系统,非虚拟机) 一、前置说明1、TEE平台的选择2、机器间的通信方式3、程序和数据集的示例4、结果文件的解密 二、服务器部署三、客户端部署四、工程应用 本系列为笔者开发TEE(Trusted Execution En…

JS和jQuery操作表单常见的错误用法

设置radio选中 正确用法: //jquery $([name"sex"][value"1"]).prop(checked, true); $([name"sex"][value"1"])[0].checked true; //so, js method is: document.getElementById(youRadioId).checked true;错误用法 $([n…

【笔记】虚拟机中的主从数据库连接实体数据库成功后的从数据库不同步问题解决方法2

错误: Last_Errno: 1008 Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ANONYMOUS at source log mysql-bin.000014, end_log_pos 200275. See error lo…

开放式耳机哪款好一点?开放式耳机科普五款推荐!

“选择开放式耳机真的太难了” “哥,怎么才能选到心仪的开放式耳机啊” 这种评论总是会出现后台或者现实的朋友也会问起来,所以作为耳机测评的博主,在这里给大家科普一下到底一款好用的开放式耳机到底怎么选,这篇文章我花了三天…

Centos系统内磁盘分区

Centos系统内磁盘分区 建议如果有重要数据提前做好备份 以根目录扩容50G为例: 1、卸载/home目录 umount /home 2、删除逻辑卷 y确认即可 lvremove /dev/mapper/centos-home 3、df -h查询一下,/home目录已经不见了 4、向根目录分区追加50G容量 lv…

网易云小程序资料分享

链接: https://pan.baidu.com/s/1jzP52Zq4R-nUTxN334XMJg 提取码: xhny

如何看待AI机器人取代人工拨打电话

所以整理了以下几点机器人呢拨打的流程​: 1. 效率提升 AI机器人能够自动拨打电话,并快速处理大量电话任务,这在很大程度上提高了效率。在销售和客户服务等领域,这种高效的工作方式能够极大地节省时间,并有可能带来业…

[XCUITest] 处理iOS权限点击授权 有哪些权限?

位置权限 (Location Permission) app.addUIInterruptionMonitor(withDescription: "Location Permission Dialog") { (alert) -> Bool in if alert.buttons["Allow While Using App"].exists { alert.buttons["Allow While Using App"].tap(…

Android --- Android 8.0之后不允许在后台启动一个服务的解决方案

从Android 8.0(API级别26)开始,Google 引入了后台服务限制,目的是为了改善系统资源管理和用户体验。这些限制导致在后台运行的服务可能会被系统认为是无效的,从而限制或者终止这些服务。针对这个问题,可以考…

STM32基础篇:EXTI × 事件 × EXTI标准库

EXTI EXTI简介 EXTI:译作外部中断/事件控制器,STM32的众多片上外设之一,能够检测外部输入信号的边沿变化并由此产生中断。 例如,在检测按键时,按键按下时会使电平产生翻转,因此可以使用EXTI来读取按下时…

线上线下一体开源的Hugging Face?| 这些问题不可不看……

7月,2024世界人工智能大会暨人工智能全球治理高级别会议(WAIC 2024)在上海盛大启幕,以“以共商促共享,以善治促善智”为主题进行展览,OpenCSG首次亮相“CSGHub和StarShip”两大产品,全方位展现公…

HTML5新增的input元素类型:number、range、email、color、date等

HTML5 大幅度地增加与改良了 input 元素的种类,可以简单地使用这些元素来实现 HTML5 之前需要使用 JavaScript 才能实现的许多功能。 到目前为止,大部分浏览器都支持 input 元素的种类。对于不支持新增 input 元素的浏览器,input 元素被统一…

kotlin数据容器

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 容器是用于存放数据的载体。容器分为数组、集合。 Kotlin作为一门全新的语言,肯定还是要有自己的容…

网优学习干货:xx5G速率优化现场实战版

速率概述 无线网络仍然是5G网络能力最容易受限的环节,无线网络技术的应用将最终决定5G网络能力的木桶深度。移动通信中传统关键技术在5G将会继续使用。5G NR在继承了LTE原有部分技术基础上,采用了一些技术演进和新技术创新。比如NR继承了LTE的OFDM和SC-…

ArduPilot开源飞控之AP_Mount_Topotek

ArduPilot开源飞控之AP_Mount_Topotek 1. 源由2. 框架设计3. 重要函数3.1 动态过程3.1.1 AP_Mount_Topotek::update3.1.2 AP_Mount_Backend::calculate_poi 3.2 基础能力3.2.1 AP_Mount_Topotek::healthy3.2.2 AP_Mount_Topotek::has_pan_control 3.3 设备功能3.3.1 AP_Mount_T…

深入剖析 Java 中 Spring Bean 的生命周期

在 Java 开发中,Spring 框架是广泛使用的企业级应用开发框架。理解 Spring Bean 的生命周期对于开发者来说至关重要,这也是面试中经常会被问到的重要知识点。 一、Spring Bean 的定义与创建 Spring Bean 是由 Spring 容器管理的对象。Spring 容器在创建…