Opened 7 years ago

Closed 4 years ago

#1095 closed defect/bug (fixed)

Strengthening of Turn Announcement

Reported by: robotaxi.myopenid.com Owned by: robotaxi
Priority: minor Milestone: version 0.6.0
Component: core Version: git master
Severity: normal Keywords:
Cc:

Description

The 'strengthening' algorithm for the turn announcement has a bad criterion. The bend of the main road at the intersection decides if the turn announcement gets an 'easily', 'strongly' of whatever.

Example: when leaving the main road turning left into a side street, but the main road takes a slight left bend, the criterion for strengthening is considered, regardless of the turn angle of the side street. However, after that the turn angle is considered correctly, i.e. 'turn easily left' for a turn angle less than 45 degree and so on.

A better criterion would be to not only consider the turn angle, but, what is very important for a clear announcement, also consider how many streets are possible for a turn and adapt the strengthening for it, because when turning into one of two or three streets its essential to know how hard the turn is. So this ticket is not only a bug report, but also an enhancement request.

I drew a simple sketch for the above mentioned proposal to make it more clear.

Let the number of streets, in which we can possibly turn, be the main criterion that decides, which turn angle is necessary to get an 'easily left', a simple 'left' or 'strongly left'. The second criterion is the number of the street, in which we are ordered to turn. So we get a simple decision tree, easy to implement.

I also provide a patch. It's no 'office sitter' idea, but successfully tested in my private navit-version for a couple of months.

Have fun!

Attachments (4)

turn_rules.jpg (122.0 KB) - added by robotaxi.myopenid.com 7 years ago.
Sketch of turn rules
navigationTurnRules.diff (4.8 KB) - added by robotaxi.myopenid.com 7 years ago.
patch for turn rules in navigation.c
turn_rules_simple.jpg (110.6 KB) - added by robotaxi.myopenid.com 7 years ago.
unified turn angle limits
Discussion.txt (6.3 KB) - added by robotaxi.myopenid.com 7 years ago.
unified turn angle limits

Download all attachments as: .zip

Change History (14)

Changed 7 years ago by robotaxi.myopenid.com

Sketch of turn rules

Changed 7 years ago by robotaxi.myopenid.com

patch for turn rules in navigation.c

comment:1 Changed 7 years ago by zoff99

this seems to be a duplicate of:

ticket:795

comment:2 Changed 7 years ago by tryagain

Hi!

Zoff99, I don't think this is a duplicate ticket. #795 is about choosing between left/right turn direction on a road where its main direction has a bend, this is one about turn strength. Anyway, thank you for referencing it here.

Robotaxi, we devs should have been giving much more attention to your patches. Thank you for not giving up and still posting your ideas.

I agree turn instructions on complex crossings can be improved.

According to your changes, let's look at average user who starts to use navit and passes a crossing with three left turn possibilities: at 60, 90 and 120 degrees. Suppose route path goes at 60 degrees here. He will get an instruction to "easily turn left".

Next time, he is coming to the crossing which have two roads going to the left, at 60 and 90 degrees. Suppose the proper exit is at 60 degrees. Instrution anyway will be "turn left" as both possibilities fall into the same category. But user will remember the previous situation and without dubdt turn to 90 degrees exit.

Consequences:

  1. We should be consistent in naming turn strengths, so that user can learn from his expirence what strength accents mean and be able to use that knowledge later.
  1. As for me, strength words are more preparing the user to a difficult turn where he should lower speed, than telling what exact exit he should take. "Easily turn" can usually be done without speed change, but a "really strong" most probably requires a full stop. This information can be used to find out proper exit from the crossing, but can't be relied upon in all cases.
  1. If we want to tell user more about a navigationaly difficult crosing, whe should say a special phrase, if there are more than 1 possibility to turn into the same strength category. Then user will know he should look at gps screen unless he's already familar with the crossing he's coming to. Another solution would be to say exact exit number to take like we're doing that for roundabouts.

tryagain

Last edited 7 years ago by tryagain (previous) (diff)

comment:3 Changed 7 years ago by zoff99

for best userexperience both tickets should be combined to a complete solution. solving one without the other seems a bad idea

comment:4 Changed 7 years ago by robotaxi.myopenid.com

tryagain

Thank you for your constructive feedback. And sorry for my late answer, I was busy for the last 3 weeks.

You are right, the situation at the crossings with a respective 60 degree turn, which you pointed out sounds indeed a bit confusing. At first glance we have a different idea of the strengthening, but it's only partly like this. I try to explain my point of view and how I came to my solution.

But first of all I want to take up your idea to say a special phrase for proper exit of crossings.

Let's experiment with the announcement:

  1. we could announce the number of street, and the street with the greatest angle gets No.1, (as it is the 'nearest' exit): A crossing with three side streets to the left, for instance would result to
    • 'Turn strongly left in 200m to baker street. It's the second road.' or
    • 'Turn strongly left in 200m to the second road, baker street.' or
    • 'Turn strongly left in 200m to the second of three roads, baker street.'

  1. we could state that 'left', 'right' more precisely when we say
    • 'Turn strongly left in 200m to baker street. It's the leftmost road.' or
    • 'turn strongly left in 200m to the leftmost road, baker street.'

The problem will be the generic approach. The extension 'leftmost' or 'rightmost' is rather fine, but its the less generic way for more than two streets, nor this can't be translated elegantly into many languages that Navit supports, I fear. I can't even find a nice formulation in German, neither. Look at this contruct with the first proposal, when there is another crossing just in front of our turn:

  • 'Take the second road to the left. It's the second road.' Hmm.

Native English speakers are encouraged to improve the formulations, of course. And I'm convinced that there may be much more elegant formulations. Give them a try!

The danger of a very precise announcement is that it may become so comprehensive that the user is more confused than well prepared. And in any unclear situation, we all know that it's most intuitive to look on the nice graphics of Navit ;-)

To be honest, you are right, we should unify the angle limits for the strengthening words for the different crossing types, so I update my attachement.

But beware of thinking this would be 'the' solution. There are two reasons, for which the user cannot rely on a strict behavior in turn angle limits:

  1. the bug in the current version that sets strengthening arbitrarily, well this is easy to fix. However, the fact that this bug could remain in the software for such a long time, and nobody has claimed loud enough to fix it shows me that the normal user is not consequently training himself for certain turn angles.
  2. What is more important, when we take the OSM data, for instance, Navit calculates the turn angle as the angle between the imaginary prolongation of the old element and the first element of the street to turn into. Some streets are edited in a way that they make a short bend directly after the junction. This bend can be edited with more or less auxiliary points, which directly influences the turn angle for Navit. And this is no error of OSM. Sure, we could investigate the pathway for a certain distance to gain a 'real' turn angle. But we have to see that the user is always exposed to crossings with different turn angles that look quite similar in reality or vice versa. So I'm sure that the user will never have the chance to train himself that hard for certain angle limits.

Nevertheless, the most important criterion shall be a concise preparation for the user when there is coming a difficult turn.

So let's have a closer look on the crossing types:

  1. Crossings with only one side street:

In my view this is not a very difficult type. The only 'difficulty' that is worth preparing may be a sharp turn. 'Easily' is not so important here. In my experience, and this happened to me many times with the current Navit implementation, the extension 'easily' annoyed me, because I can clearly see the pathway anyways. I always interpreted such a behavior as hair-splitting. Btw: Look on motorways. In most cases when motorways split the turn angle is less than 20 degree, and Navit should say 'turn left' here (not 'turn easily left'), the driver does not need to be prepared for not to reduce speed. 'Easily left' would be really nerve-racking here. (Sure 'keep left' would be better here. This will be part of a proposal that I'm currently working on). I had so many motorway links on my routes that fit to that 'slight turn' criterion and the 'easily'-extension has never helped me in those cases. 'Strongly' is more helpful here, even if I often got a 'strongly' at crossings, that didn't look very 'strong' in reality. (OSM was OK there..)

  1. Crossings with more than one side street:

These types of crossings begin to be more complex so that the user rather needs some preparation. 'Easily' and 'strongly' becomes more sense. And maybe also an anouncement of a special phrase. Generally I can understand that you want to use the strengthening for preparation due to the turn angle. I think there is also potential for confusion when the user shall turn into the first of two roads, for instance (i.e. the one with the greater turn angle), but still in the 'easily'-zone). So the proper road is less 'easy' that the other, but still 'easy'. I would be totally confused even if I was already trained on the strengthening roules. You may think different, but for me it's not intuitive, because apart from Navit, when someone describes me a way at a difficult crossing he would always use the 'easily' and 'strongly' in the manner of comparing to other turn possibilities. This is the most intuitive way for me. And it does not contain turn angles, but the pure fact of certain exit numbers. So I would recommend to leave out the 'easily' as well as 'strongly' for the 'inner exits', and let the nice graphics do the rest.

As a consequence for me strength words as a preparation for more or less sharp turns cannot be applied to every situation. And leaving out certain strength words in the different situations will rather help the user than confuse or annoy him.

I attach a second proposal that unifies the angle limits for strengthening, so that should be less dependent on emphasizing the number of exit.

Let me know your opinion, I'm looking forward to some more feedback.

Robotaxi

Changed 7 years ago by robotaxi.myopenid.com

unified turn angle limits

Changed 7 years ago by robotaxi.myopenid.com

unified turn angle limits

comment:5 Changed 7 years ago by tryagain

hi!

I've got now your idea to use strength terms to give user more idea about exit numbers than for turn difficulty as I understood it before. Then there should really be some fuzzy zone where a turn can be considered both as "left turn" or "easily left turn", depending how many turn possibilities we have. That zone might be a 20-30 degrees around the border, so we can choose better term for ways which falls into that fuzzy category. But i'd prefer these zones to be consistent regardless of how many exits we have, with the following exception.

I agree that "easily" marker is not very usable when we have only one possibility. I still love conisitent announcements very much, but your idea seems to be acceptable to shorten turn instruction a bit when we have only one road to turn onto.

But I'd like to preserve the "reaaly sharp turn" term regardless of how many turn possibilities we have. Such turns shouldn't happen as often as "slight turn" does, so it shouldn't be too annoying if we use longer phrase for this case.

As for your sample "Take the second road to the left. It's the second road.", I think we could refer crossings rather tha roads in the first part. So it might sound like "Turn on the second crossing to the left. Turn onto the second road." But in this case we probably should also count crossings which allow right turns too, souldn't we?

I have to confess, I can't judge what phrases would be intuitive for an average user, and not only because I'm not native English speaker. As for me, I prefer dumb programs which do not attempt to be smarter than me. As the first step after Office installation, I usually disable the Office Assistant :)

tryagain

comment:6 Changed 6 years ago by mvglasow (2)

We might want to look at what others are doing and see if that can be useful for us:

http://www.waze.com/wiki/?title=How_Waze_determines_turn_/_keep_/_exit_maneuvers http://www.waze.com/wiki/?title=Junction_Style_Guide#Controlling_Turn_Instructions

(This is from Waze, which up to version 2.4 was open source (GPL), but seems to have gone proprietary since.)

Personally, my experience is that Navit's turn instructions can be heavily confusing (as of now) and simply looking at the map is often the better guess.

Some notes from my side:

  • We should have "exit" as a maneuver whenever we go from a motorway or trunk road onto something tagged as a ramp. This should not be a "turn" as usually the beginning of the ramp is perceived to be nearly straight. We should still include "right/left" because in some exceptional cases there may be exits to the left in countries that drive on the right, or vice versa. Caveat: motorway interchanges are usually mapped as ramps, but I wouldn't describe that as "exit" but rather as "keep right/left".
  • For the turn angle I would stick with three to four terms:
    • Keep left/right: used to distinguish between 2-3 ways out of a junction which would all be perceived as "straight", not as a turn. Should be omitted when there is only one such way. Threshold for "straight" is about 20-25 degrees.
    • Turn easily left/right: Angle greater than 20-25 and less than 65-70 degrees. If there are no other ways out of the junction in that direction, "turn left/right" can be used instead. Also, if two roads on the same side fall into that category, the sharper turn gets "turn left/right".
    • Turn left/right: Angle is greater than the above limits and less than 110-115 degrees.
    • Turn sharply left/right: Angle is greater than 110-115 degrees. The word "sharply" should always be included since sharp turn maneuvers require lowering one's speed.
    • I would not include anything beyond "sharply", such as "very sharply", as I find that kind of awkward.
  • On motorway/trunk roads, when all but one of the ways out of a junction are ramps, and the route follows the only one that is not a ramp, no turn instruction should be generated. In such cases I would expect the ramps to be marked as exits, and I would expect the driver to stay on the same road unless instructed otherwise.
  • In order to determine the angle of a turn, the road exiting the junction should be considered for a certain distance beyond the junction. Navit appears to do that already. However, if the roads cross again after the junction in question, they should only be considered up to the crossing. For example, a motorway exit going off to the right onto a bridge which then makes a left turn and crosses the motorway should only be considered up to the bridge, no further. I have encountered numerous cases where I was told to "turn left" when I was really meant to take an exit similar to the one in question.
  • Road layouts with more than four or five roads meeting at a junction can become a challenge. Look at one on the map and think of how you would describe the route through such a junction to someone else. However, they are also quite rare... I can't think of a single example at the moment. If anybody has a real-world example where five or more roads meet in a single point, please post a link here so we can examine it.

comment:7 Changed 6 years ago by usul

  • Milestone changed from To be discussed - Give your opinion! to version 0.6.0

comment:8 Changed 5 years ago by nezmi

  • Severity set to normal

Here my 2¢ on the difficulties on turn strength and a practically proven alternative approach:

I will illustrate the basic problem with a roundabout example, which is simpler to layout than a complex crossing example. Imagine the following roundabout (in your preferred circulation direction):

  • exit A leads to a single house/farm
  • exit B has a sign "Access only/Residents only" and leads to a few houses/farms (but actually has a connection to the next village)
  • exit C leads to another village
  • exit D leads to a service road and has a sign blocking access for non-service traffic
  • exit E leads to another village
  • exit F leads to another village

The maneuver announced is "Take the fourth exit".

Several problems exist with this announcement (in every navigation SW, BTW):

  • I can not know for sure how the SW is counting exits, especially:
    • is B counted? I don't need access to this street, so it is actually blocked for me ...
    • is D counted? It is definitely and unconditionally blocked for me ...
  • Even if I know for sure that D would be not counted, as it is blocked, I might overlook the sign because of foliage or complex traffic situations ...
  • Were
    • the existing blocking signs influencing the counting
      • correctly mapped?
      • already in existence when the mapping was done?
    • the exits in existence when the mapping was done? (the houses might be new, or the service exit is just a temporary construction ...)
  • I might simply miscount in complex traffic situations ...

We simply could construct a similar example for a complex crossing (but it would not be as easy to communicate): shrink the roundabout to a point and you have a crossing ...

Any guidance based on the number of streets, either counting or deriving turn strength, will be prone to the various error sources laid out above, leading to wrong maneuvers.

For that reason my family practices successfully since more than forty years a completely different approach. Most people, I co-piloted, quickly adopted to this method for themselves:

Directions for round-abouts or complex crossings are given relatively to the crafts bearing when entering the crossing or roundabout http://en.wikipedia.org/wiki/Clock_position. Of course simple situations are still communicated as turn left/right. But complex situations are signaled as: "Leave the crossing/roundabout in direction 10 o'clock". In the above roundabout example this would e.g. correspond clearly to exit E. Of course if there are direction signs, this could be amended with: "Leave the crossing/roundabout in direction 10 o'clock to Shangri-La"

See also the fancy compass designs in http://trac.navit-project.org/ticket/1226, containing such a clock-dial design as an aid.

As navit seems to give its directions based on relative angles of street anyhow, it would be simple to adopt this method ...

Last edited 5 years ago by nezmi (previous) (diff)

comment:9 Changed 4 years ago by robotaxi

  • Owner changed from KaZeR to robotaxi

comment:10 Changed 4 years ago by robotaxi

  • Resolution set to fixed
  • Status changed from new to closed

Fixed in r6090, highfive merge. Implemented simple turn rules as well as the 'keep left/right' feature; no 'really sharp' turn any more.

Note: See TracTickets for help on using tickets.