Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- import numpy as np
- # RPY/Euler angles to Rotation Vector
- def euler_to_rotVec(yaw, pitch, roll):
- # compute the rotation matrix
- 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)]])
- # R = RzRyRx
- 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)
Add Comment
Please, Sign In to add comment