主要内容

meanrot

四元数是指旋转

自从R2018b

描述

例子

quatAverage= meanrot (皮疹)返回的元素的平均旋转皮疹沿着第一个数组维度的大小不等于1。

  • 如果皮疹是一个矢量,meanrot(皮疹)返回元素的平均旋转。

  • 如果皮疹是一个矩阵,meanrot(皮疹)返回一个行向量,其中包含每一列的平均旋转。

  • 如果皮疹是一个多维数组,那么mearot(皮疹)运作的第一个数组维度的大小不等于1,治疗作为向量的元素。这个维度变成1,而其他维度的大小保持不变。

meanrot函数可实现输入四元数,皮疹之前计算的意思。

quatAverage= meanrot (皮疹,昏暗的)返回的平均尺寸一起旋转昏暗的。例如,如果皮疹是一个矩阵,然后呢meanrot(皮疹,2)是一个列向量包含每一行的平均值。

quatAverage= meanrot (___,nanflag)指定是否包括省略值计算的任何以前的语法。meanrot(皮疹、“includenan”)包括所有在计算值意思是(皮疹、“omitnan”)忽略了它们。

例子

全部折叠

创建一个矩阵的四元数对应于三个欧拉角。

eulerAngles = [40 20 10;50 10 5;45 70 1];皮疹=四元数(eulerAngles,“eulerd”,“ZYX股票”,“帧”);

确定的平均旋转四元数所代表的。平均旋转转换为欧拉角度的可读性。

quatAverage = meanrot(皮疹)
quatAverage =四元数我0.88863 - 0.062598 + 0.27822 j + 0.35918 k
eulerAverage = eulerd (quatAverage,“ZYX股票”,“帧”)
eulerAverage =1×345.7876 32.6452 6.0407

使用meanrot四元数的序列平均附加噪声。

创建一个向量1的e6四元数的距离,定义的经销函数,从四元数(1,0,0,0)是正态分布。情节相对应的欧拉角的四元数向量。

nrows = 1 e6;ax = 2 *兰德(nrows 3) - 1;ax = ax. /√(sum (ax。^ 2, 2));ang = 0.5 * randn(大小(ax, 1), 1);q =四元数(ax。* ang,“rotvec”);noisyEulerAngles = eulerd (q,“ZYX股票”,“帧”);图(1)次要情节(3 1 1)情节(noisyEulerAngles(: 1)标题(z轴的)ylabel (的旋转(度))举行次要情节(1、2)情节(noisyEulerAngles(:, 2)标题(“轴”)ylabel (的旋转(度))举行次要情节(3、1,3)情节(noisyEulerAngles(:, 3)标题(“轴”)ylabel (的旋转(度))举行

图包含3轴对象。坐标轴对象与z轴标题1,ylabel旋转(度)包含一个类型的对象。坐标轴对象与标题2轴,ylabel旋转(度)包含一个类型的对象。坐标轴对象与标题3轴,ylabel旋转(度)包含一个类型的对象。

使用meanrot确定平均四元数给定的四元数的向量。转化为欧拉角和策划的结果。

qAverage = meanrot (q);qAverageInEulerAngles = eulerd (qAverage,“ZYX股票”,“帧”);图(1)次要情节(3 1 1)情节的(nrows 1) * qAverageInEulerAngles(: 1)标题(z轴的次要情节(3、1、2)情节的(nrows 1) * qAverageInEulerAngles(:, 2)标题(“轴”次要情节(3,1,3)情节的(nrows 1) * qAverageInEulerAngles(:, 3)标题(“轴”)

图包含3轴对象。坐标轴对象与z轴标题1,ylabel旋转(度)包含2线类型的对象。坐标轴对象与标题2轴,ylabel旋转(度)包含2线类型的对象。坐标轴对象与标题3轴,ylabel旋转(度)包含2线类型的对象。

meanrot算法

meanrot函数输出一个四元数的最小平方弗罗贝尼乌斯规范之间的差异旋转矩阵。考虑两个四元数:

  • q0处代表没有旋转。

  • q90代表一个90度旋转的x设在。

q0 =四元数([0 0 0],“eulerd”,“ZYX股票”,“帧”);q90 =四元数([0 0 90),“eulerd”,“ZYX股票”,“帧”);

创建一个四元数扫描,qSweep,代表了从0到180度的旋转x设在。

eulerSweep = (0:1:180) ';qSweep =四元数([0(元素个数(eulerSweep), 2), eulerSweep),“eulerd”,“ZYX股票”,“帧”);

转换q0处,q90,qSweep旋转矩阵。在一个循环中,计算每个成员的指标最小化的四元数扫描。情节欧拉扫描的结果并返回值对应于最低度规的。

r0 = rotmat (q0,“帧”);r90 = rotmat (q90,“帧”);rSweep = rotmat (qSweep,“帧”);metricToMinimize = 0(大小(rSweep, 3), 1);i = 1:元素个数(qSweep) metricToMinimize (i) =规范((rSweep (:,:, i) - r0),“摇来摇去”)。^ 2 +规范(rSweep (:,:, i) - r90),“摇来摇去”)。^ 2;结束情节(eulerSweep metricToMinimize)包含(“欧拉扫描(度)”)ylabel (“指标最小化”)

图包含一个坐标轴对象。坐标轴对象包含欧拉扫描(度),ylabel指标最小化包含一个类型的对象。

[~,eulerIndex] = min (metricToMinimize);eulerSweep (eulerIndex)
ans = 45

的最低指标对应于欧拉角45度。也就是说,meanrot定义之间的平均quaterion ([0 0 0],“ZYX股票”,“框架”)四元数([0 0 90),“ZYX股票”,“框架”)作为四元数([0 0 45],“ZYX股票”,“框架”)。调用meanrotq0处q90验证相同的结果。

eulerd (meanrot ([q0 q90]),“ZYX股票”,“帧”)
ans =1×30 0 45.0000

限制

度规,meanrot用于确定平均旋转四元数明显远不是唯一的。重复上述实验的四元数由180度。

q180 =四元数([0 0 180),“eulerd”,“ZYX股票”,“帧”);r180 = rotmat (q180,“帧”);i = 1:元素个数(qSweep) metricToMinimize (i) =规范((rSweep (:,:, i) - r0),“摇来摇去”)。^ 2 +规范(rSweep (:,:, i) - r180),“摇来摇去”)。^ 2;结束情节(eulerSweep metricToMinimize)包含(“欧拉扫描(度)”)ylabel (“指标最小化”)

图包含一个坐标轴对象。坐标轴对象包含欧拉扫描(度),ylabel指标最小化包含一个类型的对象。

[~,eulerIndex] = min (metricToMinimize);eulerSweep (eulerIndex)
ans = 49

四元数通常计算出旋转意味着彼此接近,这使得这个示例中所示的边界情况不太可能在实际的应用程序。平均两个四元数明显远,使用slerp函数。重复实验使用slerp,并验证返回四元数的意思是更直观的对大距离。

qMean = slerp (q0 q180, 0.5);q0_q180 = eulerd (qMean,“ZYX股票”,“帧”)
q0_q180 =1×30 0 90.0000

输入参数

全部折叠

四元数的计算均值,指定为一个标量、向量,矩阵,或四元数的多维数组。

数据类型:四元数

维操作,指定为一个正整数标量。如果没有指定值,默认的是第一个数组维度的大小不等于1。

昏暗的显示的尺寸长度减少到1。的大小(quatAverage dim)1,而所有其他维度的大小保持不变。

数据类型:|

条件,指定这些值之一:

  • “includenan”——包括值时,计算平均旋转,导致

  • “omitnan”——忽略所有在输入值。

数据类型:字符|字符串

输出参数

全部折叠

平均旋转四元数,返回为一个标量,矢量、矩阵,或多维数组。

数据类型:|

算法

meanrot决定了一个四元数的意思是, ¯ ,根据[1] ¯ 是最小的四元数的平方弗罗贝尼乌斯规范之间的差异旋转矩阵:

¯ = 参数 最小值 年代 3 = 1 n 一个 ( ) 一个 ( ) F 2

引用

[1]Markley f·兰迪斯,杨,约翰·卢卡斯Crassidis和班Oshman。“平均四元数”。杂志的指导、控制和动力学。问题4卷。30日,2007年,页1193 - 1197。

扩展功能

C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。

版本历史

介绍了R2018b

另请参阅

功能

对象