def parse_line(line):
    """
    Parse $VNYMR message:
        Yaw  float  deg  Calculated attitude heading angle in degrees.
        Pitch  float  deg  Calculated attitude pitch angle in degrees.
        Roll  float  deg  Calculated attitude roll angle in degrees.
        MagX  float  Gauss  Compensated magnetometer measurement in x-axis.
        MagY  float  Gauss  Compensated magnetometer measurement in y-axis.
        MagZ  float  Gauss  Compensated magnetometer measurement in z-axis.
        AccelX  float  m/s^2 Compensated accelerometer measurement in x-axis.
        AccelY  float  m/s^2 Compensated accelerometer measurement in y-axis.
        AccelZ  float  m/s^2 Compensated accelerometer measurement in z-axis.
        GyroX  float  rad/s  Compensated angular rate in x-axis.
        GyroY  float  rad/s  Compensated angular rate in y-axis.
        GyroZ  float  rad/s  Compensated angular rate in z-axis.
    """
    assert line.startswith(b'$VNYMR'), line
    assert b'*' in line, line
    s = line.split(b'*')[0].split(b',')
    assert len(s) == 13, s
    arr = [float(x) for x in s[1:]]
    return [arr[:3], arr[3:6], arr[6:9], arr[9:]]