Project-OSRM / osrm-backend

Open Source Routing Machine - C++ backend
http://map.project-osrm.org
BSD 2-Clause "Simplified" License
6.3k stars 3.33k forks source link

turn-by-turn navigation? #440

Closed emiltin closed 9 years ago

emiltin commented 11 years ago

how suited would OSRM be for implementing turn-by-turn GPS navigation?

online mode: the mobile device would connect to a server when recomputing routes, and pull maps via a tile server.

offline mode: osrm would run on the mobile device, and the map would also be stored on the device in some form.

thoughts?

UmpPCPL commented 11 years ago

Online: It is not very well suited now. Quality of "directions" is very basic. Dennis goal was to have working routing first. This goal is now achieved in my opinion. I dont know if Dennis wants to work on "turn-by-turn" now It is not one day quick fix.

Example of route. We all will agree that it is not what average user would need. http://map.project-osrm.org/1q5

Offline: I think engine is too big to fit mobile device.

emiltin commented 11 years ago

yes, quality of instructions can use more work, especially if used for turn-by-turn.

for devices, you mean the binary is too big, or it uses too many resources?

UmpPCPL commented 11 years ago

I thought about memory footprint of osrm-routed and size of data for it. OSRM map data cannot (?) be used for map display. It doubles storage requirement for mobile device.

DennisOSRM commented 11 years ago

The quality of routing instructions is on the list of to-dos with high priority. I believe to have an elegant solution laid out in mind, but it is still a Small Matter Of Programming[tm].

MKergall commented 11 years ago

For Online mode, there is osmbonuspack: an android library using osmdroid for displaying OSM map tiles, and using OSRM to get routes and turn-by-turn info. The demo app. (osmbonuspackdemo) is not a GPS navigator (route recomputing is done on request, not automatically), but quite close.

emiltin commented 11 years ago

thanks for the osmbonuspack hint

UmpPCPL commented 11 years ago

Hi As first step I would like to suggest to remove instructions when only name of road is changed and there is no intersection. http://osrm.at/1rU Michal

DennisOSRM commented 11 years ago

One thing that is missing for online turn-by-turn navigation is to specify in which direction to start.

DennisSchiefer commented 11 years ago

Don't we already tell the direction in which start (e.g. "head south onto B29") ?

tyrasd commented 11 years ago

I think the other Dennis meant to force the direction of the route to start with: If you are already driving northwards on B29 and set a destination which is behind you, the router should not simply say "head south on B29", but at least "make a U-turn on B29 if possible, then head south" or, better calculate a better (hopefully u-turn free) route, incorporating the start direction.

Currently this behavior could be simulated by placing a via point just next to the start point in the appropriate direction.

mjoris commented 11 years ago

I don't think there is a one-size-fits-all approach for routing instructions.

(1) When to generate an instruction For example, a road name change currently is an important incentive to generate an instruction. Others might prefer an instruction each time the path passes a junction to which a higher-class road is connected. (This supposes an ordering of highway types.) (2) How to represent the instruction semantically (3) Landmarks It would be interesting to integrate landmarks into instructions, like 'At the big white statue, turn left.' See for instance http://people.eng.unimelb.edu.au/winter/pubs/winter09routing.pdf This would also enable route planning in cycle node networks, which have physical numbered signs. http://wiki.openstreetmap.org/wiki/Cycle_routes#Tagging_Cycle_Node_Networks

Maybe this is off-topic, but what would you think about scriptable instructions?

emiltin commented 11 years ago

nice input @mjoris. interesting idea with landmarks, thanks for the link. do you think there are any useable data about landmarks already in osm?

bike routes often follow paths and trails without names. landmark might make sense here, but they would often have to be very local indeed. turn right after the bench, etc?

emiltin commented 11 years ago

i think a scripting solution for generation instruction would make sense, as long as performance isn't affected too much. i assume it would have to run for each query, whereas the current lua stuff is only run during preprocessing.

tyrasd commented 11 years ago

Generally, its hard to tell what map features are significant enough to be a landmark (at least for car routing)... On the other hand, if one would do outdoor (hiking, mountain-biking, ...) routing, a large variety of things are very useful landmarks: guideposts, cairns, peaks, passes, lakes, streams/rivers, trees, buildings/shelters, ... This would also be a very context sensitive task to solve (e.g. a single house in a forest vs. a house in a city).

mjoris commented 11 years ago

thanks @emiltin

I was looking for landmarks for car routing and it isn't straightforward at all. http://www.geosensor.net/papers/duckham10.JLBS.pdf http://agile.gis.geo.tu-dresden.de/web/Conference_Paper/CDs/AGILE%202012/proceedings/posters/Poster_Nuhn_Generation_of_landmarks_from_3D_city_models_and_OSM_data_2012.pdf The second authors match a 3D model with OSM ;-).

but i like the outdoor idea by @tyrasd . Some POI types might be "always usable" like guideposts for hiking.

mjoris commented 11 years ago

@emiltin i think that all the instructions are prepared during the contraction-phase. However there is a performance issue: if you generate too many instructions, the RAM required by osrm-routed increases drastically

tyrasd commented 11 years ago

Instructions wouldn't necessarily have to be loaded into the RAM: They could be served from hard disc/SSD, asynchronously after the route summary and geometry.

mjoris commented 11 years ago

that's true... ;)

DennisOSRM commented 11 years ago

All these methods usually don't scale.

hkrishna commented 10 years ago

@emiltin we have a working map app that implements turn by turn using OSRM (the android app connects to our osrm server when recomputing routes, and pull maps via our vector tile server). We've been road testing it over the last few weeks and its not too bad (hasn't made me drive off a bridge haha). But yeah, the quality of directions could use some improvement. I've been playing with the profiles trying to get the names/ref/highway information to a point where the text to speech doesn't blow up. In addition to that, we have a number of other routing related bugs which translates to osrm feature requests :)

I'd be happy to send you an APK if you wanna have a look at the app.

DennisOSRM commented 10 years ago

@hkrishna have you considered opening tickets here at the bug tracker for all the osrm related issues you have identified?

emiltin commented 10 years ago

@hkrishna Thank you. We now also have apps for iOS and Android that uses OSRM. They're both open source, see https://github.com/ibikecph/ibikecph-android and https://github.com/ibikecph/ibikecph-app. Is your app open sourced?

hkrishna commented 10 years ago

@DennisOSRM I'll open tickets for issues we've identified and are currently not present in the bug tracker.

@emiltin Yes, our app is open sourced https://github.com/mapzen/mapzen-android-demo. It started as an opensciencemap's vtm fork. The tile service and geocoder it uses is also open. I downloaded your app from the app store but was unable to get it to route - kept saying "GPS Location not found" :(

emiltin commented 10 years ago

Thank you for the link. Sorry, our app works only in Denmark.

emiltin commented 9 years ago

closing as this was more of a discussion.