Camera position offset

I’m using an external RTK antenna with centimetric accuracy. When using in car, the antenna is on the roof while smartphone is capturing pictures form inside. Typical offset along the track is about 50 cm while vertical one is around 35 cm. How to take this into account?

2 Likes

Fantastic! The accuracy you are getting is already way better than the recorded coordinates and timestamp in the photos. I tried to add corrections from SBAS. But the timestamps vary +/- several seconds and they are rounded off to the nearest second in spite of the filename having millisecond precision. The lat/long is only to the nearest second too which is several metres. I was assured that it does not matter because some adjustment is done by the structure in motion processing. At least my tracks disnt wander over rooftops.

Yes, I’m using RTK since Mar 2021. Usually, your track is taped to the road as you can see:

Moreover, on the above sample, traffic signs (speed limit) were new, so they were only seen on my pictures. Positions reported in JOSM are also very good (<< 1 m), in opposite to usual positioning where panels may appear very far from real position.

For the capture, I normally use Mapillary app under Android, although I can’t guarantee that position along the track is very accurate. Last summer, because Mapillary was not able to store data on the SD card, I used OpenCamera in timelapse option. Positions were rounded to the arc-second so not good (~30 m). I did post-processing with JOSM, allowing me to add a camera position offset. The drawback is an important time offset of several seconds, not stable. So, I add to fine tune this offset, using road curves and other marks like line painting. Optimistically, I would say I may reached a 0,2 s accuracy (so driving at 108 km/h → 30 m/s → 6 m along the track). I’m still looking for a method to accurately positioning my pictures.

1 Like


Red cross is the estimated position looking at the picture and landscape (bridge, painted lines…). Position estimated by Mapillary is 23 m away so nearly 0,75 s bias. So, my wet-finger estimate is much better (although much more time consuming for me).

1 Like

If anyone has come up with a solution for this, I’m all ears. I will be using a setup where my RTK antenna is below the rear window of the car due to the front windscreen incorporating a heating element and thus blocking too much of the signals to achieve an RTK fix. The distance from the camera to the GNSS antenna is about 2 meters, which I will measure more precisely later if needed.
The RTK precision will of course be hampered by the 5Hz interval at which the camera gets its location information from the receiver, and the picture interval being ~300ms depending on the processing speed of the camera. For example, at 100km/h, 5Hz (200ms) means, at most, a ~5.5m error.
The timestamp is given in milliseconds, accurate enough I would say, especially with the shutter speed being a millisecond or so in good weather and the most recent GNSS location geotagged.

I’m curious, what is your output from this process? Directly coordinate-tagged photos? Do you have the raw coordinate data, like a GPX track?

@HellPhoto As much as possible, I try to use Mapillary Application inside the smartphone. I have to use the Mock Location Application option in developer option of Android. Otherwise, data are recorded with a mix of NMEA and UBX proprietary (but documented) protocol. The later one can be converted to .pos format from RTKLIB. pos can be read in JOSM .

@Jorgeminator, I would suggest to minimize the distance between camera and GNSS antenna. You will get parallax errors with such an high distance.

It sounds like you and @Jorgeminator need an utility where you can specify capture time offset and camera position offset to post-process the photos. If you have the source track (in whatever format), it would be a matter of moving the photo coordinates “back in time” along the track and then shifting it by the position offset (accounting for direction).

What timestamp is written on the photos - is it the phone’s time or the receiver device time? Like, are the photos in sync with the track (other than the capture delay offset)?

JOSM allows to apply specific position and time offsets. In fact, time offset is not stable. There are “long term” (couple of hours) fluctuations of up to 2 s, at least, that may be related to clock instability in Android. There are also “short term” instability where one picture is not correctly time-stamped, something like they take time for geotagging after recording the picture on the SD card but sometime writing on the SD take longer time.

Overall, I’m not sure that one can make precise time-stamping with Android. One should be able to do a better job with an action-cam but I don’t have any.

1 Like

While I wrote my previous message I was trying to geotag the photos directly in Open Camera. As it turns out, Open Camera only updates its position once a second, not good enough. Instead, I rewrote OsmAnd to record coordinates with millisecond precision as soon as Android gets the new position over Bluetooth.
Mapillary_tools does a great job of interpolating the position between adjacent trackpoints, so now I’m left with only the distance offset from my windshield to the boot window. For anyone wondering if I get good signals in the trunk; the Octavia Mk4 liftback has a shallow slant on the rear window. The antenna sits on the middle of the parcel shelf and has a really open view of the sky.

@Eric_S Can you please explain what you mean by parallax errors? I didn’t quite get it :grinning:

1 Like

@Eric_S To account for the distance from my antenna to the camera, I wrote a Python script which moves the coordinates to the camera location. Since mapillary_image_description.json holds the heading after processing the images, it’s kind of trivial to move the coordinates if you know the distance and angle between the antenna and camera. If the sample rate of the .gpx file is high enough, the result should be within centimetres of the correct position.
Let me know if you need the code.

@ Jorgeminator, thanks. Indeed, I would like the offset correction in the Mapillary app so that, I can send pictures to the server directly to the server from the smartphone. And, when downloading pictures on desktop for georeferencing, I use JOSM which include offset parameters.