import sympy as sm import sympy.physics.mechanics as me sm.init_printing() q1, q2, q3, q4 = sm.symbols('q1:5') l1, l2, l3, l4 = sm.symbols('l1:5') N, A, B, C = sm.symbols('N, A, B, C', cls=me.ReferenceFrame) A.orient_body_fixed(N, (q1, q2, 0), 'ZXZ') print(A.dcm(N)) B.orient_axis(A, q3, A.x) C.orient_body_fixed(B, (q3, q4, 0), 'XZX') r_P1_P2 = l1 * A.z print(r_P1_P2) r_P2_P3 = l2 * B.z print(r_P2_P3) r_P3_P4 = l3 *C.z - l4 *C.y print(r_P3_P4) r_P1_P4 = r_P1_P2 + r_P2_P3 + r_P3_P4 print(r_P1_P4) print(r_P1_P4.express(B)) print(r_P1_P4.free_symbols(N))