polar motion seems to be reversely applied to the function "ecef2eci."
Show older comments
Hi, I am aerospace engineering students studying about coordinate conversion.
I made my own code converting ecef(WGS84) to eci(J2000) according to reference books,
and I found that polar motion in matlab function "ecef2eci" seems to be reversely applied.
for example, in sample code below,
polar motion is
pm = 1.0e-04*[0.281652777777778 0.714161111111111] (in radian)
which associates with data in IERS bulletin B (in 2021 Dec 10).
In order to transformate coordinate eci to ecef, it should rotated as following, according to reference.
((-pm(1) rotating about Y axis)*(-pm(2) rotation abount X axis) *(GAST rotation about z axis))
and I think matlab ecef2eci function has reversely rotated, in some way like this.
((pm(1) rotating about Y axis)*(pm(2) rotation abount X axis) *(GAST rotation about z axis))
Is there anybody who verified matlab function ecef2eci code including the effects of polar motion?
Is it correct or reversed? Please let me know.
sample code is here.
utc = [2021 12 10 10 11 16];
Mjd_UTC = mjuliandate(utc);
r_ecef =[-2963510; 1898000; 599000];
r_matlab = ecef2eci(utc, r_ecef)
pm = polarMotion(Mjd_UTC)*180/pi;
r_matlab_polar = ecef2eci(utc, r_ecef, 'pm', pm);
Answers (2)
Hi Jeongin Yun,
Quoting from the question, with emphasis added:
"In order to transformate coordinate eci to ecef, it should rotated as following, according to reference.
((-pm(1) rotating about Y axis)*(-pm(2) rotation abount X axis) *(GAST rotation about z axis))
and I think matlab ecef2eci function has reversely rotated, in some way like this.
((pm(1) rotating about Y axis)*(pm(2) rotation abount X axis) *(GAST rotation about z axis)) "
In the first instance, we're going from eci to ecef. In the second, from ecef to eci. So those two shouldn't be the same. it seems like they should be transposes of each other.
The function dcmeci2ecef is a .m file, so you can check the code yourself and see if it matches your reference. I assumed that the output of that function is used directly in ecef2eci or is equivalent to whatever is used in ecef2eci, but based on the code below that appears to be not quite true.
Also, the value of pm in the code is in deg, not radian.
utc = [2021 12 10 10 11 16];
Mjd_UTC = mjuliandate(utc);
r_ecef =[-2963510; 1898000; 599000];
r_matlab = ecef2eci(utc, r_ecef);
format short e
pmdeg = polarMotion(Mjd_UTC)*180/pi;
r_matlab_polar = ecef2eci(utc, r_ecef, 'pm', pmdeg);
D0 = dcmeci2ecef('IAU-2000/2006',utc,0,0,pmdeg*pi/180);
D1 = dcmeci2ecef('IAU-76/FK5' ,utc,0,0,pmdeg*pi/180);
r0 = D0.'*r_ecef;
r1 = D1.'*r_ecef;
[r0 r1] - r_matlab_polar
Yeong-Guk Kim
on 8 Aug 2023
Edited: Yeong-Guk Kim
on 8 Aug 2023
0 votes
Hi.
I also have experience testing the content you asked, so I write comments.
While testing ecef2eci and eci2ecef function in MATLAB, I also confirmed that ecef2eci PM is applied in reverse.
Compared to other sources, eci2ecef showed similar results, but ecef2eci showed different results. After that, I reversely entered the PM into ECEF2ECI, so I was able to get a result similar to that of other sources.
r_matlab_polar = ecef2eci(utc, r_ecef, 'pm', -pm);
Categories
Find more on Coordinate Systems in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!