Positioning using azimuth and elevation information

15 Ansichten (letzte 30 Tage)
Mohammed Miran
Mohammed Miran am 14 Mär. 2013
Beantwortet: donuru reddy am 16 Jul. 2017
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.

Antworten (3)

Matt Tearle
Matt Tearle am 18 Mär. 2013
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 am 14 Mär. 2013
Use the sph2cart() function.
  2 Kommentare
Mohammed Miran
Mohammed Miran am 14 Mär. 2013
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 am 14 Mär. 2013
Bearbeitet: the cyclist am 14 Mär. 2013
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:

Melden Sie sich an, um zu kommentieren.


donuru reddy
donuru reddy am 16 Jul. 2017
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.

Community Treasure Hunt

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

Start Hunting!

Translated by