Suite

Comment créer un graphe de parcours piéton depuis OSM ?

Comment créer un graphe de parcours piéton depuis OSM ?


Je suis intéressé à obtenir les chemins à partir des données OSM. Plus précisément, je considère la zone dans les limites de la ville de Berlin. J'ai téléchargé le fichier OSM correspondant de Geofabrik et j'ai l'intention d'utiliserosmosepour filtrer les données. Dans un premier temps j'aimerais les chemins qui sont utilisables par les piétons. J'ai commencé avec ça :

osmose --read-xml file=berlin-latest.osm.bz2 --tag-filter accept-ways Highway=footway --used-node --write-xml file="berlin-foot.osm"

Cependant, je ne suis pas sûr du moment où les balises piéton et piéton. Essentiellement, je veux me retrouver avec un graphique pour pouvoir effectuer des tâches de routage. Aurai-je besoin des deux relations dans ce cas ? De plus, au moins les autoroutes piétonnes semblent parfois contenir des balises "area=yes". Puis-je également filtrer sur le type de chemin ?

Edit : je voudrais toutes les voies qui peuvent être utilisées par les piétons, je ne veux pas me limiter aux voies réservées aux piétons. Ma version actuelle est la suivante :

INPUT="berlin-latest" osmose --read-xml file="${INPUT}.osm.bz2"  --tag-filter accept-ways Highway=footway,pedestrian,path,track  --tag-filter rejeter -relations --used-node --write-xml file="${INPUT}-foot.osm.bz2" osmose --read-xml file="${INPUT}.osm.bz2"  --tag-filter accept-ways Highway=*  --tag-filter accept-ways sidewalk=both,left,right,yes  --tag-filter throw-relations --used-node --write-xml file="${INPUT} -sidewalk.osm.bz2" osmose --read-xml file="${INPUT}.osm.bz2"  --tag-filter accept-ways Highway=residential,unclassified,living_street  --tag-filter rejeter-relations --used-node --write-xml file="${INPUT}-residential.osm.bz2" osmose --read-xml file="${INPUT}-sidewalk.osm.bz2"  --read-xml file="${INPUT}-foot.osm.bz2"  --read-xml file="${INPUT}-residential.osm.bz2"  --merge --merge --write-xml file="$ {ENTRÉE}-piéton.osm.bz2"

Cela semble raisonnable, bien que je sois encore incertain en ce qui concerne les balises de zone. Je pourrais aussi supprimer leaccès=privéfaçons. Un autre problème est que certaines autoroutes n'ont pas leurtrottoirbalises, il faudrait donc faire un peu plus de mappage…


autoroute=chemin est utilisé pour les chemins entre les routes ou à travers les parcs. Highway=path est utilisé de la même manière (avec quelques débats) pour les petits chemins qui ne sont pas pavés mais qui ont été usés dans l'herbe.

autoroute=piéton est utilisé pour les routes larges qui ont été "piétonnes" afin que les véhicules ne soient pas autorisés à les emprunter (sauf peut-être pour les livraisons). Ils sont également utilisés pour des zones telles que les places, avec l'ajout d'une balise area=yes. Un exemple est celui de Bradenburger Tor. http://www.openstreetmap.org/way/38210407#map=18/52.51628/13.37865

L'itinéraire sur les zones piétonnes est un cas différent, vous pouvez espérer que quelqu'un a également cartographié les sentiers/pistes cyclables à travers la zone, comme ils l'ont fait ici. Sinon, vous voudrez peut-être faire un travail supplémentaire dans votre système de routage pour dire que vous pouvez naviguer à partir de n'importe quel point du bord, en ligne droite jusqu'à n'importe quel autre point du bord. Un exemple est que si vous allez à l'ouest par la porte/tor, vous n'avez pas à suivre la piste cyclable jusqu'à la route, vous pouvez immédiatement tourner à droite et vous diriger vers le nord sur la place pour faire un raccourci rejoignant Erbertstrasse et arriver à Dorotheenstrasse.

Pour obtenir tous les moyens acceptables pour les piétons Je commencerais par toutes les valeurs d'autoroute (les piétons sont si polyvalents !), puis j'ajusterais vos règles pour inclure les exceptions. autoroute != autoroute ET autoroute != autoroute_link peut-être suffisant pour autant que je puisse penser en ce moment. Comme vous l'avez mentionné, ajoutez également une clause pour les restrictions d'accès appropriées. http://wiki.openstreetmap.org/wiki/Key:access

OpenStreetMap est génial pour sa richesse de données créées par la communauté, mais cela signifie beaucoup de balises à prendre en compte. N'oubliez pas de jeter un œil à vos données ou à un endroit que vous connaissez bien. S'il y a quelque chose que vous jugez mal, voyez comment c'est m


Je ne pouvais pas comprendre quel type de structure je devrais donner

L'utilisation de plot_graph_route et la structure de ses arguments sont décrites en détail dans la documentation OSMnx. La technique pour tracer des routes entre les points lat-lng est documentée dans les exemples OSMnx, comme suit :

La documentation et les exemples décrivent de la même manière la fonction plot_graph_folium.

OSMnx peut tracer l'itinéraire sur une carte si l'itinéraire comprend des nœuds OSM avec des identifiants OSM.

Ce que vous avez actuellement sont des points GPS bruts comprenant une série de points (lat, long). La première étape devrait être la correspondance de carte, une procédure pour mapper les points de données GPS au nœud OSM le plus proche/le plus approprié. Si vous pouvez le faire pour tous vos points de données GPS, vous aurez le nœud/point OSM le plus approprié sur le réseau routier OSM (selon la sophistication de votre algorithme de correspondance de carte) pour chacun de vos points de données GPS.

OSMnx a une représentation de correspondance de carte très grossière en termes d'obtention du nœud le plus proche pour un (lat, long) donné sous la forme de

comme mentionné par Geoff dans sa réponse. Vous pouvez choisir de le faire pour tous vos points de données GPS au lieu de simplement les points de fin et de récupérer l'itinéraire le plus court. Mais, encore une fois, il s'agit d'une correspondance de carte très grossière, en fonction de la précision souhaitée.


Concevoir

Le noyau d'OpenTripPlanner se compose de trois composants logiciels de base : un générateur de graphiques, un moteur de routage et une interface utilisateur. Alors que l'interface utilisateur principale (c'est-à-dire la carte et la représentation visuelle de l'itinéraire) est écrite en JavaScript, les autres composants sont écrits dans le langage de programmation Java sur la plate-forme Java Enterprise Edition (Java EE). Le moteur de routage OpenTripPlanner est intégré dans une API de service Web RESTful qui peut être utilisée avec d'autres applications clientes personnalisées.

Les progrès les plus récents du projet OpenTripPlanner peuvent être trouvés sur les listes de diffusion OpenTripPlanner Developers Group [10], OpenTripPlanner Users Group [11] et Transit Developers Group [12], ainsi que sur le site Web principal d'OpenTripPlanner [13].

Le code source d'OpenTripPlanner est sous licence GNU Lesser General Public License (LGPL) [14] et est accessible au public sur le site Web OpenTripPlanner.org.


Outils de planification de services Openroute :

Client de cartes classiques

Notre outil classique de planification d'itinéraire vous permet d'utiliser la plupart de l'API openrouteservice en quelques clics seulement sur une carte. Choisissez parmi une variété de profils et configurez jusqu'à 50 points de cheminement pour planifier votre itinéraire. Personnalisez-le en évitant des zones, des types de rues spécifiques ou des pays entiers. Interrogez les POI le long de votre itinéraire, effectuez des analyses d'accessibilité pour plusieurs points ou inspectez simplement des emplacements.

Ces fonctionnalités et bien d'autres encore sont proposées gratuitement et dans différentes langues. Mais la meilleure chose à ce sujet : c'est open source, donc avec un peu de connaissances en JavaScript, vous pouvez facilement ajuster le client à votre cas d'utilisation personnel.

Client de cartes de sinistre

Basé sur la version classique, notre client pour la gestion des catastrophes est développé pour soutenir le travail des acteurs humanitaires et des intervenants en cas de catastrophe dans les régions du monde les plus vulnérables et les plus exposées aux catastrophes. Grâce au travail de l'équipe humanitaire OpenStreetMap et du projet Missing Maps, dans les situations de catastrophe, les données OSM sont continuellement mises à jour et enrichies d'informations critiques. En limitant le service aux régions sinistrées actives, il est possible de recalculer le graphe de routage une fois par heure sur la base des données OSM les plus récentes.

Nouveau client de cartes

Notre nouveau client de cartes a été construit avec l'incroyable framework VueJs est déjà disponible. Le nouveau client conserve toutes les fonctionnalités du précédent, mais est complètement réactif et optimisé pour une utilisation sur les navigateurs mobiles et de bureau, tout en apportant un tas de nouvelles fonctionnalités. Nous visons une interface cartographique plus intuitive qui rend la planification des itinéraires encore plus facile et nous réfléchissons beaucoup aux améliorations structurelles et des performances.

Aidez-nous à améliorer votre expérience utilisateur en nous faisant part de vos commentaires via notre forum de questions.

Le code source est disponible pour tout le monde sur GitHub. Un grand avantage de la nouvelle approche est la possibilité de convertir facilement le client en une application mobile native, ce qui nous rapproche de l'offre d'une véritable application de routage en direct. Alors restez à l'écoute pour les futurs développements!


Navigation piétonne à l'estime à l'aide de graphiques de routage basés sur A* dans de grands espaces non contraints.

Le Pedestrian Dead Reckoning (PDR) est largement adopté dans le domaine de la navigation piétonne avec des appareils portables. Il est particulièrement adapté à la localisation sur smartphone car les capteurs inertiels peuvent être conçus dans une technologie MEMS (Microelectromechanical Sensors), leur permettant d'être embarqués dans des dispositifs légers. Contrairement aux récepteurs GNSS, les capteurs inertiels sont particulièrement utiles à l'intérieur car ils permettent une localisation autonome sans visibilité du ciel. Cependant, en raison de la dérive du gyroscope et des limitations de détection de pas, des informations supplémentaires sont nécessaires pour assister le processus de positionnement PDR. Pour les capteurs montés sur pied, l'étalonnage de mise à jour de la vitesse zéro (ZUPT) est exploité pour ajuster les paramètres de positionnement en détectant les phases d'appui dans le cycle de marche (phase statique), bien que cet étalonnage ne soit pas possible avec les appareils portatifs en raison du mouvement de la main libre et d'une augmentation difficulté à détecter la phase d'appui. À l'extérieur, la PDR peut toujours être assistée par le GNSS [1], mais cela n'est pas faisable à l'intérieur en raison de l'indisponibilité du signal et des mesures supplémentaires sont nécessaires. Celles-ci pourraient être fournies par des balises radio ou des informations visuelles. La première approche nécessite le déploiement d'une infrastructure et une formation [2], tandis que la seconde nécessite une caméra et un traitement d'image supplémentaire pour la reconnaissance des caractéristiques [3]. Une troisième possibilité consiste à contraindre la position du piéton à l'aide d'informations cartographiques. Deux paradigmes principaux peuvent être retenus des travaux antérieurs. Soit l'espace praticable est donné par des cartes 2D délimitées par des obstacles [4], soit il est donné par un réseau de graphes de routage qui transforme le processus de positionnement en un modèle 1D par morceaux [5]. Dans le premier cas, l'espace est mieux exploré mais la carte n'est pas exploitée plus loin que pour détecter des obstacles statiques (par exemple, des murs). Cela signifie qu'aucun étalonnage n'est effectué à moins qu'un obstacle ne soit heurté. Au contraire, les graphes de routage sont beaucoup plus contraignants car le modèle de mouvement est directement donné par le réseau de graphes. Par conséquent, leur utilisation a un plus grand impact sur la forme et la précision de la trajectoire et ils doivent être suffisamment réalistes pour limiter les erreurs de positionnement.

Cet article se concentre sur le routage PDR assisté par graphe. En fait, les graphes de routage impliquent un modèle de mouvement simple qui permet à la fois d'éviter les obstacles et de calibrer les directions de marche dans les déplacements en ligne droite [5]. Leur utilisation peut même être étendue à la calibration du modèle de longueur de pas comme rapporté dans nos travaux précédents [6], bien que deux inconvénients majeurs rendent leur utilisation assez peu pratique et parfois inefficace. Premièrement, il n'y a pas de processus ubiquitaire qui génère des réseaux de graphes piétonniers intérieurs-extérieurs combinés. Leur construction peut être chronophage et parfois inadéquate avec le mouvement des piétons. Bien que le graphique soit censé contrebalancer les limitations du PDR, il peut introduire des erreurs supplémentaires dues à des incohérences avec le déplacement réel. Deuxièmement, ils ne gèrent pas les trajectoires "pseudo-aléatoires" dans les zones sans obstacle et lors de la transition entre les espaces extérieurs et intérieurs à mesure que la liberté de mouvement augmente. Dans ces cas, les graphes de routage deviennent inefficaces car aucune hypothèse de mouvement ne peut être invoquée pour concevoir un réseau réaliste. Les modèles basés sur des grilles sont bien adaptés à l'exploration de grands espaces [7]. Pourtant, aucun étalonnage n'est possible avec cette approche. Cela conduit même à surestimer la distance de déplacement car la linéarité du mouvement est perdue en raison de la structure de la grille. En conséquence, le processus PDR n'est plus assisté et les problèmes de base de la dérive du gyroscope et de la distance de déplacement non calibrée ne sont pas résolus.

Une solution à la vulnérabilité de la navigation PDR assistée par graphe de routage dans des espaces sans obstacle est étudiée dans cette étude. La proposition est d'utiliser l'algorithme A*, qui est couramment utilisé pour la planification de chemin dans des mondes virtuels ou pour le guidage d'itinéraire de véhicule, afin de concevoir un graphe de routage réaliste dans des espaces sans obstacle. Le graphe est construit à partir d'un ensemble de waypoints cruciaux pour la navigation piétonne. En fait, ces derniers devraient compenser l'absence de contraintes géométriques en fournissant des emplacements stratégiques entre lesquels le calcul de chemin avec l'algorithme A* serait pertinent. Par conséquent, la première contribution de cette étude est d'atténuer la dérive dans l'approche PDR même dans les grands espaces. De plus, la question de l'accumulation d'erreurs lors de la transition entre les espaces intérieurs et extérieurs est abordée en améliorant la pertinence du graphe de routage. Ceci est accompli grâce au calcul des chemins probables qu'un piéton peut emprunter à partir d'emplacements stratégiques extérieurs pour atteindre les portes d'entrée des bâtiments. De plus, le choix de l'algorithme A* est bien adapté pour gérer différents profils de mobilité (par exemple, une maladie personnelle qui impacte le parcours de l'utilisateur cible) afin que l'approche puisse être personnalisée pour les besoins spécifiques de chaque piéton. En effet, cela est assuré grâce à une pondération relative à l'utilisateur de la carte qui intervient directement dans la construction du graphe. En effet, l'algorithme A* calcule les chemins optimaux en fonction des taux de marche donnés par une carte de navigation (par exemple, taux de marche en fonction des pentes, de la chaussée). Par exemple, on emprunterait le chemin le plus court pour traverser une zone dégagée, alors qu'une personne handicapée peut suivre un autre chemin comme marcher près de murs ou de pistes dédiées.

2. A * Pathfinding dans les maillages de navigation

2.1. Présentation de la génération de maillage de navigation. Un maillage de navigation (NavMesh) est un ensemble de plusieurs polygones 2D ou 3D accessibles par un utilisateur donné [8]. Cette structure peut être obtenue automatiquement à l'aide d'un logiciel SIG. D'autres utilisent RECAST [9], une bibliothèque open source au sein de la communauté des concepteurs de monde virtuel. Plusieurs études ont été menées sur la façon de construire des maillages de navigation à partir de modèles 3D bruts [10,11]. La construction NavMesh permet d'attribuer des poids qui traduisent les taux de marche des polygones en fonction de certaines caractéristiques données (pente, type = ) et au profil de mobilité de l'utilisateur cible (capacité à marcher, à monter, à monter les escaliers, etc.). La pondération du NavMesh est assez importante pour considérer le profil de mobilité de l'utilisateur afin de calculer les chemins de routage appropriés. DETOUR [12] est un exemple de logiciel open source qui permet des calculs de pathfinding A* sur la base d'un NavMesh.

2.2. Une génération NavMesh de centre commercial. La méthode proposée a été appliquée à un centre commercial (Figure 1). Ce dernier est cartographié dans Google Maps avec les noms des magasins, les principales portes du centre commercial et l'ensemble des zones piétonnes. Nous avons utilisé le logiciel QGIS 2.12.1 pour extraire la carte sous forme de raster avec une résolution de 11 cm. Les zones praticables ont été extraites en numérisant la carte et en éliminant les obstacles. La triangulation de Delaunay a été utilisée pour créer le NavMesh. Tous les polygones ont reçu le même poids car toutes les expériences sont menées par des personnes en bonne santé. Cela implique que les chemins calculés A* minimiseront la distance et peuvent donner une forme qui peut être obtenue avec différentes approches [10,13].

2.3. A * Algorithme de recherche de chemin. A* est une version améliorée de l'algorithme de Dijkstra [14]. Ce dernier vise à calculer le chemin optimal entre deux points selon une fonction de coût donnée. L'optimisation s'applique à la distance de déplacement, au temps de déplacement, à l'énergie dépensée, etc. Cette adaptabilité permet de faire face à la problématique de la mobilité réduite due à une maladie ou un handicap. Le processus d'optimisation A* est un schéma de recherche discret où l'espace est modélisé par une grille composée de cellules. Chaque cellule est explorée selon un graphe d'adjacence qui modélise les connexions au sein de la grille. Une fois visitée, une cellule est stockée avec son coût assigné jusqu'à ce que la cellule cible soit atteinte. Le chemin optimal est donné par la séquence de cellules pour laquelle la somme des coûts est minimale. A* est une extension du principe de Dijkstra qui calcule le coût des cellules visitées en fonction de leur distance au point de départ (qui est la même que le coût de Dijkstra) mais aussi de leur distance supposée à la cellule cible dans une approche heuristique. Le coût à parcourir a priori est supposé inférieur au coût réel (inconnu) de la cellule actuelle à la cellule cible. A* est plus rapide que l'algorithme de Dijkstra en raison de l'exploration triée des cellules en fonction de leur coût restant à parcourir. Le schéma de recherche de chemin A* peut être appliqué à n'importe quel NavMesh rastérisé où les poids de polygone sont hérités par les cellules raster.

3. Génération de graphe de routage basée sur A*

3.1. Génération de graphes de routage sur la base de points de cheminement. Un waypoint est un élément ponctuel qui intervient de manière significative dans le processus de pathfinding. L'importance d'un waypoint est liée au rôle qu'il joue dans la prise de décision du piéton lors de son déplacement. Deux situations méritent réflexion. Le premier est lorsque le piéton a l'intention d'atteindre une destination connue dans un environnement familier. Dans ce cas, il est évident qu'il suit l'itinéraire le mieux adapté à son profil de mobilité. En général, c'est le plus court, mais il peut s'agir de n'importe quel chemin en fonction de la fonction de coût qui définit le profil de mobilité de l'utilisateur. Cette situation est gérée par l'algorithme A* utilisant un NavMesh pondéré. La destination cible est connue si elle est visible depuis la position actuelle du piéton, par exemple, si le piéton se situe à un nœud du graphe visible depuis son nœud cible. La deuxième situation est lorsque la destination du piéton est invisible en raison d'obstacles. Dans ce cas, des waypoints sont construits afin de discrétiser les destinations cibles possibles qui peuvent être des destinations finales ou intermédiaires.

Pour mieux comprendre la mise en œuvre des waypoints, l'espace doit être considéré par rapport à la cognition spatiale humaine. En effet, les zones piétonnes à l'intérieur d'un étage d'un bâtiment peuvent être des couloirs, des pièces ou des halls. A l'extérieur, les zones piétonnes sont l'espace comprenant les trottoirs, les sentiers, les places, les parkings, etc. (les routes font partie des zones carrossables.). Cette classification intuitive des composants de l'espace permet de définir des scènes et d'étendre ce que l'on appelle des scènes de décision à l'espace extérieur et aux couloirs. Les scènes de décision ont été définies précédemment dans [15] comme les endroits qui « peuvent être entrés et quittés et [sont] physiquement délimités par des bâtiments et d'autres obstacles solides qui empêchent le mouvement. L'extension des scènes de décision aux couloirs et aux sentiers dans cet article est motivée par le fait que ces éléments ont des bordures (bordures physiques pour les couloirs et bordures géométriques pour les sentiers) et qu'on peut y accéder et sortir par des points spécifiques. Par exemple, deux couloirs sont deux scènes distinctes. On peut y accéder et sortir par leur intersection qui est un coin de bâtiment, un couloir et un hall sont également des scènes distinctes entre lesquelles la circulation est possible à travers leur intersection. Deux éléments sont importants pour les déplacements piétons à l'intérieur et entre les scènes. Le premier est lié à l'isoviste, qui est l'espace visible depuis la position actuelle du piéton. L'isoviste est principalement influencé par la présence d'obstacles qui ont un impact à la fois sur la visibilité et sur la trajectoire du piéton [16]. Le deuxième élément est l'ensemble des portails qui permettent les flux de piétons d'une scène à l'autre [15] tels que les extrémités des couloirs, les portes des bâtiments, les entrées des magasins ou les extrémités des sentiers. En effet, les éléments clés du comportement d'orientation des piétons dépendent principalement des portails et des frontières d'obstacles (qui déterminent l'isoviste). Ils matérialisent le fait que la visibilité et la finalité (destination) sont les paramètres qui donnent forme à sa trajectoire. Dans cette étude, l'ensemble des waypoints est composé de portails (extrémités de couloirs, extrémités de sentiers et portes extérieures/intérieures) et de coins d'obstacles. La construction de graphe basée sur les waypoints est évidemment plus réaliste que les méthodes à noyau où les scènes sont modélisées par leurs centres [17], impliquant à tort que le piéton passe systématiquement par le centre de la scène. En outre, la structure du graphe n'est pas entièrement déterminée par la géométrie de l'espace mais gère des chemins comportementaux générés en fonction des points de cheminement et reflétant les stratégies de déplacement des piétons.

Une fois que les waypoints ont été construits, ils peuvent être exportés dans une base de données qui aidera le processus de recherche de chemin. Chaque paire de waypoints est liée par un ensemble d'itinéraires qui sont générés avec l'algorithme A* et font partie du graphe de routage final. Le mouvement multihypothèses est traité comme dans les graphes de routage classiques en explorant plusieurs chemins et en gardant ceux qui sont les mieux adaptés aux mesures IMU. La structure du graphe est stockée sous la forme d'une base de données SIG qui contient les identifiants des segments de graphe, leurs coordonnées de nœuds d'extrémité, leur longueur et leurs connexions au sein du graphe dans une approche de connectivité de nœud. Chaque arête du graphe est orientée et possède un nœud d'entrée A et un nœud de sortie B. La conception nœud-connectivité est impliquée dans le modèle de mouvement utilisé pour le filtrage.

3.2. A* Planification du chemin pour une transition transparente entre les espaces extérieurs et intérieurs et dans les zones sans obstacles. Des travaux antérieurs ont démontré que les graphiques basés sur la disposition intérieure sont efficaces pour améliorer la localisation PDR dans des zones géométriquement contraintes [5, 6]. Par conséquent, la méthode proposée s'applique uniquement à la zone qui précède l'entrée principale du centre commercial ainsi que dans le hall sans obstacle (figure 2). Ces derniers représentent les endroits critiques dépourvus de GNSS où les informations cartographiques ne parviennent pas à fournir un étalonnage au processus de positionnement PDR, soulignant le principal problème abordé dans cet article. En extérieur, le graphe de routage est construit en fonction de la géométrie des trottoirs, des passages pour piétons et des sentiers.

La figure 3 montre le graphe de routage généré dans la zone de test. Trois waypoints matérialisent le portail d'entrée du bâtiment (dessiné en noir sur la figure 2). La mise au point est faite sur le waypoint où les chemins rouges se croisent. Il représente le côté gauche de l'entrée du centre commercial. Les chemins rouges sont les itinéraires calculés A* reliant le côté gauche de la porte à d'autres lieux d'intérêt tels que les entrées de magasins ou les couloirs principaux du bâtiment. Ces derniers sont modélisés par une série de droites selon les directions principales des couloirs. Trois chemins relient l'espace extérieur à l'espace intérieur par le côté gauche de l'entrée du centre commercial.

Cette représentation montre que les déplacements en ligne droite sont privilégiés pour un déplacement pratique et rapide. Ils sont également plus réalistes en ce qui concerne le mouvement des piétons. En fait, certaines hypothèses sont écartées comme marcher vers des murs ou faire une série de virages pour rejoindre un endroit accessible tout droit. De plus, cela fournit une mesure des directions de marche données par les segments de graphe dans les zones sans obstacle, ce qui serait impossible si une approche par grille avait été appliquée, nécessitant des informations supplémentaires telles que le signal des radiobalises pour compenser les erreurs PDR.

4. IMU Fusion avec GNSS et le graphique de routage avec un filtre à particules

4.1. Détection de pas et calcul de cap. La détection de pas est réalisée après classification de mouvement selon [18] en détectant des pics sur le signal d'accélération à l'aide d'un algorithme de seuil adaptatif [19]. Selon la même référence, un modèle générique est utilisé pour estimer la longueur de pas. Ce modèle repose sur un ensemble de trois paramètres entraînés sur 10 sujets et est donné par

où s est la longueur de pas, h est la taille de l'utilisateur, f est la fréquence de pas, est les paramètres génériques du modèle, et k est un facteur d'échelle qui devrait calibrer le modèle sur le piéton.

Les caps ont été calculés avec le filtre d'estimation d'attitude MAGYQ [20] qui fusionne les signaux d'un accéléromètre triaxe, d'un gyroscope triaxe et d'un magnétomètre triaxe. Le calcul du cap prend en compte différents modes de transport tels que le mode swing ou le mode texto. L'orientation de l'appareil dans l'espace 3D est alors obtenue et l'angle de lacet déduit, donnant l'orientation de l'appareil par rapport au nord vrai.

4.2. Étalonnage des paramètres PDR à l'aide des positions GNSS et du graphique de routage. Les paramètres PDR à étalonner sont la longueur de pas et les caps. Le modèle de longueur de pas doit être ajusté à chaque utilisateur car les paramètres du modèle dépendent des caractéristiques physiologiques et du cycle de marche du piéton, tandis que les caps sont potentiellement mal alignés avec la direction de marche réelle en raison de la dérive du gyroscope et du mode de transport de l'appareil. En effet, le dispositif peut être orienté vers une direction différente de la direction de marche. Ces erreurs sont compensées en fusionnant l'IMU avec le GNSS et le graphe de routage. La fusion est réalisée grâce à un filtre particulaire qui modélise l'état (vecteur de variables inconnues) par un ensemble de particules (un ensemble de vecteurs d'état échantillonnés). Le vecteur d'état contient les variables nécessaires pour déterminer la position de l'utilisateur et est présenté en détail dans la section 4.3.

Le modèle de longueur de pas est ajusté au piéton en utilisant à la fois les positions du graphique et du GNSS lorsqu'elles sont disponibles. En effet, le graphe permet de conserver les positions sur le(s) chemin(s) plausible(s). Cela a un impact direct sur la distance parcourue. De plus, le GNSS diminue la dispersion des particules en les rapprochant de la position GNSS. D'autre part, les directions de marche sont données par des titres de chemin. Ils sont particulièrement fiables en intérieur car les chemins sont calculés par l'algorithme A* ou sont directement donnés par les directions principales des couloirs. La direction de marche dérivée du graphe de routage est ensuite comparée à la direction de pointage de l'IMU et le chemin le plus probable est sélectionné. La différence entre les deux caps donne le désalignement angulaire de l'IMU avec la direction de marche du piéton.

Le modèle de longueur de pas est calibré à l'aide d'un facteur d'échelle k. Cette dernière est supposée constante car elle dépend principalement des paramètres physiologiques du piéton. Il est modélisé par une variable gaussienne avec une moyenne de 1 m et de faibles variations car la longueur de pas est limitée à des valeurs réalistes comprenant 0,60 m-1 m. k devrait converger dans les trajets en ligne droite où un étalonnage optimal est garanti.

Le désalignement de cap [bêta] est la différence angulaire entre la direction de marche réelle et la direction de pointage de l'IMU. Il dépend du temps car il varie avec le mouvement de la main. Des échantillons uniformément répartis de valeurs de désalignement de cap sont dessinés avec des variations allant jusqu'à 30[degrés].

4.3. Implémentation de modèle avec un filtre à particules. Le vecteur d'état est donné par

où Id est l'identifiant de l'arête dans la base de données du graphe, Dp est l'abscisse curviligne, [delta] représente la direction de déplacement, qui peut être 1 si l'arête est parcourue en avant (de A à B) et -1 sinon (de B à A ), k est le facteur d'échelle qui étalonne le modèle de longueur de pas, [bêta] est le désalignement entre la direction de marche et la direction de pointage de l'appareil portatif, w est le poids de la particule, et p et t se réfèrent, respectivement, à la particule et le temps.

Chaque particule est déplacée le long de la trajectoire actuelle en fonction de la distance de déplacement donnée par la longueur du pas. Le filtre à particules introduit du bruit blanc sur chaque paramètre pour répartir les particules et optimiser l'exploration du graphe. La position de la particule est déterminée par l'identifiant de l'arête du graphe et son abscisse curviligne. Si ce dernier est au-dessus de la longueur de l'arête, l'une de ses arêtes connectées sera explorée. Le modèle de transition est

DU = (s) x [delta] x [alpha] + [n.sub.G] + [Dp.sub.t-1], (3)

où DU est comparé à la longueur de bord actuelle [L.sub.Id] pour calculer l'abscisse curviligne Dp (Figure 4), s est la longueur de pas et [n.sub.G] est l'erreur de modélisation représentée par un bruit gaussien . [alpha] [membre de] <0,1,2>et détermine le nombre de pas à faire par une particule. Il permet de détecter les pas trop/mal détectés.

La figure 4 donne le processus de test de transition qui permet de calculer l'abscisse curviligne Dp lorsqu'un nœud de sortie B est dépassé (c'est-à-dire, DU > 0). t est l'indice de temps. La connectivité BA/BB traduit la recherche dans la base de données des graphes afin de déterminer si l'arête en cours d'exploration est connectée à l'arête dépassée via un nœud A ou B. La même logique est adoptée si un nœud d'entrée A est dépassé (c'est-à-dire, DU < 0).

Lorsque les positions GNSS sont suffisamment précises, elles sont utilisées avec les en-têtes du graphique afin de calibrer à la fois le modèle de longueur de pas et les en-têtes PDR. Les en-têtes du graphique fournissent une mesure des directions de marche qui sont comparées aux en-têtes PDR, en tenant compte du désalignement angulaire potentiel. Ceci est effectué selon

[expression mathématique non reproductible] (4)

où [w.sub.t] est le poids de la particule et [E.sub.p] et [E.sub.GPS] sont, respectivement, la coordonnée Est prédite d'une particule et son observation GPS correspondante. [N.sub.p] et [N.sub.GPS] sont les mêmes paramètres le long de la direction Nord. [[SIGMA]-1] est la matrice de pondération considérant les précisions du graphe et de la position GPS.

En intérieur, certaines positions GNSS sont encore disponibles mais ces dernières sont généralement peu fiables et sont rejetées. Le test de réjection est réalisé en seuillant le rapport signal sur bruit (SNR) et la dilution horizontale de précision (HDOP). Seules les en-têtes des graphiques sont exploitées dans le processus de pondération. L'équation de pondération à l'intérieur est

[expression mathématique non reproductible] (5)

où [[theta].sub.PDR] est la direction de marche estimée par les algorithmes PDR, [[theta].sub.Id] est le cap prévu du chemin actuel, [beta] est le désalignement de cap entre la direction du chemin et l'estimation PDR, [expression mathématique non reproductible] est l'écart type du cap du chemin, et [expression mathématique non reproductible] est l'écart type de l'estimation de la direction de marche PDR.

Une fois les particules pesées, certaines d'entre elles se voient attribuer des poids faibles et deviennent inutiles dans le processus. Un rééchantillonnage est effectué pour dupliquer les particules de poids élevé et supprimer les autres. La quantité de particules est maintenue constante et leurs poids égaux après chaque mise à jour afin d'explorer suffisamment d'hypothèses de mouvement.

5.1. Collecte de données avec une main HSGNSS et IMUin. Trois volontaires sains (2 hommes, 1 femme) ont collecté des données avec le dispositif ULISS (Ubiquitous Localization Unit with Inertial Sensors and Satellites) (Figure 5) tenu en main (Figure 6). Les données ont été collectées dans des environnements extérieurs et intérieurs pour deux modes de transport d'appareils différents. Deux acquisitions ont été faites en mode texto et une en modes swing et textos. La durée moyenne des acquisitions était d'environ 14 minutes et la distance de marche pour chaque essai de près de 1,5 km.

Différents scénarios ont été choisis pour réaliser les expériences. Celles-ci seront expliquées en détail dans la section 6.1 où le texte est agrémenté de figures.

5.2. Des données d'entrée. Le dispositif ULISS [21] comprend une centrale inertielle à 9 degrés de liberté, un récepteur et une antenne GNSS haute sensibilité (HSGNSS), une carte mémoire et une batterie. It delivers measurements that are time-stamped in GPS time. Inertial sensors and magnetometers provide measurements at a 200 Hz frequency.

The HSGNSS receiver operates in a standalone mode and delivers positions in real time at a 5 Hz frequency. Delivered positions are time-stamped in GPS time and have metric accuracies ranging from 2 m up to 10 m near buildings and tree shades. In this work, GNSS positions were interpolated at the step frequency in order to be fused with the PDR estimates of headings and step lengths.

5.3. Reference Trajectories. Besides collecting data with ULISS device in hand, all volunteers were equipped with an independent GNSS receiver carried in their backpacks and a small antenna attached to their caps. GNSS measurements were then postprocessed in order to calculate reference trajectories by differential GNSS. This was performed using RTKLIB 2.4.2p12 software [22]. Measurements from the embarked GNSS receiver and from a nearby base station were used to perform relative GNSS positioning. Obtained positions had decimetric accuracies up to several meters near buildings and other elevated features. Afterwards, thresholding was applied to three parameters in order to reject some outlier position estimates. These parameters are first the number of visible satellites, second, the ratio factor of ambiguity resolution, and, finally, the horizontal dilution of precision. The resulting positions had precisions below 1 m and were adequate for accuracy assessment in this work.

6.1. Trajectory Analysis. Figures 7, 8, and 9 show the estimated trajectories (red) with the A* -generated routing graph and the particle filter described in Section 4.3. The blue pattern corresponds to the PDR trajectory, while the green one is the reference trajectory obtained by differential GNSS.

Figures 7 and 8 correspond to acquisitions performed in the texting mode. The starting point for both acquisitions lies on the top right extremity of the trajectories. Both subjects made a closed loop around the building, with an intermediate outdoor travel (bottom side of the figures) before reaching the starting point back.

For both acquisitions, the travel distance seems to be overestimated. Yet, heading determination is more accurate for the first acquisition as the shape of the trajectory is more faithful to the building structure. The drift is higher for the second dataset and can be visually observed at the end of the PDR trajectory.

Where the drift is most important, the PDR trajectory presents major inconsistencies with the map. According to Figures 7, 8, and 9, the drift has been corrected as the estimated trajectories are more compliant with the building structure and with footpaths in outdoor space. This has been achieved thanks to the proposed particle filter and to an increased conformity with pedestrian motion, demonstrating that the positioning accuracy for the texting scenario has been significantly enhanced using our approach.

Figure 9 corresponds to data collected for both the swinging and texting modes. The acquisition started at the bottom of the figure where the reference and the filtered trajectories overlap. Starting from this position, the subject entered the building and then went outside through the North-East building entrance. This travel was made in the swinging mode. The top right extremity of the trajectory underlines a U-turn before the subject entered the building back to reach the starting point. This part of the travel was performed in the texting mode.

Unlike the two first acquisitions, there is a gap in the PDR trajectory because the subject did not go around the building as the two first subjects did. This gap is retrieved in the filtered trajectory.

Obviously, this scenario implies a less accurate heading determination and even an alteration in the travel distance estimation. In fact, the walking distance is underestimated for the swinging mode (first part of the travel until the subject reached the outdoor) and overestimated for the texting mode (second part of the travel until the ending point). These errors can be noticed in the PDR trajectory.

The filtered trajectory shows that the drift has been corrected, resulting in a shape that is more compliant with the map and with the reference trajectory outdoors. Yet, the positioning accuracy seems to be decreased as compared with the two first datasets. Following section discusses the accuracy of estimated trajectories.

6.2. Error Computation. In order to assess the accuracy of our positioning method, filtered positions were compared to the reference positions interpolated at the step frequency. The average plane error ranges from 4 to 5 meters for the three datasets (Figure 10). Accuracy is dependent on the quality of the PDR trajectory. Therefore, computed errors are more important for the second dataset considering the texting scenario. For the third acquisition that includes both swinging and texting, the accuracy is significantly decreased and more outliers (precisions above 15 m), which are given by the red plus signs in Figure 10, are detected due to mismatching errors (i.e., choosing wrong edges of the graph). These errors are mainly due to uncalibrated PDR parameters and are discussed in the following sections.

6.3. Heading Misalignment Estimation. Figures 11,12, and 13 show the estimated heading misalignment values for each dataset. For the first trial (Figure 11), angular misalignment is comprised between -10[degrees] and +10[degrees] and varies around an approximate mean value of 0[degrees]. According to this distribution, the angular difference between walking directions and the pointing direction of the device is minimal. Hence, applied corrections compensate only for the gyro drift, which is rather logical regarding the texting mode scenario.

For the second dataset (Figure 12), estimated heading misalignment values are between -15[degrees] and +12[degrees]. They are not equally distributed around 0[degrees] (e.g., between the 1st and 2nd minutes the mean value is over 5[degrees]). From this analysis, nonnegligible hand motion can be assumed even if the subject intended to perform the experiment in the texting mode.

Figure 13 gives the estimated heading misalignment for the third trial. The first part (until 9.5 min) of the travel was performed in the swinging mode. Hence, the estimated values vary significantly (-15[degrees] to +20[degrees]). For the second part of the plot (>10min), angular misalignment variations occur with lower magnitudes comprising [+ or -]5[degrees] over a mean value of 0[degrees] which reflects the texting mode of the acquisition.

6.4. Step Length Model Calibration. In this paper, a scale factor was introduced on the step length in order to calibrate the walking distance, though due to degraded GNSS signal and to short walking periods in outdoor space, the scale factor was not calibrated. In fact, regular and accurate GNSS positions are needed through straight line travels as cited in our introduction in order to calibrate the walking distance. These conditions were not verified during our experiments.

As a result, only corrected headings were relied on in the selection process. Therefore, distance calibration occurred only at junctions of the graph when a change in heading was detected. This explains the fact that the accuracy of filtered trajectories is still enhanced and compliance with the map improved.

Though the uncalibrated walking distances caused some mismatching errors because direction change was detected too late or too early in the process, this can be noticed in the Northern part of Figure 9. Indeed, while the pedestrian was intending to exit the building, the filtered trajectory indicates that he was walking towards a corridor. This happened for two reasons. First, the real trajectory is quite unusual in terms of pedestrian behavior. In fact, there is a change in heading (observed in the PDR trajectory) that is independent of space configuration, invalidating the assumptions that allowed constructing our navigation network. Second, the uncalibrated walking distance prevented the particles from reaching outdoor space at the right time. Another mismatching error occurred at the middle of the building (between 300 m and 400 m North) because direction change was detected too late due to uncalibrated walking distance. Later on, the particle filter corrected for this error and converged over the right corridor thanks to the particle dispersion over the graph and to the multihypothesis approach.

A map-aided PDR approach where a routing graph is used as motion model has been proposed. Main contribution of this paper is A* algorithm adaptation to elaborate a pedestrian network that is capable of cancelling the gyro drift and the misalignment between the device orientation and the walking direction even in large spaces. These are GNSS-deprived and obstacle-free areas where the limitations of map-aided PDR algorithms are most important. In fact, widespread map-aided PDR approaches do not compensate for these errors when pedestrian motion is unconstrained, mainly during the transition between outdoor and indoor spaces and when obstacles are absent. The A*-based routing graph mitigates the lack of obstacles thanks to a set of waypoints implemented according to human spatial cognition and to a weighted navigation mesh. This allows building a realistic motion model that meets the requirements of map-aided localization. Indeed, the proposed routing graph is well exploited because it gives prior knowledge about the pedestrian's destination and provides reliable measurements of walking directions. Results show that it is adequate for a seamless transition between outdoor and indoor environments and for enhancing the positioning accuracy even in large spaces. Achieved accuracies range from 3 to 5 meters and the drift is almost cancelled with the help of the routing graph, though some mismatching errors due to uncalibrated walking distance, especially while carrying the device in the swinging mode, might induce important positioning errors. Indeed, proper conditions of sky visibility and sufficient period of outdoor walking are prerequisite for the step length calibration before the pedestrian reaches indoor space.

The authors declare that there are no conflicts of interest regarding the publication of this paper.

This research work was done as part of the Happy Hand (2015-2018) project which is funded by the 19th "Fonds Unique Interministeriel" (French national R&D funding).

[1] J. B. Bancroft and G. Lachapelle, "Data fusion algorithms for multiple inertial measurement units," Sensors, vol. 11, non. 7, pp. 6771-6798, 2011.

[2] Y. Hu, L. Sheng, and S. J. Zhang, "Design of Continuous Indoor Navigation System Based on INS and Wifi," Applied Mechanics and Materials, vol. 303-306, pp. 2046-2049, 2013.

[3] T. Lee, B. Shin, J. H. Lee et al., "An Indoor Positioning System Using Vision aided Advanced PDR technology without image DB and with motion recognition," in Proceedings of the ION 2013 Pacific PNT Meeting, pp. 490-497

[4] P. Hafner, T. Moder, M. Wieser, and T. Bernoulli, "Evaluation of smartphone-based indoor positioning using different Bayes filters," in Proceedings of the 2013 International Conference on Indoor Positioning and Indoor Navigation, IPIN 2013, October 2013.

[5] T. Willemsen, F. Keller, and H. Sternberg, "A topological approach with MEMS in smartphones based on routing-graph," in Proceedings of the International Conference on Indoor Positioning and Indoor Navigation, IPIN 2015, October 2015.

[6] F. T. Alaoui, D. Betaille, and V. Renaudin, "A multi-hypothesis particle filtering approach for pedestrian dead reckoning," in Proceedings of the 2016 International Conference on Indoor Positioning and Indoor Navigation, IPIN 2016, October 2016.

[7] T. Fetzer, F. Ebner, F. Deinzer, L. Koping, and M. Grzegorzek, "On Monte Carlo smoothing in multi sensor indoor localisation," in Proceedings of the 2016 International Conference on Indoor Positioning and Indoor Navigation, IPIN 2016, October 2016.

[8] M. R. F. Mendonca, H. S. Bernardino, and R. F. Neto, "Stealthy path planning using navigation meshes," in Proceedings of the 4th Brazilian Conference on Intelligent Systems, BRACIS 2015, pp. 31-36, bra, November 2015.

[9] "Recast: Detail API documentation for the members declared in Recast.h . - recastnavigation/[email protected]," GitHub, https://github.com/recastnavigation/commit/6f5c9f9b82418efc44b85974e604095b95354ada.

[10] I. Afyouni, C. Ray, and C. Claramunt, "Spatial models for context-aware indoor navigation systems: a survey," Journal of Spatial Information Science, vol. 4, non. 1, pp. 85-123, 2012.

[11] W. Van Toll, A. F. Cook, and R. Geraerts, "Navigation meshes for realistic multi-layered environments," in Proceedings of the 2011IEEE/RSJ International Conference on Intelligent Robots and Systems: Celebrating50 Years of Robotics, IROS'11, pp. 3526-3532, September 2011.

[12] DETOUR, "GitHub," https://github.com/recastnavigation/recastnavigation/tree/master/Detour/Source, 2017.

[13] F. Mortari, S. Zlatanova, L. Liu, and E. Clementini, "Improved geometric network model (IGNM): a novel approach for deriving connectivity graphs for indoor navigation," ISPRS Annals of Photogrammetry, Remote Sensing and Spatial Information Sciences, vol. II-4, pp. 45-51, 2014.

[14] N. O. Eraghi, F. Lopez-Colino, A. De Castro, and J. Garrido, "Path length comparison in grid maps of planning algorithms: HCTNav, A and Dijkstra," Design of Circuits and Integrated Systems, pp. 1-6, 2014.

[15] C. Gaisbauer and A. U. Frank, "Wayfinding Model For Pedestrian Navigation," in Proceedings of the 11th AGILE International Conference on Geographic Information Science, Spain, 2008.

[16] N. Victor, evaluation des deplacements pietons quotidiens, Universitee de Lyon, 2016.

[17] L. Yang and M. Worboys, "Generation of navigation graphs for indoor space," International Journal of Geographical Information Science, vol. 29, non. 10, pp. 1737-1756, 2015.

[18] M. Susi, V. Renaudin, and G. Lachapelle, "Motion mode recognition and step detection algorithms for mobile phone users," Sensors, vol. 13, non. 2, pp. 1539-1562, 2013.

[19] V. Renaudin, M. Susi, and G. Lachapelle, "Step length estimation using handheld inertial sensors," Sensors (Switzerland), vol. 12, no. 7, pp. 8507-8525, 2012.

[20] V. Renaudin and C. Combettes, "Magnetic, acceleration fields and gyroscope quaternion (MAGYQ)-based attitude estimation with smartphone sensors for indoor pedestrian navigation," Sensors (Switzerland), vol. 14, no. 12, pp. 22864-22890, 2014.

[21] ULISS, http://www.ifsttar-geoloc.fr/index.php/en/equipment/ 44-uliss.

[22] "GitHub--tomojitakasu/RTKLIB_bin," https://github.com/tomojitakasu/RTKLIB_bin, 2017

F. Taia Alaoui, David Betaille, and Valerie Renaudin

IFSTTAR, COSYS, GEOLOC, 44344 Bouguenais, France

Correspondence should be addressed to F. Taia Alaoui [email protected]

Received 10 March 2017 Revised 8 May 2017 Accepted 5 June 2017 Published 10 July 2017

Academic Editor: Carlo Fischione

Caption: Figure 1: Walkable zones have been meshed (green polygons). Blank spaces are also walkable but the NavMesh is restricted to our zone of interest. The gray blocks are the stores considered as obstacles.

Caption: Figure 2: Main area where A* algorithm has served for the routing graph construction.

Caption: Figure 3: The highlighted segments of the graph in red color show the A* itineraries relating a portal waypoint (left side of the building entrance door) to different destinations. The latter are either extremities of corridors or footpaths, obstacle corners, or store entries.

Caption: Figure 4: Dp computation according to DU.

Caption: Figure 5: Ubiquitous Localization Unit with Inertial Sensors and Satellites.

Caption: Figure 6: Data collection by a pedestrian with ULISS unit in hand.

Caption: Figure 7: Estimated trajectory (in red). The blue trajectory gives the PDR position estimates and the green one gives the reference trajectory (only texting).

Caption: Figure 8: Trajectories for the second dataset (only texting).

Caption: Figure 9: Trajectories for the third dataset (swinging, texting).


Flexibility and extensibility¶

We want to encourage others to contribute their expertise and local knowledge to routing and guidance/narrative. What makes a good route in one country/region may not hold true in another country. Having the ability to create dynamic and extensible “plug-in” code to perform costing/weighting may encourage others to use and extend Valhalla. Dynamic costing will also help create alternate route paths (at run time - without generating different data sets) and allow new costing methods for specialized use cases: truck routing, green/eco routing, and perhaps least cost routing. Within narrative and guidance generation software we want to provide means of adding custom narrative phrases and perhaps other means of extending or adding custom plug-ins to tailor the output to a user’s need.


Valhalla is an open source routing engine and accompanying libraries for use with OpenStreetMap data. Valhalla also includes tools like time+distance matrix computation, isochrones, elevation sampling, map matching and tour optimization (Travelling Salesman).

Valhalla, and all of the projects under the Valhalla organization, use the MIT License. Avatar/logo by Jordan

There are several key features that we hope can differentiate the Valhalla project from other routing and network analysis engines. Ils sont:

  • Open source software, on open source data with a very liberal license. Should allow for transparency in development, encourage contribution and community input, and foster use in other projects.
  • Tiled hierarchical data structure. Should allow users to have a small memory footprint on memory constrained devices, enable offline routing, provide a means for regional extracts and partial updates.
  • Dynamic, runtime costing of edges and vertices within the graph via a plugin architecture. Should allow for customization and alternate route generation.
  • C++ based API. Should allow for cross compilation of the various pieces to enable routing on offline portable devices.
  • A plugin based narrative and manoeuvre generation architecture. Should allow for generation that is customized either to the administrative area or to the target locale.
  • Multi-modal and time-based routes. Should allow for mixing auto, pedestrian, bike and public transportation in the same route or setting a time by which one must arrive at a location.

Valhalla is fully functional on many Linux and Mac OS distributions.

In Windows all functionality is not yet fully supported. Building the Valhalla library works flawlessly, as well as the following application modules:

  • TOOLS : utilities to query and benchmark various components
  • DATA_TOOLS : utilities to build input data and handle transit
  • PYTHON_BINDINGS : use all actions (route, isochrones, matrix etc) via the Valhalla Python library (needs a full (i.e. development) Python distribution in the PATH )

Also, be aware that building tiles on Windows works, however, you can't build tiles with support of admin & timezone DBs (see #3010). This mostly affects the following functionalities:

  • no/falsy time-dependent routing
  • no border-crossing penalties
  • driving side will be off in LHT countries
  • currently wrong navigation in roundabouts, see #2320

The Valhalla organization is comprised of several library modules each responsible for a different function. The layout of the various modules is as follows:

    - Basic geographic and geometric algorithms for use in the various other projects. - The base data structures for accessing and caching tiled route data. - Library used in costing of graph nodes and edges. This can be used as input to loki and thor . - Library and service for accessing elevation data. This can be used as input to mjolnir or as a standalone service. - Tools for turning open data into Valhalla graph tiles. - Library used to search graph tiles and correlate input locations to an entity within a tile. This correlated entity (edge or vertex) can be used as input to thor . - Library used to for map-matching. - Library used to generate a path through the graph tile hierarchy. This path and attribution along the path can be used as input to odin . - Library used to generate manoeuvres and narrative based on a path. This set of directions information can be used as input to tyr . - Service used to handle http requests for a route communicating with all of the other valhalla APIs. The service will format output from odin and support json (and eventually protocol buffer) output. - A set command line tools that exercise bits of functionality from the library components above and provide the basis for quality testing and performance benchmarking. - A set of demos which allows interacting with the service and APIs.

Documentation is stored in the docs/ folder in this GitHub repository. It can be viewed at valhalla.readthedocs.io.

[DEPRECATED] Get Valhalla from Personal Package Archive (PPA)

NOTICE: Since we moved to cmake build systems we haven't updated our debian packaging scripts. Because of that the packages in the PPA are very very old. Once we get time to correct this we'll remove this notice but until then we recommend building from source or using docker.

If you are running Ubuntu (trusty or xenial) Valhalla can be installed quickly and easily via PPA. Try the following:

Building from Source - Linux

Valhalla uses CMake as build system. When compiling with gcc (GNU Compiler Collection), version 5 or newer is supported.

To install on a Debian or Ubuntu system you need to install its dependencies with:

Building from Source - MacOS

Configuring Rosetta for ARM64 MacBook

Check your architecture typing arch in the terminal. In case the result is arm64 set up Rosetta terminal to emulate x86_64 behavior. Otherwise, skip this step.

  1. Go to Finder > Application > Utilities .
  2. Select Terminal and right-click on it, then choose Duplicate .
  3. Rename the duplicated app Rosetta Terminal .
  4. Now select Rosetta Terminal application, right-click and choose Get Info .
  5. Check the box for Open using Rosetta , then close the Get Info window.
  6. Make shure you get i386 after typing arch command in Rosetta Terminal .
  7. Now it fully supports Homebrew and other x86_64 command line applications.

Install Homebrew in the Rosetta Terminal app and update the aliases.

You will use them to specify the platform when installing a library. Note: use ibrew in Rosetta Terminal to install all dependencies for valhalla and prime_server projects.

To install valhalla on macOS, you need to install its dependencies with Homebrew:

Now, clone the Valhalla repository

After getting the dependencies install it with:

In Rosetta Terminal use these flags for cmake:

Important build options include:

Option Comportement
-DENABLE_DATA_TOOLS ( On / Off ) Build the data preprocessing tools
-DENABLE_PYTHON_BINDINGS ( On / Off ) Build the python bindings
-DENABLE_SERVICES ( On / Off ) Build the HTTP service
-DBUILD_SHARED_LIBS ( On / Off ) Build static or shared libraries
-DENABLE_COMPILER_WARNINGS ( ON / OFF ) Build with common compiler warnings (defaults to off)
-DENABLE_WERROR ( ON / OFF ) Treat compiler warnings as errors (defaults to off). Requires -DENABLE_COMPILER_WARNINGS=ON to take effect.
-DENABLE_BENCHMARKS ( ON / OFF ) Enable microbenchmarking (defaults to on).
-DENABLE_SANITIZERS ( ON / OFF ) Build with all the integrated sanitizers (defaults to off).
-DENABLE_ADDRESS_SANITIZER ( ON / OFF ) Build with address sanitizer (defaults to off).
-DENABLE_UNDEFINED_SANITIZER ( ON / OFF ) Build with undefined behavior sanitizer (defaults to off).

For more build options run the interactive GUI:

For more information on binaries, see Command Line Tools section below and the docs.

Building from Source - Windows

It's recommended to work with the following toolset:

  • Visual Studio with C++ support
  • Visual Studio Code (easier and lighter to handle) to install packages
  1. Install the following packages with vcpkg and your platform triplet (e.g. x64-windows ). Note, you can remove all packages after zlib in ..vcpkg_deps.txt if you don't want to build TOOLS & DATA_TOOLS :
  1. Let CMake configure the build with the required modules enabled. Noter, you have to manually link LuaJIT for some reason, e.g. the final command for x64 could look like

The following bash should be enough to make some routing data and start a server using it. (Note - if you would like to run an elevation lookup service with Valhalla follow the instructions here).

We welcome contributions to valhalla. If you would like to report an issue, or even better fix an existing one, please use the valhalla issue tracker on GitHub.

If you would like to make an improvement to the code, please be aware that all valhalla projects are written mostly in C++11. We use clang-format v7.0 to format the code. We welcome contributions as pull requests to the repository and highly recommend that your pull request include a test to validate the addition/change of functionality.

Note that our CI system checks that code formatting is consistent, and the build will fail if formatting rules aren't followed. Please run ./scripts/format.sh over your code before committing, to auto-format it in the projects preferred style. To spare yourself (and the CIs) pure format commits, you can register it as a pre-commit hook so it lints your changes in-place (and will fail if files were changed, so you'll need to stage and commit again):

Also note that we run some clang-tidy linting over the code as well (see .clang-tidy for the list of rules enforced). You can run ./scripts/clang-tidy-only-diff.sh over the code before committing to ensure you haven't added any of the common problems we check for (Note: ./scripts/clang-tidy-only-diff.sh requires the exitence of a compile_commands.json database. You can generate this file by running cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=On . && make .

scripts/clang-tidy-only-diff.sh is run in CI and will fail the build if it detects any issues.

Additionally, a check with ASan is run in CI. We recommend testing with ASan and debug symbols locally prior to commiting, with the -DENABLE_ADDRESS_SANITIZER=ON -DCMAKE_BUILD_TYPE=Debug flags during cmake configuration. As long as leak sanitizer (which is a part of address sanitizer) is not currently supported across different platforms it is disabled in the CI. You can disable it locally with the environment variable ASAN_OPTIONS=detect_leaks=0 .

We highly encourage running and updating the tests to make sure no regressions have been made. We use the Automake test suite to run our tests by simply making the check target:

To run an individual test, make run-<test name> from the build directory or ./test/<testname>

You may check some notes on unit tests

Coverage reports are automatically generated using codecov for each pull request, but you can also build them locally by passing -DENABLE_COVERAGE=On and running make coverage .

Valhalla includes several microbenchmarks which you can build and run using:

They are enabled by the -DENABLE_BENCHMARKS=On CMake flag and are currently only available for Linux and MacOS.


1. Introduction

With the upsurge of open data movement and the development of Internet of things, there has been an increasingly abundant data resource [ 1 , 2 ]. It provides a solid data foundation for the construction of smart cities. These data include maps and point of interest (POI), GPS, the flows of people, mobile phones, location based service, video monitoring, environment and meteorology and social activities data others. However, due to the characteristics of diversity and heterogeneity of the data, there still exist three major challenges in an attempt to use these data to solve construction requirements of smart cities [ 3 , 4 ]. The first one is how to mine the data and find out the potential knowledge from data conveniently. The second one is how to effectively build connection between the knowledge and integrate them into a knowledge network. The third one is how to utilise the correlations between knowledge to solve various demands in constructing smart cities.

In this paper an urban knowledge graph is proposed to address the above-mentioned issues. It find out knowledge from urban multi-source data by data mining and learning technology. A network graph is created by the relationship between knowledge. On the basis of the network graph some issues in practical application are to be addressed. Instead of being the single, scattered and isolated pieces of knowledge, the knowledge graph integrates them into a network and takes advantage of the correlations to provide solutions to the macro issues as well as the micro issues. Therefore, it provides a comprehensive reference for the construction of smart city and urban governance.


Pedestrian Dead Reckoning Navigation with the Help of

An -based routing graph is proposed to assist PDR indoor and outdoor navigation with handheld devices. Measurements are provided by inertial and magnetic sensors together with a GNSS receiver. The novelty of this work lies in providing a realistic motion support that mitigates the absence of obstacles and enables the calibration of the PDR model even in large spaces where GNSS signal is unavailable. This motion support is exploited for both predicting positions and updating them using a particle filter. The navigation network is used to correct for the gyro drift, to adjust the step length model and to assess heading misalignment between the pedestrian’s walking direction and the pointing direction of the handheld device. Several datasets have been tested and results show that the proposed model ensures a seamless transition between outdoor and indoor environments and improves the positioning accuracy. The drift is almost cancelled thanks to heading correction in contrast with a drift of 8% for the nonaided PDR approach. The mean error of filtered positions ranges from 3 to 5 m.

1. Introduction

Pedestrian Dead Reckoning (PDR) is widely adopted in the field of pedestrian navigation with handheld devices. It is particularly adapted to smartphone-based localization as inertial sensors can be designed in a MEMS (Microelectromechanical Sensors) technology, enabling them to be embedded in lightweight devices. Unlike GNSS receivers, inertial sensors are especially useful indoors as they allow standalone localization without sky visibility. Yet, due to gyro drift and step detection limitations, additional information is required to assist the PDR positioning process. For foot-mounted sensors, zero velocity update (ZUPT) calibration is exploited to adjust the positioning parameters by detecting stance phases within the gait cycle (static phase), though this calibration is not possible with handheld devices because of free hand motion and an increased difficulty to detect the stance phase. Outdoors, PDR can still be aided by GNSS [1], but this is not feasible indoors because of signal unavailability and further measurements are needed. These could be provided by radio beacons or visual information. The first approach requires infrastructure deployment and training [2], while the second necessitates a camera and further image processing for feature recognition [3]. A third possibility is to constrain the pedestrian’s position using map information. Two main paradigms can be retained from previous work. Either walkable space is given by 2D maps delimited by obstacles [4] or it is given by a routing graph network that transforms the positioning process into a piecewise 1D model [5]. In the first case, space is better explored but the map is not exploited further than for detecting static obstacles (e.g., walls). This means that no calibration is performed unless an obstacle is hit. On the contrary, routing graphs are much more constraining because the motion model is directly given by the graph network. Hence, their use has greater impact on the shape and accuracy of the trajectory and they have to be realistic enough to limit positioning errors.

This paper focuses on routing graph-assisted PDR. In fact, routing graphs involve a simple motion model that allows both obstacle avoidance and the calibration of walking directions within straight line travels [5]. Their use can even be extended to calibrating the step length model as reported in our previous work [6], though two major drawbacks make their use quite impractical and sometimes ineffective. First, there is no ubiquitous process that generates combined indoor- outdoor pedestrian graph networks. Their construction can be time-consuming and sometimes inadequate with pedestrian motion. While the graph is expected to counterbalance PDR limitations, it may introduce additional errors due to inconsistencies with real displacement. Second, they do not handle “pseudorandom” trajectories within obstacle-free areas and during the transition between outdoor and indoor spaces as the freedom of motion increases. In these cases, routing graphs become inefficient as no motion assumptions can be relied on to design a realistic network. Grid-based models are well-suited for exploring large spaces [7]. Yet, no calibration is possible with this approach. This even leads to overestimating the travel distance because linearity of movement is lost due to the grid structure. As a result, the PDR process is no longer assisted and the basic issues of gyro drift and uncalibrated travel distance are not solved.

A solution to the vulnerability of routing graph-assisted PDR navigation in obstacle-free spaces is investigated in this study. The proposal is to make use of algorithm, which is commonly used for path planning within virtual worlds or for vehicle route guidance, in order to design a realistic routing graph in obstacle-free spaces. The graph is constructed on the basis of a set of waypoints that are crucial for pedestrian navigation. In fact, the latter are expected to balance the absence of geometrical constraints by providing strategic locations between which path computation with algorithm would be relevant. Therefore, the first contribution of this study is to mitigate the drift in the PDR approach even in large spaces. Moreover, the issue of accumulating errors during the transition between indoor and outdoor spaces is addressed by improving the routing graph relevance. This is accomplished through the computation of the likely paths a pedestrian may take from outdoor strategic locations to reach buildings entrance doors. In addition, the choice of algorithm is well-suited for handling different mobility profiles (e.g., personal disease that impacts the path of the target user) so that the approach can be customized for the specific needs of each pedestrian. Indeed, this is ensured thanks to a user-relative weighting of the map which is directly involved in the graph construction. This is because algorithm computes optimal paths according to walkability rates given by a map of navigation (e.g., walkability rate according to slopes, pavement). For instance, one would take the shortest path to cross an open area, whereas a disabled person may follow another path such as walking near walls or dedicated tracks.

2. Pathfinding within Navigation Meshes

2.1. Overview of Navigation Mesh Generation

A navigation mesh (NavMesh) is a set of several 2D or 3D polygons reachable by some given user [8]. This structure can be obtained automatically using GIS software. Others make use of RECAST [9], an open source library within the community of virtual world designers. Several studies were conducted on how to construct navigation meshes from raw 3D models [10, 11]. NavMesh construction allows assigning weights that translate the polygon walkability rates according to some given characteristics