C++ Eigen - 使用旋转矩阵,实现两个传感器之间的坐标变换(仅平移)

文章目录

    • 1. 需求描述
    • 2. 需求分析
    • 3. 理论基础(来源于本人:实践中测试)
    • 4. 代码实现

1. 需求描述

设有三个坐标系:1系,m系,2系; 其中在1系下有坐标P’(1, 1, 0). 求该坐标在2系下的坐标值 P"? 手工分析肯定是: P"(3, 3, 0).

在这里插入图片描述

2. 需求分析

此过程由于仅涉及平移,不涉及旋转,在实现过程中,可以:

(1)先平移至m系,再平移至 2系。

(2)也可以直接由1系平移至2系。

由于本案例比较简单,按照直接平移至2系的方式进行说明。

3. 理论基础(来源于本人:实践中测试)

由需求描述不难看出,X、Y的平移量均是3。 那么再构造旋转向量时,是取值-3 还是 3呢?

经实际测试验证发现如下规律:

(1)变换公式为:P_2 = T_2_1 * P_1, 可将1系下的P点,旋转至2系下。

(2)公式中,T_2_1 的旋转部分,是指:由坐标系1 旋转至2的过程中,相对于1产生的角度。该角度的取值依据顺、逆时针进行判定(详见上节内容中的示例2中有详细说明);

(3)公式中,T_2_1 的平移部分,也应该是指由坐标系1 平移至2的过程中,相对于1系产生的平移量。正、负的取值也应以原始坐标系1为基础,分析对1系坐标产生的后果: 向负轴移动,取正数;向正轴移动,取负值。 所以本示例中,应该取值:2,2.

(4)若在实际构造旋转向量过程中,向负轴移动也取负数,则需要对旋转矩阵或变换矩阵 .invert()

4. 代码实现


#include <iostream>
#include <vector>
#include <algorithm>
#include <Eigen/Core>
#include <Eigen/Geometry>using namespace std;
using namespace Eigen;Eigen::Isometry3d GetIsometry(const Eigen::Vector3d& axis, double angle, const Eigen::Vector3d& translation)
{Eigen::Vector3d normalized_axis = axis.normalized();  // 归一化轴向量//转向量使用 AngleAxis, 它底层不直接是Matrix,但运算可以当作矩阵(因为重载了运算符)Eigen::AngleAxisd rotation_vector(angle, normalized_axis);Eigen::Isometry3d T = Eigen::Isometry3d::Identity();T.rotate(rotation_vector);T.pretranslate(translation);return T;
}int main(int argc, char** argv)
{Quaterniond q1(1, 0, 0, 0), q2(1, 0, 0, 0);q1.normalize();q2.normalize();Vector3d p1(1, 1, 0);double angle = 0;                 //旋转角度(弧度),例如90度(PI / 2)Eigen::Vector3d axis(0, 0, 1);  //定义旋转轴: 绕z轴旋转Eigen::AngleAxisd rotation_vector(angle, axis.normalized());Eigen::Isometry3d T_w1 = Eigen::Isometry3d::Identity();{double angle = 0;                 //旋转角度(弧度),例如90度(PI / 2)Eigen::Vector3d axis(0, 0, 1);  //定义旋转轴: 绕z轴旋转Eigen::Vector3d translation = Eigen::Vector3d(2, 2, 0); //定义平移量T_w1 = GetIsometry(axis, angle, translation);std::cout << "Use Isometry:  P_w: " << (T_w1 * p1).transpose() << std::endl;}Eigen::Isometry3d T_w2 = Eigen::Isometry3d::Identity();{double angle = 0;                 //旋转角度(弧度),例如90度(PI / 2)Eigen::Vector3d axis(0, 0, 1);  //定义旋转轴: 绕z轴旋转Eigen::Vector3d translation = Eigen::Vector3d(-2, -2, 0); //定义平移量T_w2 = GetIsometry(axis, angle, translation);std::cout << "Use Isometry:  P_w: " << (T_w2 * p1).transpose() << std::endl;std::cout << "Use Isometry:  P_w: " << (T_w2.inverse() * p1).transpose() << std::endl;}

运行结果:

Use Isometry: P_w: 3 3 0
Use Isometry: P_w: 3 3 0

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

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

相关文章

C/C++蓝屏整人代码

文章目录 &#x1f4d2;程序效果 &#x1f4d2;具体步骤 1.隐藏任务栏 2.调整cmd窗口大小 3.调整cmd窗口屏幕颜色 4.完整代码 &#x1f4d2;代码详解 &#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&a…

【西安活动邀请函】7月27 | PowerData 数字经济-“西安“开源行!

活动介绍 古有“长安回望绣成堆&#xff0c;山顶千门次第开”&#xff0c;西安&#xff0c;这座拥有深厚历史文化底蕴的古都&#xff0c;自古以来便是国家的重要战略中心。在漫长的历史进程中&#xff0c;西安不仅孕育了辉煌的文化&#xff0c;更在现代化进程中展现出了蓬勃的…

算法力扣刷题记录 五十一【654.最大二叉树】

前言 二叉树篇&#xff0c;继续。 记录 五十一【654.最大二叉树】 一、题目阅读 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。…

分享5款免费在线ps网页版工具,在线ps图片编辑器

在线PS&#xff0c;即在线Photoshop&#xff0c;是一种无需下载和安装即可在浏览器中使用的图片处理工具。这类工具通常提供与桌面版Photoshop相似的功能&#xff0c;包括但不限于图像编辑、调整、美化等。小编为大家收集整理了5款免费在线PS网页版工具&#xff0c;方便有需要的…

如何利用windows本机调用Linux服务器,以及如何调用jupyter界面远程操控

其实这篇文章没必要存在&#xff0c;教程太多了 参考博客&#xff08;1 2 3&#xff09;&#xff0c;如侵删 奈何网上的大神总是会漏掉一些凡人遇到的小问题 &#xff08;1&#xff09; 建议下载PuTTy for windows&#xff0c;从而建立与远程服务器的SSH连接 需要确认目标服…

实验六:频域图像增强方法

一、实验目的 熟练掌握频域滤波增强的各类滤波器的原理及实现。分析不同用途的滤波器对频域滤波增强效果的影响,并分析不同的滤波器截止频率对频域滤波增强效果的影响。二、实验原理 ① Butterworth 低通滤波器:一种具有最大平坦通带幅度响应的滤波器。它的特点是在通带内具…

JAVA面向对象03

基本类型的包装类 拆包–>封包 拆包–>包装类型转换基本数据类型 封包—>基本数据类型转换包装类型 编号基本数据类型包装类型1byteByte2shortShort3charCharacter4intInteger5longLonLong6floatFloat7doubleDouble8booleanBoolean 使用包装类型的原因 java是一…

【JDK切换】切换JDK版本

众所周知&#xff1a; 现在springboot框架创建的jdk版本已经没有1.8了&#xff0c;但是有的项目运用的还是1.8&#xff0c;但新创建却不得不下载个新版本JDK&#xff0c;比如JDK22&#xff1a;https://download.csdn.net/download/sh1307212321/89556578 那么问题来了&#x…

DC系列靶场---DC 2靶场的渗透测试(一)

信息收集 Nmap扫描 nmap -sV -p- -sC -T4 172.30.1.141 域名解析 echo 172.30.1.141 dc-2 >> /etc/hosts 目录枚举 gobuster dir -u http://172.30.1.141 -w work/lab/CTF/ATT_CK_01/SecLists-master/Discovery/Web-Content/big.txt -x .php,.rar,.html,.zip -t 20 -b…

【深度学习】PyTorch框架(3):优化与初始化

1.引言 在本文中&#xff0c;我们将探讨神经网络的优化与初始化技术。随着神经网络深度的增加&#xff0c;我们会遇到多种挑战。最关键的是确保网络中梯度流动的稳定性&#xff0c;否则可能会遭遇梯度消失或梯度爆炸的问题。因此&#xff0c;我们将深入探讨以下两个核心概念&a…

【入门基础】java泛型和通配符详解

【入门基础】java泛型和通配符详解 文章目录 前言泛型类泛型方法泛型接口通配符&#xff08;Wildcards&#xff09;使用场景非主流用法 总结 前言 Java泛型&#xff08;Generics&#xff09;是JDK 5中引入的一个新特性&#xff0c;它提供了编译时类型安全检测机制&#xff0c;…

【机器学习】Cross Validation: 强化模型泛化能力的利器

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Cross Validation: 强化模型泛化能力的利器引言什么是Cross Validation&#xf…

Ubantu 使用 docker 配置 + 远程部署 + 远程开发

大家好我是苏麟 , Ubantu 一些配置 . 视频 : 服务器很贵&#xff1f;搞台虚拟机玩玩&#xff01;保姆级 Linux 远程开发教程_哔哩哔哩_bilibili Docker安装及配置 安装命令 : sudo apt install docker.io 查看版本号 : docker -v 查看虚拟机地址命令 : ifconfig 虚拟机地址 或…

pytorch的17个Loss和10个优化函数

pytorch的17个Loss和10个优化函数 一、 17个Loss 函数二、10个优化器 一、 17个Loss 函数 二、10个优化器 开始&#xff1a;

AI数字人+数字孪生IOC智慧运营平台:提升业务场景智慧化运维水平

在人工智能时代&#xff0c;“AI数字人数字孪生IOC智慧运营平台”&#xff0c;不仅能够提升数字孪生系统的人机交互体验&#xff0c;还能实现高效的运维管理&#xff0c;可以有效推动多领域场景数字化转型和智能化升级。 案例分享 深圳新一代产业园NEXT PARK交流中心 深圳新一…

coze.com收费了怎么办?这个方法让你继续免费使用!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 另辟蹊径 📒📝 替代方案📝 测试⚓️ 相关链接 ⚓️📖 介绍 📖 突如其来的变化总是让人措手不及!那个曾经免费为我们提供无限便利的coze.com,竟然也悄然迈入了收费的行列。我们精心创建的Bot,那个每天陪伴我们工作、…

第十四届蓝桥杯省赛C++C组C题【三国游戏】题解(AC)

解题思路 由于三种国家都有获胜的可能&#xff0c;所以我们需要分别枚举 X , Y , Z X,Y,Z X,Y,Z 获胜的情况。 设 X X X 获胜&#xff0c;那么对于第 i i i 个事件的贡献为 a [ i ] − ( b [ i ] c [ i ] ) a[i]-(b[i]c[i]) a[i]−(b[i]c[i])&#xff0c;根据贪心的策略…

C++写一个线程池

C写一个线程池 文章目录 C写一个线程池设计思路测试数据的实现任务类的实现线程池类的实现线程池构造函数线程池入口函数队列中取任务添加任务函数线程池终止函数 源码 之前用C语言写了一个线程池&#xff0c;详情请见&#xff1a; C语言写一个线程池 这次换成C了&#xff01;…

object-C 解答算法:合并两个有序数组(leetCode-88)

合并两个有序数组(leetCode-88) 题目如下图:(也可以到leetCode上看完整题目,题号88) 首先搞懂,什么叫“非递减顺序” 非递减顺序,是指一个序列中的元素从前往后&#xff08;或从左到右&#xff09;保持不减少或相等。 这意味着序列中的元素可以保持相同的值&#xff0c;但不会…

网络云服务1

第一章 虚拟私有云 前言 在整个ICT基础设施的发展过程中&#xff0c;网络资源一直是必不可少的存在。有了网络资源&#xff0c;设备与设备间&#xff0c;系统与系统间才有了交流&#xff0c;才能更好地去支撑企业业务的快速发展。本章将带领大家了解华为云上的网络服务。 网…