arcore-unity-extensions icon indicating copy to clipboard operation
arcore-unity-extensions copied to clipboard

Geospatial localization has very different performance depending on the device.

Open chankeiro opened this issue 1 year ago • 7 comments
trafficstars

Hi. I am experiencing very different behavior between Android devices regarding Geospatial Localization. The Geospatial Anchor in the scene is placed at the center of the field of an open soccer stadium. It has VPS coverage. Most devices consistently reach horizontal accuracy < 5m and Yaw Accuracy < 15º in about 10 to 15 seconds. The anchored gameobjects are indeed correctly positioned. However, two of my test devices take a while longer (even minutes) to reach good accuracy, and eventually the anchored gameobjects are noticeably displaced horizontally and vertically several meters from their intended position. The final AR experience with these devices is also very shaky, with the anchored gameobjects wobbling or "jumping" several meters very often.

I cannot find a pattern to these differences. For example, some older devices still locate quite well, but a device that does not was released a month ago and should theoretically be capable enough. There is also a mix of Android versions and CPU/GPUs in both groups:

This is the complete list:

Smartphones that localize correctly:.

  • Xiaomi 11T Pro: Android 13, SnapD. 888, released 2 years ago
  • Xiaomi Poco F2 Pro: Android 12, SnapD. 865, 3 years
  • Xiaomi Redmi Note 10 5G: Android 12, Dimensity 700, 3 years
  • Xiaomi Redmi K30 5G: Android 10, SnapD. 765, 4 years
  • Samsung A51: Android 12, Exynos 9611, 4 years

Smartphones with poor performance:

  • Realme 12 Pro+: Android 14, SnapD. 7 Gen2, released last month (it is not on the list of ARCore supported devices yet, but Google Play Services for AR is installed and up to date)
  • OnePlus Nord2 5G: Android 13, Dimensity 1200, 2 years.

I would like to know if anyone has had a similar experience and if there is any workaround or good practice to mitigate this bad behavior with some devices. This project is a live game with a soccer team that we can't deliver if we can't solve these problems. Any help will be greatly appreciated.

chankeiro avatar Mar 05 '24 01:03 chankeiro

Could you please send the adb shell getprop ro.build.fingerprint for the poor performing devices?

devbridie avatar Mar 05 '24 14:03 devbridie

Hi @devbridie,

Realme 12 Pro+: realme/RMX3840EEA/RE5C82L1:14/UKQ1.230924.001/U.R4T2.15a8088_13f16_13f18:user/release-keys One Plus Nord 2: OnePlus/DN2103EEA/OP515BL1:13/TP1A.220905.001/R.15bfc77-f07e:user/release-keys

Thanks!

chankeiro avatar Mar 05 '24 18:03 chankeiro

Hello again. Did you find out anything? Please let me know if you need more info, videos, etc.

chankeiro avatar Mar 08 '24 08:03 chankeiro

There is not anything about those phones specifically that we're aware of which would lead to notably different outcomes. As described here, VPS relies heavily on the camera imagery for positioning and is most reliable where their is good Street View coverage. However, if other sensors such as the GPS, compass, and accelerometer are not reporting positional data accurately, the anchors may appear to be positioned inaccurately or jump around, even if VPS localization has succeeded.

Can you compare the raw sensor readings across devices, to ensure there are no inconsistencies in the sensor data reported by the different phones? You could do this by adding logcat output, adding a debugging overlay, or simply installing a 3rd party app that already displays this information. It would be best to stand in the same position and move as consistently as possible between test runs across phones.

mrichards avatar Mar 12 '24 20:03 mrichards

Hi @mrichards. Ok, I will make a couple of videos with these devices overlaying geospatial pose, input.acceleration, input.gyro.attitude and input.gyro.rotationRate and post them here asap.

chankeiro avatar Mar 13 '24 02:03 chankeiro

I recorded two videos. One with a device tracking correctly and the other tracking poorly. I've included the geospatial pose and sensor readings. The devices are:

  • OK: Xiaomi 11T Pro: Xiaomi/vili_eea/vili:13/TKQ1.220829.002/V14.0.14.0.TKDEUXM (mid-range, 2 years old)
  • KO: Realme 12 Pro+: realme/RMX3840EEA/RE5C82L1:14/UKQ1.230924.001/U.R4T2.15a8088_13f16_13f18 (mid-range, just released)

I have combined the two videos into a single track https://youtu.be/8N2kvwuXIVo You'll need to switch to HD to see the readings properly

To be honest, I don't see much difference in the readings, but you can clearly see that the red cube is stable for the first phone and not for the second.

By the way, I don't think the problem with the Realme isn't just with the Geospatial Api. I've also done some tests with Cloud Anchors and the stability is not good either.

Please let me know if this helps or if you need more data, videos, etc.

chankeiro avatar Mar 15 '24 14:03 chankeiro

Hi. Do you have any feedback on my previous comment?

chankeiro avatar Mar 27 '24 13:03 chankeiro