Does any one do lever arm correction?



since my results are only next to the so often promised results of the Reach module and my antenna is approximately 10 cm “behind the camera”, I’m thinking about doing lever arm correction.

I have written an simple Python script which corrects this offset under the condition that the UAV is flying in level and is pointing exactly in the direction from the previous and the following gps track point of the time mark.

The more I think about it, the more I come to the conclusion that I need to consider the IMU data of my UAV when I calculate the lever arm correction. Even if the camera would be exactly underneath the antenna, there would be an impact (some cm, may be 3-6 if the z offset is between 10 and 20 cm) when the UAV is not in level.

Has any one of you experience on the impact (in cm precision) of leaver arm correction and the workflow (with Photoscan)?

Thank you, Tobias

(Christian Grüner) #2

With the help of simple trigonometry, that should be fairly straightforward to calculate, and then share with the community.
However, there might even be whitepapers on this topic already available by a simple Google search.


Yes, thx, I have an idea how to calculate that. I do not yet have a clue how to get the relevant data out of the log of my UAV (Arducopter), but I guess I can solve that to.

I also searched for some papers on the topic, but I would be interested in the divers experience of the mapping community, i.e. do you use it, are your results depending on it or does the Photoscan magic calculate the value anyhow (w/wo gcps) and you don’t do it.

Of course I’m willing to share the code, but I actually think @emlid should include something like that in RTKpost and use REACHs IMU data. I think thi feature was promised some years ago.

(Amilcar Lucas) #5

Arducopter allows you to specify the arm between the GPS antenna and the center of the flight controller (pixhawk, or navio) IMU.
The FW then corrects the antenna data taking the attitude into consideration, allowing you to get full corrected logs on the vehicle.
Then you only need to correct the arm between the controller and the camera.


Ok, thank you, I didn’t know that. Unfortunately I want to do post processing and therefore I cannot use Arducopter to do the correction.

Up to now I also didn’t succeed to finde the necessary data in the log files. Are you having any idea what is the corresponding message?

(Andrew Yushkevich) #7

Hi @tobias-dahms,

Unfortunately, we don’t officially support IMU at the moment but you can find a lot of threads on the forum about how to get this type of data.

As for the offset function, thank you for the request, it’s quite an interesting idea.


Hej Tobias,

I calculate the lever-arm with Excel. The data I use for it is:

  • Pixhawk ATT log
  • Pixhawk GPS2 log (Reach is connected as 2nd GPS on my hexacopter)
  • Reach Events
  1. First I transform all the Reach Event coordinates to a projected coordinate system (MGI GK M34 > Austria in my case). That way it’s easier to add the lever arm corrections to the coordinates.
  2. I then, for each Reach Event, find the closest GPS2 log row using GPS-Time.
  3. Then I use the number of that GPS2 row to get the closest ATT log row.
    I always use the heading of the copter instead of interpolating between gps positions since pitch and roll is relative to the UAV frame and not the trajectory.
    With the pitch, roll and heading values I calculate the lever arm corrections.


Thank you very much for the information, I will integrate that into my script as soon as possible.

Do you do that in Python?
Do you calibrate the magnetometer and the IMU before each flight?


No I don’t calibrate them. I think the reading is accurate enough since the leverarm is pretty short anyway. So an angle error won’t lead to significant errors in lever arm corrections.

I don’t have programming skills … so I just tried to accomplish the lever arm calculation in Excel.
I load the logs manually into tabs of an Excel file. The calculations are then done automatically in additional tabs.
I bet there are better ways to do it. But at the moment it gets the job done.


A working tool in your hands is better than an ideal tool in your mind. I hope I finish my solution soon… .