code: def euler(self):
          
          if self._euler is None:
              if self._q is not None:
                  # try to get euler angles from q via DCM
                  self._dcm = self._q_to_dcm(self.q)
                  self._euler = self._dcm_to_euler(self.dcm)
              elif self._dcm is not None:
                  # get euler angles from DCM
                  self._euler = self._dcm_to_euler(self.dcm)
          return self._euler
docs: Get the euler angles.
          The convention is Tait-Bryan (ZY'X'')
  
          :returns: array containing the euler angles [roll, pitch, yaw]