1. Write down a Python program to visualize ZXZ Euler angles.
A.
B.
This is how ZXZ Euler angles works
- Rotate along Z-axis by α
- Rotate along X-axis of the new frame by β
- Rotate along Z-axis of the new frame by γ
Start from 9-Orientation&Rotation practice code, implement ZXZ Euler angles and add code to change α, β, γ values in the following way.
i. If you press or repeat a key, the value of α, β, γ should be changed as shown in the table:
|
Key |
Transformation |
|
A |
Increase α by 10° |
|
Z |
Decrease α by 10° |
|
S |
Increase β by 10° |
|
X |
Decrease β by 10° |
|
D |
Increase γ by 10° |
|
C |
Decrease γ by 10° |
|
V |
Initialize orientation |
C. Hint: You do not need to store a composed rotation matrix as a global variable. You can just store α, β, γ as global variables.
- Set the window title to your student ID and the window size to (480,480).
- Expected result: Uploaded LabAssignment9-1.mp4
- Files to submit: A Python source file (Name the file whatever you want (in English). Extension should be .py)
2. Write down a Python program to compare 4 orientation interpolation methods.
A. B.
First, implement following functions:
exp & log functions
- exp(rv)
- Converts a rotation vector to a rotation matrix
- You can use Rodrigues’ rotation formula or the method in 9-Orientation& Rotation
- Returns a rotation matrix
- log(R)
- Converts a rotation matrix to a rotation vector
- You can use the method in 9-Orientation& Rotation slides.
- Returns a rotation vector (the length of the vector is the rotation angle)
Interpolation functions:
i. slerp(R1, R2, t) – slerp
1. R1 & R2: rotation matrices for start & end orientations
C.
D.
E. F.
G.
i. All interpolation functions return a rotation matrix
iv. v. vi. vii.
H. I.
D key: Toggle interpolateZYXEuler() result F key: Toggle interpolateRotMat() result
Z key: Hide all results
X key: Show all results
Set the window title to your student ID and the window size to (480,480). Expected result: Uploaded LabAssignment9-2.mp4
ii. interpolateRotVec(rv1, rv2, t) – interpolate each element of two vectors 1. rv1 & rv2: rotation vectors for start & end orientations
iii. interpolateZYXEuler(euler1, euler2, t) – interpolate each element of two euler angle tuples
iv.
1. euler1 & euler2: tuples of ZYX Euler angles for start & end orientations (euler1[0]: xang, euler1[1]: yang, euler1[2]: zang)
interpolateRotMat(R1, R2, t) – interpolate each element of two matrices
1. R1 & R2: rotation matrices for start & end orientations For all interpolation functions:
ii.
The parameter t ranges from 0.0 to 1.0
Start from the uploaded code skeleton (LabAssignment9-2-code-skeleton.py). You will need to use
- The given lerp() for interpolateRotVec(), interpolateZYXEuler(), interpolateRotMat()
- The given ZYXEulerToRotMat() for interpolateZYXEuler()
- Your exp(), log() implementation for slerp(), interpolateRotVec()
Program usage (already implemented in the code skeleton):
- When the program is run, only slerp() result is visible
- A key: Toggle slerp() result
- S key: Toggle interpolateRotVec() result
J. Files to submit: A Python source file (Name the file whatever you want (in English). Extension should be .py)




