欧拉角——旋转矩阵阵
def Euler_angles_to_rotation_matrix(r,p,y):
sinp = math.sin(math.radians(p / 2))
siny = math.sin(math.radians(y / 2))
sinr = math.sin(math.radians(r / 2))
cosp = math.cos(math.radians(p / 2))
cosy = math.cos(math.radians(y / 2))
cosr = math.cos(math.radians(r / 2))
w = cosr * cosp * cosy + sinr * sinp * siny
x = sinr * cosp * cosy - cosr * sinp * siny
y = cosr * sinp * cosy + sinr * cosp * siny
z = cosr * cosp * siny - sinr * sinp * cosy
return x ,y ,z ,w
旋转矩阵——欧拉角
def Euler_angles_to_rotation_matrix(x,y,z,w):
r = math.atan2(2 * (w * x + y * z), 1 - 2 * (x * x + y * y))
r = r / math.pi * 180
p = math.asin(2 * (w * y - z * x))
p = p / math.pi * 180
y = math.atan2(2 * (w * z + x * y), 1 - 2 * (y * y + z * z))
y = y / math.pi * 180
return r ,p ,y
旋转矩阵——欧拉角
import math
import numpy as np
# Checks if a matrix is a valid rotation matrix.
def isRotationMatrix(R):
Rt = np.transpose(R)
shouldBeIdentity = np.dot(Rt, R)
I = np.identity(3, dtype=R.dtype)
n = np.linalg.norm(I - shouldBeIdentity)
return n < 1e-6
# Calculates rotation matrix to euler angles
# The result is the same as MATLAB except the order
# of the euler angles ( x and z are swapped ).
def rotationMatrixToEulerAngles(R):
assert (isRotationMatrix(R))
sy = math.sqrt(R[0, 0] * R[0, 0] + R[1, 0] * R[1, 0])
singular = sy < 1e-6
if not singular:
x = math.atan2(R[2, 1], R[2, 2])
y = math.atan2(-R[2, 0], sy)
z = math.atan2(R[1, 0], R[0, 0])
else:
x = math.atan2(-R[1, 2], R[1, 1])
y = math.atan2(-R[2, 0], sy)
z = 0
return np.array([x, y, z])
aa = np.array([[-0.8508201,-0.27519914,0.44762773],
[-0.34178448,-0.35720245,-0.86924667]
,[ 0.39910966,-0.89256475,0.20985623]])
四元数——旋转矩阵
from scipy.spatial.transform import Rotation as R
def siyuanshu2rotation_matrix(Rq):
Rm = R.from_quat(Rq)
rotation_matrix = Rm.as_matrix()
return rotation_matrix
siyuanshu2rotation_matrix([ -0.2437,0.93744,0.059494,0.24130])
欧拉角——旋转矩阵
import math
def eulerAnglesToRotationMatrix(theta):
R_x = np.array([[1, 0, 0],
[0, math.cos(theta[0]), -math.sin(theta[0])],
[0, math.sin(theta[0]), math.cos(theta[0])]
])
R_y = np.array([[math.cos(theta[1]), 0, math.sin(theta[1])],
[0, 1, 0],
[-math.sin(theta[1]), 0, math.cos(theta[1])]
])
R_z = np.array([[math.cos(theta[2]), -math.sin(theta[2]), 0],
[math.sin(theta[2]), math.cos(theta[2]), 0],
[0, 0, 1]
])
R = np.dot(R_z, np.dot(R_y, R_x))
return R
eulerAnglesToRotationMatrix([176,0,0])
Comments NOTHING