code: def makeQ(r1, r2, r3, r4=0):
      
      Q = np.asarray([
          [r4, -r3, r2, r1],
          [r3, r4, -r1, r2],
          [-r2, r1, r4, r3],
          [-r1, -r2, -r3, r4]])
      return Q
docs: matrix involved in quaternion rotation