Example 1: rotation matrix to euler angles python cv2
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
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])
Example 2: euler angle to rotation vector python
import math
import numpy as np
def euler_to_rotVec(yaw, pitch, roll):
Rmat = euler_to_rotMat(yaw, pitch, roll)
theta = math.acos(((Rmat[0, 0] + Rmat[1, 1] + Rmat[2, 2]) - 1) / 2)
sin_theta = math.sin(theta)
if sin_theta == 0:
rx, ry, rz = 0.0, 0.0, 0.0
else:
multi = 1 / (2 * math.sin(theta))
rx = multi * (Rmat[2, 1] - Rmat[1, 2]) * theta
ry = multi * (Rmat[0, 2] - Rmat[2, 0]) * theta
rz = multi * (Rmat[1, 0] - Rmat[0, 1]) * theta
return rx, ry, rz
def euler_to_rotMat(yaw, pitch, roll):
Rz_yaw = np.array([
[np.cos(yaw), -np.sin(yaw), 0],
[np.sin(yaw), np.cos(yaw), 0],
[ 0, 0, 1]])
Ry_pitch = np.array([
[ np.cos(pitch), 0, np.sin(pitch)],
[ 0, 1, 0],
[-np.sin(pitch), 0, np.cos(pitch)]])
Rx_roll = np.array([
[1, 0, 0],
[0, np.cos(roll), -np.sin(roll)],
[0, np.sin(roll), np.cos(roll)]])
rotMat = np.dot(Rz_yaw, np.dot(Ry_pitch, Rx_roll))
return rotMat
roll = 2.6335
pitch = 0.4506
yaw = 1.1684
print "roll = ", roll
print "pitch = ", pitch
print "yaw = ", yaw
print ""
rx, ry, rz = euler_to_rotVec(yaw, pitch, roll)
print rx, ry, rz