pcl 姿态变换 之 旋转平移

news2024/11/15 8:46:45

一、简介

最近在做一个点云的项目,姿态的变换是一个很重要的环节,从数学上需要彻底理解这些东西之前一直在使用,但是没有系统的总结过,接着2023年元旦的三天时间好好学习一下,然后在同事面前说自己是数学系的很丢人啊。这几天打算从下面几个方向上来做

1、旋转平移矩阵(2D和3D)

2、欧拉角

3、欧拉角和四元数的转换

4、SVD 矩阵分解

5、矩阵的伪逆

6、罗德里格斯公式

非常感谢这位老兄的博客,我们就是学习

旋转变换(一)旋转矩阵_csxiaoshui的博客-CSDN博客_旋转矩阵

二、2D旋转

1、旋转原理推导

 

 2、绕着一个定点旋转

上面说的是绕着原点O 来旋转的,那么如何将绕着一个定点R(x,y)来旋转呢,有如下步骤

1、将R点移动到原点O的位置

平移矩阵如下:

 2、绕着原点旋转

 3、将第一步平移的步骤也平移到原来的地方

那么最后的矩阵就是:

若绕着(2,2)点旋转angle=1/6*pi,

 matlab 验证:

>>  A=[1 0 2;0 1 2;0 0 1]

A =

     1     0     2
     0     1     2
     0     0     1

>> a=[1 0 -2;0 1 -2;0 0 1]

a =

     1     0    -2
     0     1    -2
     0     0     1

>> R=[cos(1/6*pi) -sin(1/6*pi) 0;sin(1/6*pi) cos(1/6*pi) 0;0 0 1]

R =

    0.8660   -0.5000         0
    0.5000    0.8660         0
         0         0    1.0000

>> M =A*R*a

M =

    0.8660   -0.5000    1.2679
    0.5000    0.8660   -0.7321
         0         0    1.0000

>> 

三、3D旋转

1、绕着x 轴旋转

2、绕着y 轴旋转

绕着y轴旋转,其平面是ZOX平面

3、绕着z 轴旋转

 记得在halcon中是旋转的顺序有大概12中之多,通常来说xyz和xyz以及zxy 的矩阵是不一样的,这里我们能使用matlab做个测试

angle=1/6*pi:

Rx=[1 0  0 0 ;
  0  cos(1/6*pi) -sin(1/6*pi) 0;
  0  sin(1/6*pi) cos(1/6*pi) 0;
  0 0  0 1]


Ry=[cos(1/6*pi)  0   sin(1/6*pi) 0;
   0 1 0 0 ;
 -sin(1/6*pi)  0  cos(1/6*pi) 0;
 0 0  0 1]



Rz=[cos(1/6*pi)  -sin(1/6*pi) 0  0;
sin(1/6*pi)  cos(1/6*pi)  0 0 ;
0  0  1 0;
0 0  0 1]
>> Rx=[1 0  0 0 ;0  cos(1/6*pi) -sin(1/6*pi) 0;0  sin(1/6*pi) cos(1/6*pi) 0;0 0  0 1]

Rx =

    1.0000         0         0         0
         0    0.8660   -0.5000         0
         0    0.5000    0.8660         0
         0         0         0    1.0000

>> Ry=[cos(1/6*pi)  0   sin(1/6*pi) 0; 0 1 0 0 ;-sin(1/6*pi)  0  cos(1/6*pi) 0;0 0  0 1]

Ry =

    0.8660         0    0.5000         0
         0    1.0000         0         0
   -0.5000         0    0.8660         0
         0         0         0    1.0000

>> Rz=[cos(1/6*pi)  -sin(1/6*pi) 0  0;sin(1/6*pi)  cos(1/6*pi)  0 0 ;0  0  1 0;0 0  0 1]

Rz =

    0.8660   -0.5000         0         0
    0.5000    0.8660         0         0
         0         0    1.0000         0
         0         0         0    1.0000

 C++程序:

Eigen::Matrix4f   RotateMatrix3D(int  axis,float  angle)
{
    // 使用eigen  定义一个单位矩阵
    Eigen::Matrix4f  _rotateMatrix = Eigen::Matrix4f::Identity();
    angle = angle / M_1_PI / 180;
    switch (axis)
    {
    case 0:  // 绕着x轴旋转
        _rotateMatrix(1, 1) = cos(angle);
        _rotateMatrix(1, 2) = -sin(angle);
        _rotateMatrix(2, 1) = sin(angle);
        _rotateMatrix(2, 2) = -cos(angle);
        cout << "绕着x轴旋转矩阵: " << endl;
        cout << _rotateMatrix << endl;
        break;
    case 1:  // 绕着x轴旋转
        _rotateMatrix(0, 0) = cos(angle );
        _rotateMatrix(0, 2) = sin(angle );
        _rotateMatrix(2, 0) = -sin(angle );
        _rotateMatrix(2, 2) = cos(angle );
        cout << "绕着y轴旋转矩阵: " << endl;
        cout << _rotateMatrix << endl;
        break;
    case 2:
        _rotateMatrix(0, 0) = cos(angle );
        _rotateMatrix(0, 1) = -sin(angle );
        _rotateMatrix(1, 0) = sin(angle);
        _rotateMatrix(1, 1) = cos(angle );
        cout << "绕着z轴旋转矩阵: " << endl;
        cout << _rotateMatrix << endl;
        break;
    default:
        break;
    }
    return _rotateMatrix;
}

四、3D绕任意轴旋转

绕任意轴旋转,我们可以将这个旋转分解为一些基本的旋转,然后旋转,案例如下:

我们将绕着U轴从P点旋转到Q点,求出Q点的坐标:

 1、

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

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

相关文章

【MySQL进阶】从计算机层面看索引凭什么让查询效率提高这么多?

【MySQL进阶】从计算机层面看索引凭什么让查询效率提高这么多&#xff1f; 文章目录【MySQL进阶】从计算机层面看索引凭什么让查询效率提高这么多&#xff1f;磁盘IO和预读&#xff1a;索引是什么&#xff1f;BTree索引BTree索引让我们先来了解一下计算机的数据加载。磁盘IO和预…

中国为印尼建设的高铁顺利推进,印度网友与日本网友就高铁互怼

日前中国为印尼建设的雅万高铁已开始进行试运行测试&#xff0c;预计将在明年6月正式运行&#xff0c;与雅万高铁差不多时间开始的日本为印度孟买建设的高铁项目才建设了15公里&#xff0c;为此印度网友和日本网友对中日高铁技术的差距展开了争论。2011年日本相关机构开始对印尼…

羊的第四天,开始这篇年终总结

比较尴尬&#xff0c;从今年“羊”到明年&#xff0c;所以这篇文章也是每天抽出一点时间写写&#xff0c;可能会比较乱&#xff0c;先大致分下核心内容吧&#xff1a;今年总结新年展望今年总结先是完成了《数字硬件建模系列的Verilog篇》&#xff0c;效果不好不坏&#xff0c;主…

算法设计与分析复习03:动态规划算法

算法设计与分析复习03&#xff1a;动态规划算法 文章目录算法设计与分析复习03&#xff1a;动态规划算法复习重点动态规划算法斐波那契数列及其应用矩阵链乘法凸多边形剖分矩阵链乘法凸多边形剖分最长公共子序列最大子段和&#xff08;字数组&#xff09;0-1背包编辑距离钢条切…

pycharm-qt5-designer1

pycharm-qt5-designer1一: designer界面介绍1. 新建模板二: 控件箱简介1. Layouts 布局2. Spacers 间隔(透明)3. Button4. Item views5. Item Widgets 条目控件6. Containers 容器7. input Widgets 输入控件8. Display Widgets 显示控件三: 控件属性简介1. sizePolicy: 控件大小…

gitlab-ci.yml关键字(四)allow_failure 、artifacts 、cache

allow_failure 我们知道&#xff0c;流水线作业在运行时如果失败了&#xff0c;就会停止运行&#xff0c;但allow_failure可以让我们自由的控制当前作业失败时&#xff0c;是否还需要继续运行。 要让管道继续运行后续作业&#xff0c;请使用allow_failure: true要停止管道运行…

OASIS协议标准文档的解读_第一部分

译者注&#xff1a; 利用2022年圣诞假期&#xff0c;终于解读完OASIS标准协议的文档。本翻译文档基于SEMI 草案标准 3626 (2003/04/23). 因为SEMI的原版标准草案涉及到版权的一些问题&#xff0c;并不是公开的。因此我并不是原文原样翻译&#xff0c;会加入很多我自己的理解和…

cnpm : 无法将“cnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

从报错来看明显是没有装 cnpm 检查本地是否安装了cnpm包管理工具 命令&#xff1a;npm list --depth0 -global 查看一下电脑是否安装了cnpm 如果已经安装了&#xff0c;那么会有如下图所示的内容&#xff1a; 从以上来看确实是没有装 则需要安装镜像&#xff0c;执行命令为…

Vue3详细讲解

Vue 3 介绍 文章目录Vue 3 介绍为什么要学习 vue 3Vue3 动机 和 新特性Vite 的使用vite介绍为什么选 Vite &#xff1f;Vite 的基本使用Vue3.0项目介绍vscode插件说明组合式APIcomposition API vs options API体验 composition APIsetup 函数reactive 函数ref 函数script setup…

【云原生 | Kubernetes 实战】19、K8s Ingress-Controller 高可用方案

目录 一、Ingress 和 Ingress Controller 概述 1.1 回顾下 service 四层代理 1.2 Ingress 介绍 1.3 Ingress Controller 介绍 1.4 Ingress 和 Ingress Controller 总结 1.5 使用 Ingress Controller 代理 k8s 内部 pod 的流程 二、创建两个 ingress-controller 高可用…

凌云驭势 亚马逊云科技开启re:Invent中国行

‍‍数据智能产业创新服务媒体——聚焦数智 改变商业近日&#xff0c;亚马逊云科技召开了2022 re:Invent全球大会。作为云计算的开创者&#xff0c;每年亚马逊云科技举办的re:Invent全球大会都会成为产业的风向标&#xff0c;备受业内人士关注。2022年&#xff0c;面对全球数字…

【STL学习之路】vector的模拟实现

文章目录一、接口总览二、vector成员变量三、默认成员函数构造函数① -- 默认无参构造构造函数② -- 迭代器区间构造构造函数③ -- n个val构造拷贝构造函数赋值运算符重载析构函数四、迭代器六、容量以及元素访问的相关接口emptysize和capacityreserveresize七、增删查改等接口…

async await 的基础使用和实现原理

async await 使用基础原理 async/await用法 其实你要实现一个东西之前&#xff0c;最好是先搞清楚这两样东西 这个东西有什么用&#xff1f; 这个东西是怎么用的&#xff1f; 有什么用&#xff1f; async/await的用处就是&#xff1a;用同步方式&#xff0c;执行异步操作&…

商会机构源码模板系统包含了信息管理、新闻管理、广告管理、系统管理等功能 v3.9

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 XYCMS商会机构源码模板系统是以aspaccess进行开发的商会网站源码&#xff0c;包含了信息管理、新闻管理、广告管理、系统管理等功能。 XYCMS商会机构源码模板系统功能简述&#xff1a; 商…

大数据面试题Spark篇(1)

1.spark数据倾斜 数据倾斜俩大直接致命后果&#xff1a;Out Of Memory&#xff0c;运行速度慢。这主要是发生在Shuffle阶段。同样Key的数据条数太多了。导致了某个key所在的Task数据量太大了&#xff0c;远远超过其他Task所处理的数据量。 数据倾斜一般会发生在shuffle过程中…

使用Eclipse开发第一个Java程序

虽然在《使用记事本编写运行Java程序》一节中已经开发过一个 Java 程序&#xff0c;但是那毕竟是通过记事本创建的。在上一节《Java Eclipse下载安装教程》中&#xff0c;我们已经安装了 Eclipse 工具&#xff0c;因此本节将介绍如何通过 Eclipse 开发 Java 程序。 在 Eclipse …

SD存储卡介绍

SD存储卡简介 SD存储卡是一种基于半导体快闪记忆器的新一代记忆设备&#xff0c;由于它体积小、数据传输速度快、可热插拔等优良的特性&#xff0c;被广泛地于便携式装置上使用&#xff0c;例如数码相机、平板电脑、多媒体播放器等。 SD存储卡实物图 SD存储卡特点 1、高存储容…

痞子衡嵌入式:Farewell, 我的写博故事2022

-- 题图&#xff1a;苏州荷塘月色 2022 年的最后一天&#xff0c;写个年终总结。困扰大家三年之久的新冠疫情终于在 12 月全面放开了&#xff0c;痞子衡暂时还没有阳&#xff0c;计划坚持到总决赛。对于 2023 年&#xff0c;痞子衡还是充满期待的&#xff0c;慢慢要恢复到 2019…

Codewars 你虐我千百遍,我待你如初恋

本人最近接触了Codewars啥的&#xff0c;没什么见识哈哈哈哈&#xff0c;刚开始看不懂啥的&#xff0c;到后面看多了其实也还好。我是小白轻点喷&#xff01;&#xff01;&#xff01;接下来就让我展示第一次写文章的历程吧&#xff0c;showTime&#xff1a; 第一位嘉宾A出场 …

2022年终总结:生活就像一道过山车

又到了年末&#xff0c;今年的年终总结我考虑了很久&#xff0c;到底要不要写&#xff1f;可以写些什么&#xff1f; 今年过得十分匆忙&#xff0c;我一直在赶路&#xff0c;但事实上今年内做完的&#xff0c;能说出口的事可以说没有。 回顾下去年对今年的期望&#xff1a; 有…