I am trying to implement javadrone (AR.Drone Java API) in my project. However,
it was occurred state changed error when I compile my java code and try to fly
it. I was able to send command to AR.Drone and fly for the first time. After
successfully take off for the first time,it won't take off again due to "state
changed" error. I have no idea what went wrong in my code. Please help me out.
Thanks! There are 3 files that are required in this project. My java
file(arDroneFrame.java),NavData.java(from javadrone), and ARDrone.java(from
javadrone).The The main java file: arDroneFrame.java. When I press the TakeOff
button, it should make AR.Drone fly and land afterwards.
In my 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);
}
}
In ARDrone.java, I had commented out some java coding.This is because only when
I comment out those java code, it can only works. If I uncomment them, my
program will be stuck there (no respond at all).
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
}
}
}
Program Output:
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)
Original issue reported on code.google.com by iseethem...@gmail.com on 28 Mar 2015 at 9:50
Original issue reported on code.google.com by
iseethem...@gmail.com
on 28 Mar 2015 at 9:50Attachments: