C. Indoor positioning and navigation
The framework includes the open-source OsmAnd8 tool for
Android platform. OsmAnd provides offline navigation using
the classical A* search algorithm to find routes by minimizing
the path cost. The routing engine was extended to support
new features: (i) indoor navigation in multi-level buildings;
(ii) identification of accessible paths in a travel; (iii) accurate
indoor positioning. Global Positioning System (GPS) may not
work inside buildings due to lack of reliable reception of
satellite signal. Wi-Fi access point trilateration is useful in
indoor spaces, but it generally suffers from signal instability
due to multipath propagation. Therefore our tool complements
Wi-Fi with the IndoorAtlas API9, based on Earth’s Magnetic
Field (EMF) for indoor location discovery. Using IndoorAtlas,
the smartphone performs measurements of magnitude and
direction of the EMF affected by the local structures of the
building, via the embedded magnetometer. The measured EMF
vectors are sent to the database server, which returns a location
estimate. Before application deployment, the whole environment
must be surveyed for collecting reference EMF values.
This is a non-negligible effort, although simpler and more
robust than other solutions such as inserting reflective tags
on landmarks throughout a built space. Finally, the navigation
engine exploits the user profile described in Section III-B to
compute the most suitable path from the user position to the
selected POI. The route is automatically recalculated when
7https://github.com/phishman3579/android-augment-reality-framework
8https://github.com/osmandapp/Osmand
9https://www.indooratlas.com/
Fig. 4: Mobile Augmented Reality tool GUI
the system detects the user is not following the suggested
path. In case of unexpected obstacles, e.g., a locked door or
out-of-order elevator, the user can report it through the GUI:
the system backend infrastructure is alerted and can trigger a
map temporary update as well as a maintenance intervention;
meanwhile, the user’s navigator calculates a new route to
destination.