Is_armable never can be true

Hi, guys~
I am a starter of ArduPilot,
and my program is about control Pixhawk2.4.8(or UAV)by raspberry pi python code.
So I finish some pre-work and used follow code to try take off UAV:

#!/usr/bin/env python  
# -*- coding: utf-8 -*-  
from __future__ import print_function
import time
from dronekit import connect, VehicleMode, LocationGlobalRelative
from pymavlink import mavutil
connection_string = '/dev/ttyUSB0'
print('Connecting to vehicle on: %s' % connection_string)
vehicle = connect(connection_string,wait_ready=True,baud=921600)
def arm_and_takeoff(aTargetAltitude):
    print("Basic pre-arm checks")
    while not vehicle.is_armable:
        print(" Waiting for vehicle to initialise...")
        time.sleep(1)
    print("Arming motors")
    vehicle.mode = VehicleMode("GUIDED")
    vehicle.armed = True
    while not vehicle.armed:
        print(" Waiting for arming...")
        time.sleep(1)
    print("Taking off!")
    vehicle.simple_takeoff(aTargetAltitude)
    while True:
        print(" Altitude: ", vehicle.location.global_relative_frame.alt)
        if vehicle.location.global_relative_frame.alt >= aTargetAltitude * 0.95:
            print("Reached target altitude")
            break
        time.sleep(1) 
arm_and_takeoff(3)
print("Set default/target airspeed to 3")
vehicle.airspeed = 3
time.sleep(5)
print("Land")
vehicle.mode = VehicleMode("LAND")
print("Close vehicle object")
vehicle.close()

but the console keep notice:


The drone cant initialize,
so I have open the int.py to find why the ‘’’ is_armable’‘’ cant be true,
and you can see from below:

here we need GPS fix and EKF filter normal
and I can make sure the GPS is normal and correct
but how can I test EKF in QGroundControl?
and if I find the EKF error, what should I do?
just to calibration the UAV again?

Hope your any reply sincerely~

Joaquin