Convert covariance matrix in ecef to LLA

30 vues (au cours des 30 derniers jours)
Brittany Decker
Brittany Decker le 10 Oct 2023
Commenté : the cyclist le 11 Oct 2023
I would like to take a covariance matrix (sigma from a 2 dimension Kalman Filter estimate) and convert it from ECEF to LLA coordinate systems.

Réponses (1)

the cyclist
the cyclist le 10 Oct 2023
According to ChatGPT, this code will do it.
DISCLAIMER: I have no idea if this code is accurate. I don't know what ECEF or LLA coordinates are.
It provided the following commentary to the code:
"Below is an example MATLAB code that demonstrates how to convert a covariance matrix from ECEF to LLA coordinates using a simplified transformation for illustration purposes. Please note that this example assumes a flat Earth for simplicity, and you might need to use more accurate equations depending on your requirements.
Make sure to replace cov_xx, cov_xy, etc., x, y, z, and R with your actual values. Additionally, if your Kalman filter operates in a non-linear setting, you might need to linearize the transformation equations using methods like Taylor series expansion.
Keep in mind that this code is a basic example, and for more accurate results, especially when dealing with the Earth's curvature, you should consider using more sophisticated coordinate transformation equations."
Perhaps it will at least provide a code base for you to modify.
% Sample covariance matrix in ECEF
sigma_ecef = [cov_xx, cov_xy, cov_xz;
cov_xy, cov_yy, cov_yz;
cov_xz, cov_yz, cov_zz];
% Sample ECEF coordinates
x_ecef = [x; y; z];
% Transformation equations (simplified for illustration)
lat = asin(z / norm(x_ecef));
lon = atan2(y, x);
alt = norm(x_ecef) - R; % R is the Earth's radius
% Jacobian matrix
partial_lat_partial_x = z / norm(x_ecef);
partial_lat_partial_y = 0;
partial_lat_partial_z = x / norm(x_ecef);
partial_lon_partial_x = -y / (x^2 + y^2);
partial_lon_partial_y = x / (x^2 + y^2);
partial_lon_partial_z = 0;
partial_alt_partial_x = x / norm(x_ecef);
partial_alt_partial_y = y / norm(x_ecef);
partial_alt_partial_z = z / norm(x_ecef);
Jacobian = [partial_lat_partial_x, partial_lat_partial_y, partial_lat_partial_z;
partial_lon_partial_x, partial_lon_partial_y, partial_lon_partial_z;
partial_alt_partial_x, partial_alt_partial_y, partial_alt_partial_z];
% Transform covariance matrix
sigma_lla = Jacobian * sigma_ecef * Jacobian';
% Print the result
disp('Covariance Matrix in LLA:');
disp(sigma_lla);
  3 commentaires
Brittany Decker
Brittany Decker le 11 Oct 2023
right, would be better if they folded in the model for the earth available within matlab...
the cyclist
the cyclist le 11 Oct 2023
A google search turns up some related MATLAB functions, in the Mapping Toolbox. For example, take a look at Comparison of 3D Coordinate Systems.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Cartesian Coordinate System Conversion dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by