code: def quat_rotate(rotation, vector):
      
  
      def quat_mult_point(q, w):
          return (q[3] * w[0] + q[1] * w[2] - q[2] * w[1],
                  q[3] * w[1] + q[2] * w[0] - q[0] * w[2],
                  q[3] * w[2] + q[0] * w[1] - q[1] * w[0],
                  -q[0] * w[0] - q[1] * w[1] - q[2] * w[2])
  
      q = quat_mult_point(rotation, vector)
      q = tf.transformations.quaternion_multiply(
          q, tf.transformations.quaternion_inverse(rotation))
      return [q[0], q[1], q[2]]
docs: Rotate a vector according to a quaternion. Equivalent to the C++ method tf::quatRotate
      :param rotation: the rotation
      :param vector: the vector to rotate
      :return: the rotated vector