Positioning using azimuth and elevation information

15 ビュー (過去 30 日間)
Mohammed Miran
Mohammed Miran 2013 年 3 月 14 日
回答済み: donuru reddy 2017 年 7 月 16 日
Hi,
I have/know (by magic) the azimuth and elevation of a certain object in space from at least two to three locations on the ground. How do I compute the position of that object in space? Any help is appreciated.

回答 (3 件)

Matt Tearle
Matt Tearle 2013 年 3 月 18 日
You might be able to use some Mapping Toolbox functions to convert between various Earth coordinate systems. However, not knowing the range makes life complicated. There's probably a good way to do it, if you wade through the math.
But here's a brute-force approach. Treat the ranges as unknowns in an optimization problem, where the objective is to minimize the triangulation error. That is, if you pretend that you know the ranges, you can figure out the predicted locations from each measurement location. Then try to get the ranges that give the best agreement between the predictions.
% Define locations of observers (latitude, longitude, elevation)
geocords = [42.14,-71.25,0;
-33.76,-72.73,0];
% Define bearings to object taken by observers (az, el)
bearings = [181.3,-35.6;
0,90];
% Get reference spheroid for Earth
earth = wgs84Ellipsoid;
% Make objective function = error in triangulation
fobj = @(r) trierror(r,bearings,geocords,earth);
% Minimize triangulation error by adjusting ranges
r0 = earth.SemimajorAxis*ones(size(bearings,1),1);
r = fminsearch(fobj,r0);
% Use best range estimates to locate object in ECEF coordinates
[X,Y,Z] = aer2ecef(bearings(:,1),bearings(:,2),r,geocords(:,1),geocords(:,2),geocords(:,3),earth);
loc = mean([X,Y,Z])
% Target object from a new location
[az,el,rng] = ecef2aer(loc(1),loc(2),loc(3),-20,47,0,earth)
And my triangulation error function:
function err = trierror(r,bearings,geocords,p)
% Get the ECEF location of the object
[X,Y,Z] = aer2ecef(bearings(:,1),bearings(:,2),r,geocords(:,1),geocords(:,2),geocords(:,3),p);
% Normalize into Earth-radius units to keep the numbers nice
XYZ = [X,Y,Z]/p.SemimajorAxis;
% Take the difference between each point and the mean (centroid) location;
% sum the absolute values of the differences
err = sum(sum(abs(bsxfun(@minus,XYZ,mean(XYZ)))));
Obviously you could come up with your own triangulation error function. I doubt this approach scales well with the number of observation locations.
Also, it might be nice to get a good estimate of the ranges before trying to minimize (I just used Earth radius from all locations). If the observer locations are close enough together, you could do some flat-earth triangulation first, using the Mapping Toolbox navfix function.

the cyclist
the cyclist 2013 年 3 月 14 日
Use the sph2cart() function.
  2 件のコメント
Mohammed Miran
Mohammed Miran 2013 年 3 月 14 日
Thanks for your quick response. All I know about the object in space is the azimuth and elevation (by magic). I do not know anything else such as the distance between the object in space to my location, which is required by the sph2cart() function. Additional piece of infomation I have is azimuth and elevation to this object in space from couple other different sources on ground.
the cyclist
the cyclist 2013 年 3 月 14 日
編集済み: the cyclist 2013 年 3 月 14 日
For each ground location, you can use the (azimuth,elevation) data to define a unique line that passes through that location and the space object. [For example, you could use sph2cart(), with two arbitrary values r1 and r2, to get two points on the line, (x1,y1,z1) and (x2,y2,z2).]
If you use two ground stations, then you should be able to find the intersection of those two lines, which is the location of the space object. There is a discussion here on how to do that:

サインインしてコメントする。


donuru reddy
donuru reddy 2017 年 7 月 16 日
what if the camera is on a building top with known altitude, azimuth, elevation and position. how to find geo location of an object at focus.

カテゴリ

Help Center および File ExchangeGeometric Geodesy についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by