As a subtask inside a main project I need to compute the position (x,y,z) of a quadrotor using an homography.

To do this I will use a camera (attached to the quadrotor) pointing down to an artificial landmark on the floor. Basically I need to compute the extrinsic parameters of the camera to know the pose with respect to the landmark. I know the projective points of the landmark in the camera, and the intrinsic matrix of the camera but I also need the real landmark position [X, Y, Z].

I suppose that Z coordinate is equal to 0 because the landmark is plane, but I am not sure how to compute the real [X,Y] coordinates.

Any idea how to do that?

I am also interested in put the (x,y,z) position of the quadrotor into a control path, anybody knows where I can find info about the most common controllers for do this kind of task?


It's odd that you're suggesting computing the position of a landmark. Literally, a mark on the land -- a position that you should already know and will use to localize your vehicle. You can give it whatever arbitrary location you want.

If you have only one landmark, the most logical choice for it is [0, 0, 0]. Or, you could determine the X,Y coordinates that match the landmark's location within the room. As long as all the fixed-position objects are assigned coordinates from the same grid, it doesn't matter what they are.


Because a camera is a range-only sensor, you cannot directly estimate the relative position of the object. Additionally, because you have only one object, there are infinite solutions that are equally possible, given only the angular camera measurements.

Possible solutions:

If you have two images with a known relative position between the two, then you can use single-camera stereo vision to estimate the relative position between the quadrotor and the object.

Another solution is to use range-bearing SLAM and set very high initial range uncertainty, and range observation noise[1][2]. You can estimate the observed range using trigonometry with a level-body assumption and altimeter readings, this will be really inaccurate but SLAM should significantly improve the estimate.

Finally, if you can simply add more objects that you can uniquely identify and know the relative positions of them, then you can use OpenCV solvePnP (see similar question [3]).

[1] http://www.iri.upc.edu/people/jsola/JoanSola/eng/toolbox.html

[2] http://www.mrpt.org/List_of_SLAM_algorithms

[3] Tracking objects from camera; PID controlling; Parrot AR Drone 2

  • $\begingroup$ What do you mean by, "you cannot directly estimate the relative position of the object"? I would've thought cameras are very precise in that regard. $\endgroup$ – Octopus Mar 8 '16 at 20:50
  • $\begingroup$ You can observe the angle of the object from the camera, but not the depth. The object could lie at any point along the line that starts at the camera focal point and passes through the object's centroid on the image plane. $\endgroup$ – Gouda Mar 9 '16 at 1:49
  • $\begingroup$ Except when you already know the dimensions of your landmark. Cameras make excellent surveying equipment as long as there are some known dimensions within the image. A little trig goes a long way. If you know how wide it is, for example, you can figure out how far away it is to quite a degree of accuracy. $\endgroup$ – Octopus Mar 9 '16 at 1:58
  • $\begingroup$ What you are referring to is an instance of the "Perspective-n-Point" (PnP) problem. $\endgroup$ – Gouda Mar 9 '16 at 3:06

If you are able to design the artificial landmark yourself, you can use what some past colleagues of mine used in the context of camera space manipulation. They designed their targets, like your landmark, as concentric high-contrast circles or ellipses. With those targets they could extract distance information (measured versus expected diameters), as well as relative position between the camera and the center of the target.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.