赞
踩
Eigen::Matrix3d rotation_matrix;
rotation_matrix<< 0.707107, -0.707107, 0,
0.707107, 0.707107, 0,
0, 0, 1;
//直接构造 Eigen::Quaterniond(1,0,0,0); // 从旋转矩阵 Eigen::Matrix3d R; R<< 0.707107, -0.707107, 0, 0.707107, 0.707107, 0, 0, 0, 1; Eigen::Quaterniond q(R); // 从角轴 Eigen::AngleAxisd rotation_vector(M_PI/4, Eigen::Vector3d(0,0,1)); //绕z轴旋转45度 Eigen::Quaterniond q(rotation_vector); //从数组, 数组的顺序应该是[x y z w] double array[4]= {1,2,3,4}; Eigen::Quaterniond q1(array); //相当于直接构造 q1(4,1,2,3);
// 1.
q.coeffs() // x, y, z, w 的顺序
q.vec() // x, y, z 虚数部分
q.x();
q.y();
q.z();
q.w();
normalize()
:直接改原始的q,normalized() const
:返回一个归一化的q,原始不改变toRotationMatrix
norm()
squaredNorm()
conjugate()
inverse()
dot
Eigen::Vector3d euler_angle(X, Y, Z)
, euler_angle(0) : roll …// 1. 可以从旋转矩阵得到欧拉角
Eigen::Vector3d euler_angles = rotation_matrix.eulerAngles(2, 1, 0); // 旋转顺序z,y,x; 得到欧拉角(yaw, pitch roll)
// 1. 从角轴
Eigen::AngleAxisd rotation_vector(M_PI/4, Eigen::Vector3d(0,0,1)); //绕z轴旋转45度, 注意,角度制:弧度,轴:必须是单位的
// 2. 从四元数
Eigen::Quaterniond q1(1,1,1,1);
Eigen::AngleAxisd rotation_vector(q1); // q1可以不是归一化的,自动取q1的归一化之后的q取构造
// 3.从旋转矩阵
Eigen::Matrix3d R;
R<< 0.707107, -0.707107, 0,
0.707107, 0.707107, 0,
0, 0, 1;
Eigen::AngleAxisd rotation_vector(R);
toRotationMatrix() const
angle()
axis()
自动单位化输出inverse() const
// 1. 可以从角轴和平移 Eigen::AngleAxisd n(M_PI/4, Eigen::Vector3d(0,0,1)); Eigen::Vector3d t(1,1,1); Eigen::Isometry3d T = Eigen::Isometry3d::Identity(); T.rotate(n); T.pretranslate(t); // 2. 可以从四元数和平移 Eigen::AngleAxisd n(M_PI/4, Eigen::Vector3d(0,0,1)); Eigen::Quaterniond q(n); Eigen::Vector3d t(1,1,1); Eigen::Isometry3d T = Eigen::Isometry3d::Identity(); T.rotate(q); T.pretranslate(t); // 3. 可以从旋转矩阵和平移 Eigen::AngleAxisd n(M_PI/4, Eigen::Vector3d(0,0,1)); Eigen::Matrix3d R = n.matrix(); Eigen::Vector3d t(1,1,1); Eigen::Isometry3d T = Eigen::Isometry3d::Identity(); T.rotate(R); T.pretranslate(t); // 4. 除了创建好对象再传递 旋转 和平移之外,还可以以旋转创建,再传递平移,以下以旋转矩阵为例,其他两种一样可以 Eigen::Isometry3d T(R); T.pretranslate(t);
p = T*v
T内部重载了符号,虽然T是四维的, v和p都是3维的,但是相当于p = Rv+t的操作translation()
取平移部分rotation()
取旋转矩阵单位四元数: ( q 0 , q 1 , q 2 , q 3 ) (q_0, q_1, q_2, q_3) (q0,q1,q2,q3) 角轴: n θ n\theta nθ
θ = 2 a r c cos q 0 \theta=2arc \cos q_0 θ=2arccosq0
n = [ n x , n y , n z ] T = [ q 1 , q 2 , q 3 ] T / s i n θ 2 n= [n_x, n_y, n_z]^T = [q_1, q_2, q_3]^T/sin{\frac{\theta}{2}} n=[nx,ny,nz]T=[q1,q2,q3]T/sin2θ
q = [ q 0 , q 1 , q 2 , q 3 ] T = [ cos θ 2 , n s i n θ 2 , ] T = [ cos θ 2 , n x s i n θ 2 , n y s i n θ 2 n z s i n θ 2 ] T q = [q_0, q_1, q_2, q_3]^T = [\cos{\frac{\theta}{2}}, \textbf{n}sin {\frac{\theta}{2}},]^T=[\cos{\frac{\theta}{2}}, n_x sin {\frac{\theta}{2}},n_y sin {\frac{\theta}{2}}n_z sin {\frac{\theta}{2}}]^T q=[q0,q1,q2,q3]T=[cos2θ,nsin2θ,]T=[cos2θ,nxsin2θ,nysin2θnzsin2θ]T
单位四元数: ( q 0 , q 1 , q 2 , q 3 ) (q_0, q_1, q_2, q_3) (q0,q1,q2,q3) 旋转矩阵R:
R
=
[
1
−
2
q
2
2
−
2
q
3
2
2
q
1
q
2
−
2
q
0
q
3
2
q
1
q
3
+
2
q
0
q
2
2
q
1
q
2
+
2
q
0
q
3
1
−
2
q
1
2
−
2
q
3
2
2
q
2
q
3
−
2
q
0
q
1
2
q
1
q
3
−
2
q
0
q
2
2
q
2
q
3
+
2
q
0
q
1
1
−
2
q
1
2
−
2
q
2
2
]
R= \left[
q 0 = t r ( R ) + 1 2 t r ( R ) 代 表 迹 q_0= \frac{\sqrt{tr(R)+1}}{2} \space\space tr(R)代表迹 q0=2tr(R)+1 tr(R)代表迹
q 1 = m 23 − m 32 4 q 0 q_1 =\frac{m_{23}-m_{32}}{4q_0} q1=4q0m23−m32
q 2 = m 31 − m 13 4 q 0 q_2 = \frac{m_{31}-m_{13}}{4q_0} q2=4q0m31−m13
q 3 = m 12 − m 21 4 q 0 q_3 =\frac{m_{12}-m_{21}}{4q_0} q3=4q0m12−m21
注意:当 q 0 → 0 q_0\rightarrow 0 q0→0的时候,也就是R的迹趋近-1,其他三个分量很大,导致解不稳定,则应用下面的公式转化
t = 1 + m 11 − m 22 − m 33 t= \sqrt{1+m_{11}-m_{22}-m_{33}}\space\space t=1+m11−m22−m33
q 0 = m 32 − m 23 t q_0 =\frac{m_{32}-m_{23}}{t} q0=tm32−m23
q 1 = t 4 q_1 =\frac{t}{4} q1=4t
q 2 = m 31 + m 13 t q_2 = \frac{m_{31}+m_{13}}{t} q2=tm31+m13
q 3 = m 12 + m 21 t q_3 =\frac{m_{12}+m_{21}}{t} q3=tm12+m21
t = 1 − m 11 + m 22 − m 33 t= \sqrt{1-m_{11}+m_{22}-m_{33}}\space\space t=1−m11+m22−m33
q 0 = m 13 − m 31 t q_0 =\frac{m_{13}-m_{31}}{t} q0=tm13−m31
q 1 = m 12 + m 21 t q_1 = \frac{m_{12}+m_{21}}{t} q1=tm12+m21
q 2 = t 4 q_2 = \frac{t}{4} q2=4t
q 3 = m 32 + m 23 t q_3 =\frac{m_{32}+m_{23}}{t} q3=tm32+m23
t = 1 − m 11 − m 22 + m 33 t= \sqrt{1-m_{11}-m_{22}+m_{33}}\space\space t=1−m11−m22+m33
q 0 = m 21 − m 12 t q_0 =\frac{m_{21}-m_{12}}{t} q0=tm21−m12
q 1 = m 13 + m 31 t q_1 =\frac{m_{13}+m_{31}}{t} q1=tm13+m31
q 2 = m 23 − m 32 t q_2 = \frac{m_{23}-m_{32}}{t} q2=tm23−m32
q 3 = t 4 q_3 =\frac{t}{4} q3=4t
单位四元数: ( q 0 , q 1 , q 2 , q 3 ) (q_0, q_1, q_2, q_3) (q0,q1,q2,q3) 欧拉角: ( y a w , p i t c h , r o l l ) (yaw, pitch, roll) (yaw,pitch,roll), 分别为绕Z轴、Y轴、X轴的旋转角度,记作 ψ , θ , ϕ \psi,\theta, \phi ψ,θ,ϕ
r o l l = ϕ = arctan ( 2 ( q 0 q 1 + q 2 q 3 ) 1 − 2 ( q 1 2 + q 2 2 ) ) roll = \phi = \arctan(\frac{2(q_0q_1+q_2q_3)}{1-2(q_1^2+q_2^2)}) roll=ϕ=arctan(1−2(q12+q22)2(q0q1+q2q3))
p i t c h = θ = arcsin ( 2 ( q 0 q 2 − q 3 q 1 ) ) pitch = \theta =\arcsin(2(q_0q_2-q_3q_1)) pitch=θ=arcsin(2(q0q2−q3q1))
y a w = ψ = arctan ( 2 ( q 0 q 3 + q 1 q 2 ) 1 − 2 ( q 2 2 + q 3 2 ) ) yaw = \psi = \arctan(\frac{2(q_0q_3+q_1q_2)}{1-2(q_2^2+q_3^2)}) yaw=ψ=arctan(1−2(q22+q32)2(q0q3+q1q2))
q
=
[
q
0
q
1
q
2
q
3
]
=
[
w
x
y
z
]
=
[
cos
ψ
2
cos
θ
2
cos
ϕ
2
+
sin
ψ
2
sin
θ
2
sin
ϕ
2
cos
ψ
2
cos
θ
2
sin
ϕ
2
−
sin
ψ
2
sin
θ
2
cos
ϕ
2
cos
ψ
2
sin
θ
2
cos
ϕ
2
+
sin
ψ
2
cos
θ
2
sin
ϕ
2
sin
ψ
2
cos
θ
2
cos
ϕ
2
−
cos
ψ
2
sin
θ
2
sin
ϕ
2
]
q=\left[
旋转角 θ \theta θ和单位方向轴 n = ( x , y , z ) n=(x, y, z) n=(x,y,z)
R
=
[
cos
θ
+
x
2
(
1
−
cos
θ
)
−
z
sin
θ
+
x
y
(
1
−
cos
θ
)
y
sin
θ
+
x
z
(
1
−
cos
θ
)
z
sin
θ
+
x
y
(
1
−
cos
θ
)
cos
θ
+
y
2
(
1
−
cos
θ
)
−
x
sin
θ
+
y
z
(
1
−
cos
θ
)
−
y
sin
θ
+
x
z
(
1
−
cos
θ
)
x
sin
θ
+
y
z
(
1
−
cos
θ
)
cos
θ
+
z
2
(
1
−
cos
θ
)
]
R=\left[
旋转矩阵到角轴
θ
=
arccos
(
t
r
(
R
)
−
1
2
)
\theta = \arccos(\frac{tr(R)-1}{2})
θ=arccos(2tr(R)−1)
n
=
R
n
\textbf{n} = R\textbf{n}
n=Rn
关于旋转轴
n
\textbf{n}
n,由于旋转轴的向量在旋转后不会变化,即
n
=
R
n
n=Rn
n=Rn,也说明n是矩阵R的特征值1对应的特征向量,求解此方程,再归一化即可。
欧拉角: ( y a w , p i t c h , r o l l ) (yaw, pitch, roll) (yaw,pitch,roll), 分别为绕Z轴、Y轴、X轴的旋转角度,记作 ψ , θ , ϕ \psi,\theta, \phi ψ,θ,ϕ。B:Body系,W: word系
R
b
w
=
[
cos
ψ
cos
θ
sin
ψ
cos
θ
−
sin
θ
cos
ψ
sin
θ
sin
ϕ
−
sin
ψ
cos
ϕ
sin
ψ
sin
θ
sin
ϕ
+
cos
ψ
cos
ϕ
cos
θ
sin
ϕ
cos
ψ
sin
θ
cos
ϕ
+
sin
ψ
sin
ϕ
sin
ψ
sin
θ
cos
ϕ
−
cos
ψ
sin
ϕ
cos
θ
cos
ϕ
]
R_{bw}= \left[
R
w
b
=
R
b
w
T
=
[
cos
ψ
cos
θ
cos
ψ
sin
θ
sin
ϕ
−
sin
ψ
cos
ϕ
cos
ψ
sin
θ
cos
ϕ
+
sin
ψ
sin
ϕ
sin
ψ
cos
ϕ
sin
ψ
sin
θ
sin
ϕ
+
cos
ψ
cos
ϕ
sin
ψ
sin
θ
cos
ϕ
−
cos
ψ
sin
ϕ
−
sin
θ
cos
θ
sin
ϕ
cos
θ
cos
ϕ
]
R_{wb}=R_{bw}^T= \left[
p i t c h = θ = arctan ( − m 31 m 32 2 + m 33 2 ) pitch = \theta = \arctan(\frac{-m_{31}}{\sqrt{m_{32}^2+m_{33}^2}}) pitch=θ=arctan(m322+m332 −m31)
y
a
w
=
ψ
=
arctan
(
m
21
m
11
)
yaw = \psi = \arctan(\frac{m_{21}}{m_{11}})
yaw=ψ=arctan(m11m21)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。