How to acess direction information of drone using flight records

Hello,

How can I access drone direction information when it goes. Maybe there is a compass information. However, I did not see any information in flight records. Or is it possible to calculate, find its direction using other data. Maybe prior coordinates?

Best regards.

The “OSD.yaw [360]” value shows the aircraft direction in degrees.

image

image

1 Like

@msinger So much tanks for this information.

Best regards.

@msinger how can I transform these degree to unit latitude and longtitude direction. For example, if yaw degree is 270 then your coordinate will be changed from 38.10, 43.27 to 38.05, 43.27

I believe that you’re referring to direction of travel and not heading. The drone can and usually does fly at least partially sideways. Here is the code that DatCon uses to compute direction of travel

// computes true(not magnetic) bearing
public static double bearing(double lat1, double lon1, double lat2,
double lon2) {
double longDiff = (lon2 - lon1);
double y = Math.sin(longDiff) * Math.cos(lat2);
double x = Math.cos(lat1) * Math.sin(lat2)
- Math.sin(lat1) * Math.cos(lat2) * Math.cos(longDiff);
return Math.toDegrees(Math.atan2(y, x));
}

@BudWalker I think I need to heading direction. My drone is going or it stays at somewhere. I would like to know where drone or gimbal is looking at. Then I can gcalculate a new coordinate using this point of view and a distance. And this new coordinate belongs to distance point.

Assume I have a distance and it is 450 and my looking direction is 310 degree. Then it means my new coordinate would maybe (f(310, 450)+ latitude), (f(310,450) + lontitude). What should this f function be?

I made some research and find this post. I am not sure of whether it is right or not. However, when I use, it works some cases but I also think does not work for some cases.
Here a simple example:

yaw_angle = 310
distance = 450

lan = 37.4815207267064
lon = 38.6497129186169

lan_direction = -sin(yaw_angle)
lon_direction = -cos(yaw_angle)

dx = (lan_direction* distance)
dy = (lon_direction* distance)

r_earth = 6378000 #unit is meter and means radius of earth
object_lan = lan + (dy / r_earth) * (180 / pi)
object_lon = lon + (dx / r_earth) * (180 / pi) / cos(lan * pi/180)

if I calculate all of them, object_lan should be 37.48364444748233 and object_lon should be 38.6453783211518

(f(310, 450)+ latitude), (f(310,450) + lontitude) can’t be correct since the function f has to be dependent on latitude and longitude

Try the following code
double radius = 6371e3;
double latRadians = Math.toRadians(latitudeDegrees);
double longRadians = Math.toRadians(longitudeDegrees);
double destLatRadians = Math
.asin(Math.sin(latRadians) * Math.cos(distance / radius)
+ Math.cos(latRadians) * Math.sin(distance / radius)
* Math.cos(brng));
double destLongRadians = longRadians + Math.atan2(
Math.sin(brng) * Math.sin(distance / radius)
* Math.cos(latRadians),
Math.cos(distance / radius)
- Math.sin(latRadians) * Math.sin(destLatRadians));
double destLatDegrees = Math.toDegrees(destLatRadians);
double destLongDegrees = Math.toDegrees(destLongRadians);

I haven’t tested it but I think it’s right. For your example
brng = 310
distance = 450

and the answer I get is
long = 38.65405215515889
lat = 37.47939459319298

So much thanks for your all helps. I made some calculations. However, I see its direction is not right.
Inkedt_354_LI
Inkedt_458.PNG

Look at two picture. Blue one is position of drone, red one calculated position and yellow one actual position. It seems there is 90 degree offset.

Best regards.

I believe the problem is that brng should be in radians not degrees. To achieve that multiply degrees by .01745, i.e.

brngRadians = brng * 0.01745

and then use brngRadians instead of brng in algorithm

double radius = 6371e3;
double brngRadians = Math.toRadians(brng);
double latRadians = Math.toRadians(latitudeDegrees);
double longRadians = Math.toRadians(longitudeDegrees);
double destLatRadians = Math
.asin(Math.sin(latRadians) * Math.cos(distance / radius)
+ Math.cos(latRadians) * Math.sin(distance / radius)
* Math.cos(brngRadians));

    double destLongRadians = longRadians + Math.atan2(
            Math.sin(brngRadians) * Math.sin(distance / radius)
                    * Math.cos(latRadians),
            Math.cos(distance / radius)
                    - Math.sin(latRadians) * Math.sin(destLatRadians));
    
    double destLatDegrees = Math.toDegrees(destLatRadians);
    double destLongDegrees = Math.toDegrees(destLongRadians);

@BudWalker I tried to convert it to radian. However, unfortunatelly there is problem again. I added two images.
466

blue one indicate my calculation, red one your calculation and yellow one actual position. Again there is a shifting.

Best regards.

I suspect that your code has a bug. Here is my Java code

public static void destnation(double latitudeDegrees,
        double longitudeDegrees, double brng, double distance) {

    System.out.println("Origin Lat = " + latitudeDegrees + " Long = "
            + longitudeDegrees + " brng = " + brng + " distance = "
            + distance);
    double radius = 6371e3;
    double brngRadians = Math.toRadians(brng);
    double latRadians = Math.toRadians(latitudeDegrees);
    double longRadians = Math.toRadians(longitudeDegrees);
    double destLatRadians = Math
            .asin(Math.sin(latRadians) * Math.cos(distance / radius)
                    + Math.cos(latRadians) * Math.sin(distance / radius)
                            * Math.cos(brngRadians));

    double destLongRadians = longRadians + Math.atan2(
            Math.sin(brngRadians) * Math.sin(distance / radius)
                    * Math.cos(latRadians),
            Math.cos(distance / radius)
                    - Math.sin(latRadians) * Math.sin(destLatRadians));

    double destLatDegrees = Math.toDegrees(destLatRadians);
    double destLongDegrees = Math.toDegrees(destLongRadians);

    System.out.println("Destination Lat = " + destLatDegrees + " Long = "
            + destLongDegrees);
}

public static void main(String[] args) {
    Util.destnation(37.4815207267064, 38.6497129186169, 310, 450);
}

and it’s output

Origin Lat = 37.4815207267064 Long = 38.6497129186169 brng = 310.0 distance = 450.0
Destination Lat = 37.48412198992392 Long = 38.64580610647096

You can compile and execute this code. Or, you could provide your inputs and I’ll run the code

Thank you for your response. Yes, you are right. I realized, my codes convert degrees to radians twice. I have some questions but I will create a new topic about them.

Thank you for all your helps.
Best regards.