OSRM : Installation

OSRM est un moteur de calculateur d’itinéraire open source très léger, très efficace et utilise les données Openstreetmap. Il se démarque des autres moteurs de calculateurs d’itinéraires en utilisant l’algorithme Contraction hiérarchies moins répandue que le A* par exemple.

Sur le papier tout à l’air parfait! Commençons par l’installer.

Installation

A la base j’avais une distribution Lubuntu 14.04 32bits sur mon petit serveur mais je me suis vite rendu compte que OSRM ne pouvait s’installer que sur les distributions en 64 bits. Après avoir réinstallé le serveur avec une version 64 bit de Lubuntu, j’étais prêt!

Entrons dans le vif du sujet en installant les dépendance dont nous allons avoir besoins:

sudo apt-get install build-essential git cmake pkg-config libprotoc-dev libprotobuf8 \
protobuf-compiler libprotobuf-dev libosmpbf-dev libpng12-dev \
libbz2-dev libstxxl-dev libstxxl-doc libstxxl1 libxml2-dev \
libzip-dev libboost-all-dev lua5.1 liblua5.1-0-dev libluabind-dev libluajit-5.1-dev libtbb-dev

On clone le répertoire d’OSRM :

git clone https://github.com/Project-OSRM/osrm-backend.git

On se place dans le dossier qui vient d’être créé

cd osrm-backend

On compile OSRM…

mkdir -p build; cd build; cmake ..; make

On est dans donc dans le repertoire  « osrm-backend/build »

On crée un lien symbolique  des « profiles » dans ce dossier. C’est ici, que l’on choisit le profile voiture ou piéton par exemple.

ln -s ../profiles/car.lua profile.lua
ln -s ../profiles/lib/

On va déplacer le contenu du répertoire « osrm-backend » qui se trouve dans mon « Home » vers /opt/osrm que l’on va créer. C’est plus propre.

cd ..
sudo mkdir /opt/osrm
sudo mv  * /opt/osrm

On se place dans ce nouveau répertoire:

cd /opt/osrm

On va maintenant créer un répertoire qui va accueillir les données. On le nommera OSRMfiles:

sudo mkdir OSRMfiles
cd OSRMfiles

On va télécharger les données Openstreetmap en pbf sur http://download.geofabrik.de/europe/france.html. Dans mon cas et compte tenu de ma petite configuration je n’ai pris que la région Rhône-Alpes.

sudo wget http://download.geofabrik.de/europe/france/rhone-alpes-latest.osm.pbf

On se déplace dans le répértoire  /build ou se trouve l’appli compliée, puis on extrait le .pbf

cd /opt/osrm/build

sudo ./osrm-extract /opt/osrm/OSRMfiles/rhone-alpes-latest.osm.pbf

Cela peut durée un certain temps, sans que rien ne se passe. 3 minutes dans mon cas.

Il faut désormais « préparer » les données

sudo ./osrm-prepare  /opt/osrm/OSRMfiles/rhone-alpes-latest.osrm

C’est presque terminé. Il faut maintenant créer le fichier de configuration server.ini (toujours dans le répertoire « build ») qui va pointer vers les fichiers que l’on a généré lors de l’étape précédente, lui indiquer le nombre de « Threads à utiliser, les IP et le port qu’il doit écouter

sudo nano server.ini
Threads = 2
IP = 127.0.0.1
Port = 5000

hsgrData= ../OSRMfiles/rhone-alpes-latest.osrm.hsgr
nodesData= ../OSRMfiles/rhone-alpes-latest.osrm.nodes
edgesData= ../OSRMfiles/rhone-alpes-latest.osrm.edges
ramIndex= ../OSRMfiles/rhone-alpes-latest.osrm.ramIndex
geometry= ../OSRMfiles/rhone-alpes-latest.osrm.geometry
fileIndex= ../OSRMfiles/rhone-alpes-latest.osrm.fileIndex
namesData= ../OSRMfiles/rhone-alpes-latest.osrm.names
server.ini

L’installation est terminé! Néanmoins vous pouvez être confronté à des problèmes si votre serveur manque de RAM. J’ai ainsi du augmenter mon SWAP de 600Mo à 6Go

J’ai également dû modifier /etc/sysctl.conf en lui ajoutant :

kernel.shmall = 1152921504606846720
kernel.shmmax = 18446744073709551615

puis : sysctl -p

On lui indique où sont les données

sudo ./osrm-datastore ../OSRMfiles/rhone-alpes-latest.osrm

 

On démarre le service en utilisant le Shared-Memory (optionnel)

sudo ./osrm-routed --sharedmemory=yes

Si vous avez un message :   » running and waiting for requests » C’est que tout fonctionne!

Mais ce n’est pas très pratique… On va créer un « service » pour pouvoir le démarrer, l’arrêter, etc.

Pour cela, on va créer 2 fichiers.

sudo nano /etc/init/osrm.conf

Celui ci va contenir :

# osrm
description "Open Source Routing Machine"
author "delawen <marias@emergya.com>"
# Stanzas
#
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
# When to start the service
start on runlevel [2345]
# When to stop the service
stop on runlevel [016]
# Automatically restart process if crashed
respawn
# Essentially lets upstart know the process will detach itself to the background
expect fork

exec osrm
/etc/init/osrm.conf

Puis l’autre:

sudo nano /usr/bin/osrm
#!/bin/bash
#This script assumes you have your OSRM compiled on the /opt/osrm folder.
echo "Starting OSRM..."
cd /opt/osrm/build/
./osrm-datastore ../OSRMfiles/rhone-alpes-latest.osrm
./osrm-routed --sharedmemory=yes &
echo "OSRM started"
cd $pwd

Il faut bien sur leur donner les droits d’exécution

sudo chmod 0755 /etc/init/osrm.conf
sudo chmod 0755 /usr/bin/osrm

Le service osrm est créé. On peut voir sont statut en faisant :  sudo service osrm.

Pour le démarrer : sudo service osrm start

Utilisation

Il n’y a plus qu’a lui demander un itinéraire!  Pour cela on utilise une URL structurée ainsi :

http://serveur:port/viaroute?loc=y1,x1&loc=y2,x2

Ou concrètement dans mon cas :

http://localhost:5000/viaroute?loc=45.18452,5.72094&loc=45.36348,5.58775

On obtient quelque chose qui peut sembler étrange :

{"hint_data":{"locations":["a54BAP____9gHQAAMQAAADYAAAAAAAAACgAAAD-1CwAbdrEChEtXAAAAEQA","rG4EAK5uBABuVAAARQAAABEBAADNAAAAHgAAAGLQAAAYMbQCxkJVAAIAEQA"],"checksum":3140728172},"route_name":["",""],"via_indices":[0,393],"via_points":[[45.18454,5.720964],[45.36348,5.587654]],"found_alternative":false,"route_summary":{"end_point":"Rue Docteur Butterlin","start_point":"Place Jacqueline Marval","total_time":1494,"total_distance":27302},"route_geometry":"u`zduAgwd|IjAsBtAiC{EyGqAdCaN~W_RdGiMlEoC`AsIdD]zFi@~Ia@fH{Bt_@[hF}ArWSbDs@zL_@hGUxDsGgBio@kOqa@wJsNkD{JoCcGmAiBYkCa@cEeAce@_M{]yIaIiBcFgAiDu@{FqAqK_CoHaB}Cq@oKcCyScFiBc@aE_AeCg@yGsAkFeAqDeAsTmF}Cs@cGaBoKsCgB]{BQoFv@_Dx@yCr@{v@tc@uCfB{BvAeFhDcH~FkF|KyEnLkGaA}Ni@}H`@qR^wBFaCF}CJkTn@yLTiIv@}Dt@gCj@wBd@cPtCqFbAwdAdUmCn@{JbAoEz@iShDkCd@aDw@wCdGlCjG}FdEuD|CeOzJeC`BaC~AaEtCaKlH_S`Oy]bYwVpQqMtEeVnKiP~KuLrJ{JlJyN`PwUrZ{h@`u@a|AbwBeTh]sO~ZsItU_Prm@a\\hqAkJ|_@{GxVwSzs@kVjt@gcAlgD_i@ndBuUjw@qTzw@id@rhB_Qzt@sZf_BoVl~AyPjqAiQtrAuTlhBmVpaBuK~j@uNfp@_^fpAud@psAgjBbkFmaAlbC}^r{@gVjg@ga@xs@mWfa@oL|Qub@hj@}a@vd@_b@da@_u@~l@oeChcBis@bf@iLfIcuAz~@qpAv{@mqBftA}vAjz@qBdAivAnu@av@|^ou@d\\}nAvh@{|Atl@yUpKka@|QckApk@uhAvl@wsAvz@ghA~s@knDf~Bi`BpeAakArx@y}@`w@{v@~z@mr@v|@yg@nt@{|@frAiz@xnAwt@diAiGnJgVbb@e^`n@ut@fyAar@|_BcmA~pCoG`Man@zlAwv@xnAer@laA_fB|}BiyBrtCmkAzwAsn@~o@co@dj@od@n\\o\\lSaF|C_i@rX}i@zUetF`uB_lBju@klBhq@oJ~C_tAzc@uVfHcx@fUgLzCca@pKka@dE}X~Agk@dEq`@rC_a@hIsQhD}~Abj@k_@lMc[bHkzAzQavArMydCnIsK~Aoz@yBen@}Asx@qFkV}BcGs@eT_DsS{CyQmC}uBs`@u[gGuj@uIof@{D}EWsScAeJi@eh@mAae@A_k@rAyb@bCyl@fGih@bJgq@fOmg@|P_p@rX_f@dUckA|o@yjAhs@obBziAkbAxs@_cA|w@a|@nu@ufA~aAk_Ax_Amx@ny@is@dw@q|@fdA_v@laAww@rfAay@rkAat@|hAshAxmBoc@zx@k_@~t@aN|Xus@hyAqiBhyDg^|t@geAdqBwaAjbB}dA|cBqgB|wCq\\|m@{\\|n@o_@nw@}W`o@_^h|@a]t~@cz@xeCaTbn@qRzg@}Spf@kPxZyQzYui@lv@wu@~bAkXf`@gWn_@{Udc@kQra@_Sze@m]ldAi}Bp{G_GbQmXbs@cZvbAkIvVyJvRgLjMcJdFqHbDsIv@mMsBaMsJaQoTeSwf@u\\mnAaTkq@qPci@yNu[qLeU}E{GsG_EyCq@oGM{Fz@kG|BoE|CcHfF}DK_EnAcE`FuGnCgHIkh@_OquCoVc]uCgt@wEc}DfDux@b@i[vFkSfJyKfHcLdFqFwBeDLuCnAmHY}JoG{OePaHeLmEgL{EgO_EmSwBkNyBqRmAmKXyEz@cFvAoEa@{DkBmBeC{DyAmCuI_n@aPet@wJiZwEoLyFeLsIiMwH}H}`@cb@_N{JyGaIsEeMqCcNsBsNu@yH_BwQoBkPcD}Lag@esA{T_g@uCcFor@gi@uI{GoOaaAs@sEg@oD|gAwQpc@iWqJ}j@oGwd@aBkH_BiF{DoGsAwCz@mDwA_E^yCBsCYsDkBaLqRcjA_DcSuDkd@oCmZaDo_@hUoGdUmFtHMltAx@","status_message":"Found route between points","status":0}

 

Dans le prochain article, je vais revenir sur ce résultat et expliquer comment exploiter ce service par un exemple !

9 pensées sur “OSRM : Installation

  • Ping : OSRM : utilisation | DoGeo

  • 23 septembre 2016 à 9 h 38 min
    Permalink

    Bonjour,
    Merci pour ce tuto très complet. Avez-vous une idée de la configuration nécessaire du server si on souhaite travailler à l’échelle de la France?
    Arnaud

    Répondre
    • 3 octobre 2016 à 13 h 51 min
      Permalink

      Bonjour,
      Je travaille à l’échelle de la France avec la machine qui héberge ce site (6go de Ram, 4 -petits- cœurs). Le pré calcul d’OSRM à l’échelle de la France prend une quinzaine de minutes. C’est a ce moment là qu’OSRM à le plus besoin de mémoire, je pense qu’il en faut au moins 4go pour ne pas utiliser le swap. Sinon il est possible d’utiliser une autre machine pour cette phase et de déposer les fichiers générés sur une machine moins puissant.
      Après cela le serveur est peu sollicité par OSRM. Il traite environ 50 itinéraires par seconde sur le territoire Français.

      Répondre
  • Ping : OSRM avec Docker | DoGeo

  • 6 janvier 2017 à 15 h 01 min
    Permalink

    Bonjour
    j ai essayé avec un fichier CSV de 300 lignes mais j’ai 245 erreurs et l’export en geogison des 65 itinéraires trouvées n’est pas valide.
    Avez vous une idée?
    Merci

    voici le fichier
    <code>
    id x1 y1 x2 y2
    4 -2.24286614140248 47.3720619092916 5.72108368524818 45.1822782638612
    5 5.41914275240219 43.2923934493318 -1.73021629586269 47.2306931510083
    6 5.41914275240219 43.2923934493318 -1.73021629586269 47.2306931510083
    7 5.41914275240219 43.2923934493318 -1.54818115135603 47.2320089659392
    8 5.41914275240219 43.2923934493318 -1.54818115135603 47.2320089659392
    9 5.41914275240219 43.2923934493318 -1.54818115135603 47.2320089659392
    10 5.41914275240219 43.2923934493318 -1.54818115135603 47.2320089659392
    11 5.41914275240219 43.2923934493318 -1.63411229237321 47.2248899842866
    12 -1.01770564998609 45.6342722086199 -2.35385046689985 47.2907284375169
    13 -1.01770564998609 45.6342722086199 -1.64127158412209 46.9874835912428
    14 -2.46846528524786 47.2811181808844 -2.24286614140248 47.3720619092916
    15 -2.2455590196547 47.4369677826139 -2.24286614140248 47.3720619092916
    16 -2.2455590196547 47.4369677826139 -2.24286614140248 47.3720619092916
    17 -1.98218578036462 47.3519136624114 -2.24286614140248 47.3720619092916
    18 -1.98218578036462 47.3519136624114 -2.24286614140248 47.3720619092916
    19 -2.15350201930037 47.4044802375076 -2.24286614140248 47.3720619092916
    20 -2.15350201930037 47.4044802375076 -2.24286614140248 47.3720619092916
    21 -2.15350201930037 47.4044802375076 -2.24286614140248 47.3720619092916
    […]</code>

    Répondre
    • 7 janvier 2017 à 11 h 25 min
      Permalink

      Bonjour et merci du retour!
      J’ai corrigé le bug de l’export, il manquait les balises de fin dans le Geojson à cause des itinéraires non valides, ça devrait désormais fonctionner.
      Quant aux itinéraires non valides, cela vient du fait qu’un des deux point est trop éloigner d’une route (d’après ce que j’ai regardé).
      La semaine prochaine, si je trouve un peu de temps, j’essaierais d’ajouter la cause de l’erreur dans l’export.

      Edit : On parle ici de l’application https://dogeo.fr/_apps/OSRM-Batch-Routing/
      le commentaire n’est pas vraiment sur le bon article du coup… Il devrait être ici: https://dogeo.fr/osrm-batch-routing-calculer-des-itineraires-par-lots/

      Répondre
  • 13 février 2017 à 23 h 24 min
    Permalink

    Lorsque j’arrive à l’extraction du pbf il me dit que le car.lua n’est pas trouvé
    J’installe sous une machine centos

    Répondre
  • 8 mars 2017 à 16 h 11 min
    Permalink

    oui j’avais le meme probleme faut bien donner l’adresse de « car.lua » pour moi « osrm-extract /opt/osrm/OSRMfiles/greece-latest.osm.pbf -p /opt/osrm/profiles/car.lua »

    Répondre
  • 8 mars 2017 à 16 h 45 min
    Permalink

    bon ca bloque toujours deuxieme tuto …..

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *