全站数据
8 4 2 0 5 8 1

四元数,相对变换

财经全球眼 | 简单学习,快乐成才!         
问题更新日期:2024-11-03 08:12:14

问题描述

四元数,相对变换希望能解答下
精选答案
最佳答案

一号位姿 q1 = [0.35, 0.2, 0.3, 0.1],t1=[0.3, 0.1, 0.1]。

二号位姿 q2=[-0.5, 0.4, -0.1, 0.2], t2=[-0.1, 0.5, 0.3]。

某点在一号坐标系下坐标为p=[0.5, 0, 0.2]。求p在二号坐标系下的坐标。

假设在世界坐标系中p点的坐标为P。

用四元数做旋转则有(在Eigen中四元数旋转为q×v(左乘),数学中则为q×v×q^-1),进行世界坐标到机器人坐标的坐标变换:

q1 × P + t1 = p1

q2 × P + t2 = p2

两式联立消除P,得到:

p2 = q2 × q1^-1 × (p1 - t1) + t2

#include <iostream>

using namespace std;

#include <eigen3/Eigen/Core>

#include <eigen3/Eigen/Geometry>

int main()

{

//四元数

Eigen::Quaterniond q1 = Eigen::Quaterniond(0.35, 0.2, 0.3, 0.1).normalized();

Eigen::Quaterniond q2 = Eigen::Quaterniond(-0.5, 0.4, -0.1, 0.2).normalized();

//平移向量

Eigen::Vector3d t1 = Eigen::Vector3d(0.3, 0.1, 0.1);

Eigen::Vector3d t2 = Eigen::Vector3d(-0.1, 0.5, 0.3);

//目标向量

Eigen::Vector3d p1 = Eigen::Vector3d(0.5, 0, 0.2);

Eigen::Vector3d p2;

其他回答

四元数是一种数学工具,用于表示三维空间中的旋转。它由一个实部和三个虚部组成,可以用来进行相对变换。相对变换是指将一个坐标系相对于另一个坐标系进行旋转和平移的操作。通过使用四元数进行相对变换,可以更高效地进行旋转操作,避免了矩阵运算的复杂性。四元数的乘法运算可以实现多个旋转的组合,而不需要进行矩阵乘法。因此,四元数在计算机图形学和机器人学等领域中得到广泛应用。