Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add head and eye position signals for driver #731

Merged
merged 5 commits into from
May 8, 2024

Conversation

erikbosch
Copy link
Collaborator

This PR introduces signals like Vehicle.Driver.HeadPosition.X and Vehicle.Driver.MidEyeGaze.Azimuth. They can be useful in driver monitoring system to detect what the driver is looking at, and/or to monitor that the driver seems to be alert and do not seems to be at risk at falling asleep.

I would welcome other active members of the VSS-project to review the PR and check if the definitions makes sense from your perspective.

@erikbosch
Copy link
Collaborator Author

MoM:

  • Erik presented the PR
  • Pierre Pierre: We are interested, will check with internal subject matter experts
  • Please review

@boschglobal boschglobal closed this by deleting the head repository Mar 21, 2024
@erikbosch
Copy link
Collaborator Author

Note - to be reopened - upstream repo deleted by mistake

@erikbosch erikbosch reopened this Mar 21, 2024
@erikbosch
Copy link
Collaborator Author

erikbosch commented Mar 26, 2024

MoM:

  • Pierre Pierre - no update yet
  • Adnan: Check if interest, looks promising
  • Continue discussion next week

@adobekan
Copy link
Collaborator

@erikbosch What if we add this feature for all passengers? As well are we talking about nominal position e.g. of the eyes?

@erikbosch
Copy link
Collaborator Author

@adobekan - we could add this for "seat" instead so you could use it for all seats/persons if you think that might be useful in the future.

I am not sure if I fully understand what you mean with nominal position. I try to specify what is meant with mid-eye position, but do not say how the vehicle shall calculate it, except for the one-eyed pirate use-case where it shall be calculated as if both eyes would be present. Also in other cases regardless of whether the eyes are visible or not the vehicle could "guess" where they eyes are based on position of ears and nose, for instance. A typical use-case could be if the driver uses sun-glasses

@chrizmc
Copy link

chrizmc commented Mar 27, 2024

I would also do it from a data model perspective for each passenger, and thus hang it under seats because it is not driver specific concept

@adobekan
Copy link
Collaborator

@adobekan - we could add this for "seat" instead so you could use it for all seats/persons if you think that might be useful in the future.

I am not sure if I fully understand what you mean with nominal position. I try to specify what is meant with mid-eye position, but do not say how the vehicle shall calculate it, except for the one-eyed pirate use-case where it shall be calculated as if both eyes would be present. Also in other cases regardless of whether the eyes are visible or not the vehicle could "guess" where they eyes are based on position of ears and nose, for instance. A typical use-case could be if the driver uses sun-glasses

That would be good i think to model on seat level. When it comes position i was just thinking do we have to say what type of position we are modeling, actual, relative, absolute, nominal etc. Or for now it is fine if we just say x,y,z

@erikbosch
Copy link
Collaborator Author

That would be good i think to model on seat level. When it comes position i was just thinking do we have to say what type of position we are modeling, actual, relative, absolute, nominal etc. Or for now it is fine if we just say x,y,z

Ah, the PR uses this reference for x/y/z (x example below)

mid eye position on X-axis of the vehicle rear-axle coordinate system as defined by ISO 23150:2023 section 3.7.12

@erikbosch
Copy link
Collaborator Author

PR updated after comments that it would be good to have data on all seats (for all occupants). This has been done by:

  • Reusing the existing Occupant branch, i.e. signals after expansion will be like Vehicle.Cabin.Seat.Row2.PassengerSide.Occupant.HeadPosition.Yaw. (An alternative approach would be to use a brand new branch, like Vehicle.Occupant.Row2.PassengerSide.HeadPosition.Yaw
  • At the same time deprecating Identifier branch for Driver as you anyway can get that from seat. Does anyone by the way use those identifiers

@ppb2020
Copy link
Collaborator

ppb2020 commented Apr 3, 2024

I had an initial discussion internally this morning. It will lead to more discussion, but the initial feedback is that, given the signals are based on ISO recommendations, they should be fine as they are ISO-based. Nonetheless, I plan to have further conversations on this specific PR and hopefully report next week. We will still want to have further discussions on the broader topic.

@erikbosch
Copy link
Collaborator Author

Something I think we should discuss - do we want occupant data to remain with Cabin/Seats? That gives quite long paths, and theoretically a single seat may serve multiple passengers. The last commit introduces an idea to instead use paths like:

Vehicle.Occupant.Row2.PassengerSide.MidEyeGaze.Azimuth

... instead of ...

Vehicle.Cabin.Seat.Row2.PassengerSide.Occupant.MidEyeGaze.Azimuth

I would like to get feedback if that is something we want.

# Occupant Data
#

Vehicle.Occupant:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I find this makes a lot of assumptions about occupant position. I am also concerned that it conflates different concepts (occupant and their position) together. That is, it forces a 1:1 match between occupant and their seat position.

I would have expected occupants to be a dynamic list of persons that is independent (instance-wise) from their position. With this approach, each occupant would reference a seat, while seats would reference occupants. Something like:

Vehicle.Occupant:
  type: branch
  instances:
    - Person[1,10]

Vehicle.Occupant.SeatPosition:
  type: reference
  description: A reference to the Occupant's seat position as a node path name (e.g. Vehicle.Cabin.Seat.Row1.Pos1).

Vehicle.OccupantCount:
  datatype: uint8
  type: sensor
  description: The current number of persons in the vehicle.

Seat.Occupant:
  type: reference
  description: A reference to the Occupant as a node path name (e.g., Vehicle.Occupant.Person1).
    

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the idea, but it is something that needs to be discussed. I think it is somewhat aligned with some thoughts presented by Alan Freedman on making instance handling more flexible. Like treating "Row, Pos and Seat-Function (Driver-side, middle, Passenger-side) as labels which you depending on implementation can use to identify an instance. The possibility to support references is also something that has been discussed in the past, for example to support links from truck to trailer.

For references I think it might be relevant to specify the type of the reference, for example to specify that the reference is to a Vehicle.Cabin.Seat but how actual content is represented might depend on implementation. Some may use dot-notated path, others a URL or some other metadata that the client understand.

type: branch
instances:
- Row[1,2]
- ["DriverSide","Middle","PassengerSide"]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am still concerned about these kinds of instances. For one, it does not match the current definition of Seat, which has Pos[1,3]. It is not clear to me that we can always define a driver position. For example, if the driver is in the middle of the vehicle, with a passenger on each side of them, what would we use for occupant position? A count such as Pos[1,3] seems better to represent this, and a reference (such as what I propose above) would be even better, I think.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It actually match the current seat definition, see https://github.com/COVESA/vehicle_signal_specification/blob/master/spec/Cabin/Cabin.vspec#L145

Seat:
  type: branch
  instances:
    - Row[1,2]
    - ["DriverSide","Middle","PassengerSide"]
  description: All seats.
#include SingleSeat.vspec Seat

The use of Left/Right vs Driver/Passenger-side side was heavily discussed some time ago when we change to Driver/Passenger-side, and it comes up to the surface now and then, like in #718. We have actually some coverage for the specific use-case of a driver in middle-seat in https://github.com/COVESA/vehicle_signal_specification/blob/master/spec/Cabin/Cabin.vspec#L156, then left is considered as driver side.

In my latest commit I just reused the current instance declaration for seats (as well as doors and windows). IMHO having the same type of instances for occupants as for seats sort of make sense

# Head axis system is defined as follows
# Head X-axis corresponds to a vector from midway between left and right pre-auricular point and nasion.
# Head Y-axis corresponds to a vector orthogonal to X going left from the head on the plane defined by left and right
# pre-auricular point and nasion
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

End with a period.

Signed-off-by: Erik Jaegervall <[email protected]>
@erikbosch
Copy link
Collaborator Author

erikbosch commented Apr 9, 2024

MoM:

From Daniel:

Seat.Occupant

or

Occupant.SeatenOn

?

Instead of that, you model SeatOccupancy that has pointers to the seat and the person
  • Continue discussion
  • After AMM agree on how to proceed short-term and long-term

@ppb2020
Copy link
Collaborator

ppb2020 commented Apr 23, 2024

I have further feedback from subject matter experts. They have no additional recommendations or concerns regarding the head and gaze positions as defined, given they reference an ISO standard.

The information carried by these signals can indeed be used as input to various models analyzing the driver (or passenger) behaviour. In their opinion, this is more useful than providing signals that report the results of such an analysis, given the expected differences between various models, leading to interpretation issues (as we discussed in PR#659, on driver fatigue level).

@ppb2020
Copy link
Collaborator

ppb2020 commented Apr 23, 2024

Of possible relevance here (for driver gaze, for example) is this EURO NCAP specification, especially section 3.5.3.1.1 on movement type and gaze location. Of particular interest is the following description in section 3.5.3.1:

Owl (head movement), Lizard (eye movement) and body lean looking behaviours are used to assess detection of driver distraction in three main area

@erikbosch
Copy link
Collaborator Author

MoM:

  • Add a comment that this can be used to Euro NCAP evaluation
  • Merge decision week next

Signed-off-by: Erik Jaegervall <[email protected]>
Copy link
Collaborator

@ppb2020 ppb2020 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few typos.

spec/Vehicle/Occupant/HeadPosition.vspec Outdated Show resolved Hide resolved
spec/Vehicle/Occupant/MidEyeGaze.vspec Outdated Show resolved Hide resolved
@erikbosch
Copy link
Collaborator Author

MoM:

  • OK to merge when suggested change fixed

@erikbosch erikbosch merged commit f274051 into COVESA:master May 8, 2024
3 of 4 checks passed
@erikbosch erikbosch deleted the erik_eye branch May 8, 2024 06:33
erikbosch added a commit to boschglobal/vehicle_signal_specification that referenced this pull request May 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants