Can i get GPS(Latitude, Longitude, Altitude)values?

I’m sorry for my terrible english first…

  1. I wanna get drone’s GPS position, is it possible?

  2. and is there any api that makes drone move to GPS point? like return home function.
    return home function make drone move to taking off GPS point and move down to 2meter from ground,
    but I wanna make my bebop drone move to particular GPS point without moving down to 2meter from ground.

thank you

Hi,

  1. Yes it is possible, there is a command for that : PilotingStatePositionChanged.
    If you want more information about how to get the position, please tell me which language are you interested in and if you are using the new libARController API or not.

  2. As this is an automated flight, it is not available for the moment. As soon as the Bebop supports FlightPlan, you will be able to make your own automated flights.

Regards,
Djavan

1 Like

Thank you for quick answer! Again, I’m so sorry for my horrible English…

  1. I’m implementing an android app to control bebop drone.
    I used libARController API for implement basic controller. Can you explain how to use that command?
    Futhermore, Can i get other bebop drone’s sensor values(ex. compass… in which direction bebop is facing…)?

  2. Actually, I already made an automated flight(inside). Now, I want to make an automated flight(outside) based on GPS.
    Return home Function is based on GPS. So, when i call Return home function, is it calculate where to go(ex. direction) by using starting gps point and current gps point? I want to know the operation principle of Return home function.

thank you!

Hi everyone!

  1. Currently, I’m using these code and I get the speed belong to x,y,z . I am wondering that can I use these result to calculate the distance for bebop when it move . For example, I would like to calculate the distance move belong to axis x,y or z when press Forward Button, Up Button, Right Button.

ARCONTROLLER_DICTIONARY_KEY_ARDRONE3_PILOTINGSTATE_ATTITUDECHANGED
ARCONTROLLER_DICTIONARY_KEY_ARDRONE3_PILOTINGSTATE_SPEEDCHANGED

  1. I’m the code below to find the position of bebop. But It doesn’t work, so anyone could help me how to use this code to find the position.
    ARCONTROLLER_DICTIONARY_KEY_ENUM.ARCONTROLLER_DICTIONARY_KEY_ARDRONE3_PILOTINGSTATE_POSITIONCHANGED.

Can you kindly write the syntax to use this command on java? I am new to java language. Thank you

Hi,

@casano: What is not working ? You don’t receive the command ? Or with bad arguments ? Can you tell us a bit more about what is happening and what are you expecting?

@mohsineight: What command do you want ? The position changed command ?

Best regards,
Djavan

@Djavan: thank for your response
Q1: I can get the speed of accelerometer and gyroscope( yaw,roll,pitch value). And I am wondering that can I use these signal to calculate the distance for bebop?

Q2: I use this command to get the position of bebop( latitude, longitude, altitude)
ARCONTROLLER_DICTIONARY_KEY_ENUM.ARCONTROLLER_DICTIONARY_KEY_ARDRONE3_PILOTINGSTATE_POSITIONCHANGED

But I got the result 500, 500, 500 respectively. So my question is can I use this command to get the position of bebop?
Could you please show me how to get this parameter(latitude, longitude, altitude).
I hope to hear from you soon

thank so much!

@Djavan the similar topic as casano: I have received the sensor reading from:
ARCONTROLLER_DICTIONARY_KEY_ARDRONE3_PILOTINGSTATE_ATTITUDECHANGED
ARCONTROLLER_DICTIONARY_KEY_ARDRONE3_PILOTINGSTATE_SPEEDCHANGED

But the data seems to be wrong. As i know that the return value for speed changed is m/s, But it is wrong when i make some experiment with the Bebop. For example: I multiplied the speed in m/s with packet return time in second (discrete time integral) to estimate the distance, the return time is about 200ms each data packet (I have measured the correct time by using timer). The actual distance was 2 meters but the calculated distance was only 1 meter, and it has a large deviation between each experiment (for example: 1st time is 1m, 2nd time is 0.8m, 3rd time is 1.2m)

I think it is better to give us the raw sensor reading. The computation to get velocity we can calculate ourselves. There must be a compensation between gyroscope and the accelerometer sensor. We need to build the most efficient controller for the Bebop but only in case the sensor readings are correct and the data receive time is as fast as possible (about 30-50 ms) not this big of 200++ ms.

Hi.
@casano :
Q1. You can calculate the distance between user and bebop by using GPS values(You can find the fomula easily on the internet).
If you want get bebop’s moving distance(not distance between user and bebop) by using accelerometer and gyroscope data… I think it’s very hard work.
Because the sensor values are not that accurate.
Q2. You did right thing. But 500, 500, 500 means that your bebop can not receive the GPS data.
You can check it on FreeFlight APP. It may take some time to get GPS signal.

1 Like

Hi: @Kwon
Q1: The distance in my question is the distance of bebop change when we control the bebop move in space.
For example: When I pressed the forward button at time t1=0 until t2 =15s. I would like to know the distance of bebop moved in during 15 second. Can I get this distance by using accelerometer and gyroscope sensor?

Q2: I got the result 500,500,500. Maybe I lack of some command in coding. Would you please help me how to get right information of GPS?

Best regards,

I am looking for the command through which I can get GPS position of Bebop. What is the complete command syntax and what that command will do? Will it send me the longitude and latitude of Bebop or will it provide me with some other variable/value? Sorry I am beginner so I am not familiar with Bebop commands and their usage.

It would be great to see a working example of this for android/java using onCommandReceived and ARCONTROLLER_DICTIONARY_KEY_ARDRONE3_PILOTINGSTATE_POSITIONCHANGED.

My assumption is it is something as simple as:

@Override
public void onCommandReceived(ARDeviceController deviceController, ARCONTROLLER_DICTIONARY_KEY_ENUM commandKey, ARControllerDictionary elementDictionary)
{
    if (elementDictionary != null) {
        ARControllerArgumentDictionary<Object> args = elementDictionary.get(ARControllerDictionary.ARCONTROLLER_DICTIONARY_SINGLE_KEY);
        if (args == null) return;

        switch (commandKey) {

            case ARCONTROLLER_DICTIONARY_KEY_ARDRONE3_PILOTINGSTATE_POSITIONCHANGED:
                Double lat = (Double) args.get("arcontroller_dictionary_key_ardrone3_pilotingstate_positionchanged_latitude");
                Double lon = (Double) args.get("arcontroller_dictionary_key_ardrone3_pilotingstate_positionchanged_longitude");
                Double alt = (Double) args.get("arcontroller_dictionary_key_ardrone3_pilotingstate_positionchanged_altitude");

                Log.d(TAG, "Position changed lat=" + lat.toString() + " lon=" + lon.toString() + " alt=" + alt.toString());
                break;
...

Is this a correct assumption? With the “new” API is really just as simple as adding a single listener and, by default, we get all nav and config data?

Hi,

Here is an example:

@Override
public void onCommandReceived (ARDeviceController deviceController, ARCONTROLLER_DICTIONARY_KEY_ENUM commandKey, ARControllerDictionary elementDictionary) {
    if (elementDictionary != null) {
        if (commandKey == ARCONTROLLER_DICTIONARY_KEY_ENUM.ARCONTROLLER_DICTIONARY_KEY_ARDRONE3_PILOTINGSTATE_POSITIONCHANGED){
            ARControllerArgumentDictionary<Object> args = elementDictionary.get(ARControllerDictionary.ARCONTROLLER_DICTIONARY_SINGLE_KEY);
            if (args != null) {
                double latitude = (double)args.get(ARFeatureARDrone3.ARCONTROLLER_DICTIONARY_KEY_ARDRONE3_PILOTINGSTATE_POSITIONCHANGED_LATITUDE);
                double longitude = (double)args.get(ARFeatureARDrone3.ARCONTROLLER_DICTIONARY_KEY_ARDRONE3_PILOTINGSTATE_POSITIONCHANGED_LONGITUDE);
                double altitude = (double)args.get(ARFeatureARDrone3.ARCONTROLLER_DICTIONARY_KEY_ARDRONE3_PILOTINGSTATE_POSITIONCHANGED_ALTITUDE);
            }
        }
    }
}

So yes, @synman you’re right, you’ve just have to add this listener and all commands received will trigger this callback. Then you check the command received and get the params you’re interested in.

Best regards,
Djavan

1 Like

solution should be changed to @Djavan 's last post :slight_smile:

1 Like

Hello,
I’ve been using your code and I would like to collect the recorded data (position, roll, pitch, yaw etc). How can i do that? When I’m running the code it’s showing the output in mplayer only the video. what about the data like position, roll,pitch, yaw etc? How can i get that? Please help

Hello Djavan and everyone,
I am using POSITIONCHANGED to get the position. But the time between events is too long (about 1 second). How can I shorten this time? I would like 100 milliseconds of time between measures.
Thanks