Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Calibration of anchor positions #2

Open
precyon opened this issue Feb 11, 2019 · 3 comments
Open

Calibration of anchor positions #2

precyon opened this issue Feb 11, 2019 · 3 comments

Comments

@precyon
Copy link

precyon commented Feb 11, 2019

Great work @lijx10 with the performance of your UAVs and thanks for making the localization code available.

I have been trying to understand the calibration part of your code. Is there is paper/documentation somewhere that could give me some hints? I understand that there is no unique solution to calibration of anchor positions if only the ranges between the anchors are known. So I have been trying to understand the following:

  1. Do you move the tag (or the UAV) during the calibration process?
  2. What are the inputs to calibration - ranges of all anchors from the tag or ranges of all anchors from each other?
  3. What are direction and coordinate constraints? How do you arrive at those?

Thanks!

@goldenminerlmg
Copy link

@precyon @lijx10 Same questions as above.

  1. I think the tag should move during calibration because the calculation requirement for triangulation error.
  2. Firstly from the paper I have thought the input may between each other. but the calibration code seems to use only the range between tag with anchors. In fact this may be more useful for calibration because we may not necessary to calibration before using them, may be simultaneously using in other problems like localization.
  3. This also confused me, this parameters seems only can give roughly by manual measurement, which may cause errors for calibration.
    Hope communication with you! Thank you.

@lijx10
Copy link
Owner

lijx10 commented Mar 31, 2019

@precyon

  1. The calibration process involves only the anchors. The anchors are fixed and we estimate their positions according to the relative distance between any pair of anchors.
  2. The input is: the relative distance between any pair of anchors. That is, for anchor A and anchor B, we have the measurement d_{AB} and d_{BA} from the readings these to anchors. Any single measurement from UWB sensors are unreliable. Therefore we take the median of multiple measurements as the estimated distance between A and B, i.e., \hat{d_{AB}}, \hat{d_{BA}}. Ideally \hat{d_{AB}} should be very close to \hat{d_{BA}}.
  3. Yes, the relative distance doesn't give unique coordinates. In order to get a unique coordinate system, we apply the following practices:
  • Relative distance between any pair of anchors. That is triangulation_error_term.hpp
  • Fix one of the anchor as the origin, i.e., anchor_101: [0, 0, 0] in uwb_calibration.yaml
  • Force the direction of one of the anchor, i.e., anchor_102_direction: [0,0,0, 1,0,0], in uwb_calibration.yaml. More specifically, denote the coordinate of anchor_102 and [x, y, z], we force [x-0, y-0, z-0] and [1, 0, 0] are in the same direction (angle between these two vectors = 0). This is defined in point_line_distance_error_term.hpp.
  • Until now, there is still one degree of freedom not fixed. We solve it by setting the z coordinate of another anchor. That is anchor_103_coordinate: {z: 0} in uwb_calibration.yaml.
  • We enforce some prior information. For example, we have accurate measurement (acquired by high precision laser ranger) of the height of anchors. Therefore we set the z coordinate of anchor_104, 105, 106.

@lijx10
Copy link
Owner

lijx10 commented Mar 31, 2019

@goldenminerlmg
In our implementation, calibration (involved uncalibrated anchors) and localization (between calibrated anchors and the UAVs) are separate. That is:

  1. Fix the position of anchors.
  2. Perform calibration of the anchors.
  3. Localize the UAVs

For your questions:

1 & 2. Actually it is possible to perform calibration and localization simultaneously. But that requires quite some time for the algorithm to converge from initial guess. In our application, we requires the agile and accurate flight of UAVs once they takeoff. Therefore, we perform accurate calibration of the anchors before UAVs taking off.

  1. Our anchor calibration is formulated as an least square optimization. Therefore, initial guess is required. Line 5-11 in uwb_calibration.yaml are initial guess. The calibration will be performed based on relative distance measurements between anchors and the constraints. Please refer to my reply to @precyon for details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants