Как получить Parrot AR.Drone 2.0 fly? Произошла ошибка состояния

Я пытаюсь реализовать javadrone (AR.Drone Java API) в моем проекте. Тем не менее, произошла ошибка изменения состояния, когда я компилирую свой Java-код и пытаюсь его запустить. Мне удалось отправить команду в AR.Drone и вылететь впервые. После успешного взлета в первый раз, он не взлетит снова из-за ошибки "состояние изменено". Я понятия не имею, что пошло не так в моем коде. Пожалуйста, помогите мне. Спасибо! В этом проекте требуется 3 файла. Мой java-файл (arDroneFrame.java),NavData.java(из javadrone) и ARDrone.java(из javadrone). Основной java-файл: arDroneFrame.java. Когда я нажимаю кнопку TakeOff, она должна заставить AR.Drone летать и приземляться после этого.

В моем arDroneFrame.java,

private void jButtonTakeOffActionPerformed(java.awt.event.ActionEvent evt) {                                               
    com.codeminders.ardrone.ARDrone drone;

    try{           
        drone = new com.codeminders.ardrone.ARDrone();
        drone.connect();
        drone.clearEmergencySignal();

        // Wait until drone is ready
        drone.waitForReady(CONNECT_TIMEOUT);

        // do TRIM operation
        drone.trim();

        // Take off
        System.err.println("Taking off");
        drone.takeOff();

        // Fly a little :)
        Thread.sleep(5000);

        //Land
        System.err.println("Landing");
        drone.land();

        // Give it some time to land
        Thread.sleep(2000);

        // Disconnect from the done
        drone.disconnect();

    } catch (UnknownHostException ex) {
        Logger.getLogger(arDroneFrame.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(arDroneFrame.class.getName()).log(Level.SEVERE, null, ex);
    } catch (InterruptedException ex) {
        Logger.getLogger(arDroneFrame.class.getName()).log(Level.SEVERE, null, ex);
    }
}

В ARDrone.java я закомментировал некоторое кодирование Java. Это потому, что только когда я закомментирую этот код Java, он может работать только. Если я раскомментирую их, моя программа застрянет там (вообще не отвечает).

public void waitForReady(long how_long) throws IOException
{
    /*long since = System.currentTimeMillis();
    synchronized(state_mutex)
    {
        while(true)
        {
            if((System.currentTimeMillis() - since) >= how_long)
            {
                try
                {
                    disconnect();
                } catch(IOException e)
                {
                }
                // Timeout, too late
                throw new IOException("Timeout connecting to ARDrone");
            } else if(state == State.DEMO)
            {
                return; // OK! We are now connected
            } else if(state == State.ERROR || state == State.DISCONNECTED)
            {
                throw new IOException("Connection Error");
            }

            long p = Math.min(how_long - (System.currentTimeMillis() - since), how_long);
            if(p > 0)
            {
                try
                {
                    state_mutex.wait(p);
                } catch(InterruptedException e)
                {
                    // Ignore
                }
            }
        }
    }*/
    while(state == State.DEMO)
    {
        System.out.println("Changed to DEMO !");
                return; // OK! We are now connected
    }
}

Выход программы:

126 [Thread-7] DEBUG ardrone.ARDrone - State changed from TAKING_OFF to ERROR   with exception
java.lang.NullPointerException
at com.codeminders.ardrone.NavData$FlyingState.fromControlState(NavData.java:58)
at com.codeminders.ardrone.NavData.getFlyingState(NavData.java:622)
at com.codeminders.ardrone.ARDrone.navDataReceived(ARDrone.java:431)
at com.codeminders.ardrone.NavDataReader.run(NavDataReader.java:92)
at java.lang.Thread.run(Thread.java:745)

0 ответов

Другие вопросы по тегам