You are on page 1of 19

Vehicle Signal Manager [VSM]

May 11, 2017 | Project Overview

Rudolf J Streif
Expert Group Lead, GENIVI Alliance
Which feature gets the
"Volume Up" button press?
Vehicle state dictates use cases
"Volume Up" pressed:

• Are we in reverse?
Increase Parking Assist volume.

• Is Navigation active
Increase Nav Volume.

• Are we in an ongoing phone call?


Increase Phone Volume.

• None of the above?


Increase Media Volume.

3 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


We need to move signal logic out of the code...
IVI
Switchpack Controller
Nav Media Phone

Volume Volume
Fwd Back
Up Down

Steering Wheel Switchpack VolumeUp() VolumeUp() VolumeUp()

if (signal.ID() == 0x4711 &&


!drivetrain_obj.IsInReverse()&&
GetActiveApplication() == "nav")
media_obj.VolumeUp()
else if (...)

Application Manager

ID = 0x4711
Value = 1

4 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


… into rule files
IVI

Nav Media Phone

Switchpack controller
VolumeUp() VolumeUp() VolumeUp()
Volume Volume
Fwd Back
Up Down

Steering Wheel Switchpack

Vehicle
Rules
Signal
Manager
Vehicle
Signal Vehicle Signal Interface
Specification
SOME/I SOME/I
CAN
P P
Plugin
Plugin Plugin

ID = 0x4711
Value = 1

5 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


Benefits
• Manage variance complexity
One system to handle use cases across vehicle lines, configuration, and
regional legislation.

• Provides testing framework


The rule specification driving the signal distribution can also be used to
validate signal sequences and timing during test.

• Updateable via OTA


Updated rule specifications can be pushed over the air, without the
complexities of SOTA, to adjust fleet behavior.

6 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


Project Goals and Objectives
• Explore signal transformation space
Can signal transformation be used to extract call flow logic from features?

• Understand boundaries between state machines and features


What do we encode in signal manager and what stays in the feature?

• Prepare for production-level implementation


Lessons learned fed into potential production variant of the manager.

7 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


What is a VSM rule?
• Monitors vehicle signals for specific conditions ...
- condition: transmission.gear == 'reverse'

• … and then emits signals or makes API-calls on its own


emit:
signal: lights.external.backup
value: true

• All encoded as YAML

8 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


Conditions can be monitored in sequence ...
2

sequence:
Camera
- condition: transmission.gear == 'reverse'
- condition: camera.backup.active == true
emit:
- signal: lights.external.backup camera.backup.active
value: true true

Signal transmission.gear lights.external.backup


Manager 'reverse' true

Rules
Drivetrain Lights
<< transmission.gear = 'reverse' ECU ECU
<< backup.camera.active = true
1 3

>> lights.external.backup = true

9 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


… Or in parallel
2 4
parallel:
- condition: transmission.gear == 'reverse'
Lights Audio
- emit: ECU Control
signal: lights.external.backup
value: true

- condition: radar.forward.distance < 120 lights.external.backup audio.disttance_warn


- emit: true true
signal: audio.distance_warn
value: true

Signal
transmission.gear radar.forward.distance
Manager 'reverse' 113

Rules
<< transmission.gear = 'reverse' Drivetrain
Radar
>> lights.external.backup = true
ECU
1 3
<< radar.forward.distance = 113

>> audio.distance_warn = true

10 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


Add timing to get a test specification
2
sequence:
- condition: transmission.gear == 'reverse' Camera
- condition: camera.backup.active == true
start: 100
stop: 10000
camera.backup.active
emit:
true
- signal: lights.external.backup
value: true

Signal transmission.gear lights.external.backup


Manager 'reverse' true

Rules << transmission.gear = 'reverse'


Drivetrain Lights
[ 115 msec pause ] ECU ECU
<< backup.camera.active = true
1 3

[ 112 msec pause ]

>> lights.external.backup = true

11 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


Conditions can be nested...
# Wait for gear to go into reverse
- condition: transmission.gear == 'reverse' 2 3
- emit: # Turn on backup lights Lights
- signal: lights.external.backup Camera
value: true ECU
# After lights turned on, wait for backup camera
- condition: camera.backup.active == true
- emit: # Activate backup camera app lights.external.backup camera.backup.active
- signal: ivi.activate_app true true
value: 'backup_camera'

# Monitored in parallel with transmission.gear


- condition: ...

transmission.gear ivi.activate_app
Signal 'reverse' 'backup_camera'

Manager
Rules
<< transmission.gear = 'reverse' Drivetrain
IVI
>> lights.external.backup = true
ECU
1 4
<< camera.backup.active = true

>> ivi.active_app = 'backup_camera'

12 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


… and cancelled if parent condition turns false
# Wait for gear to go into reverse
- condition: transmission.gear == 'reverse' 2
- emit: # Turn on backup lights Lights
- signal: lights.external.backup
value: true ECU
# After lights turned on, wait for backup camera
- condition: camera.backup.active == true lights.external.backup
- emit: # Activate backup camera app true
- signal: ivi.activate_app
value: 'backup_camera_app'

# Monitored in parallel with transmission.gear


- condition: ...
1
transmission.gear
Signal 'reverse'

Manager transmission.gear
'neutral'
Rules 3

<< transmission.gear = 'reverse'


Drivetrain
>> lights.external.backup = true ECU
<< transmission.gear = 'neutral'

13 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


Conditions can be arbitrary expressions...
# Wait for gear to go into reverse and backup camera
# to be active before turning on backup lights and 2 4
# activate infotainment. Lights
- condition: transmission.gear == 'reverse' && Camera
camera.backup.active == true ECU
- emit: # Turn on backup camera and backup lights
- signal: ivi.activate_app
value: 'backup_camera' camera.backup.active lights.external.backup
- signal: lights.external.backup true true
value: true

transmission.gear ivi.activate_app
Signal 'reverse' 'backup_camera'

Manager
Rules
<< transmission.gear = 'reverse' Drivetrain
IVI
<< camera.backup.active = true
ECU
1 3
>> ivi.active_app = 'backup_camera'

>> lights.external.backup = true

14 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


… that can include signal values
# $-denoted signals are substituted for their values 2 4
Lights
- condition: transmission.is_reversing == true && Camera
camera.backup.active == ECU
$transmission.is_reversing

- emit: # Turn on backup camera and backup lights


- signal: ivi.activate_app camera.backup.active lights.external.backup
value: 'backup_camera' true true
- signal: lights.external.backup
value: $transmission.is_reversing

ivi.activate_app
Signal 'backup_camera'

Manager transmission.is_reversing
Rules true
<< transmission.is_reversing = true
IVI
<< camera.backup.active = true Drivetrain
3
>> ivi.active_app = 'backup_camera' ECU
1
>> lights.external.backup = true

15 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


You can run multiple signal managers in parallel

Signal Door 4WD


Manager ECU ECU
[Body] Rules

Signal
Manager Transmission Body
[Drivetrain] Rules ECU ECU

16 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


Future: API calls?
1
DriveTrain
ECU
- condition: transmission.gear == 'reverse'
call: Lights.Control('backup', 'on') transmission.gear
'reverse'

Signal Lights.Control
Manager ('backup', 'on')

Rules
Lights
<< transmission.gear = 'reverse'
ECU
2
>> Lights.Control('backup', 'on')

17 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


Conclusion
• Separate out call flow logic to manage variance complexity
Separate rule YAML files for different models, markets, and configuration.

• Rules are testable in the rig and in the field


Timing information can be left in production to detect issues in deployed
fleet.

• Simplified OTA
Rules can be pushed over the air without the full validation and installation
process required by a software update.

18 | Apr 28, 2017 | Copyright © GENIVI Alliance 2017


Thank you!

Rudi Streif, Jaguar Land Rover - rstreif@jaguarlandrover.com


Magnus Feuer, Jaguar Land Rover - mfeuer1@jaguarlandrover.com

Project: https://github.com/genivi/vehicle_signal_manager
Visit GENIVI at http://www.genivi.org or http://projects.genivi.org
Contact us: help@genivi.org

This work is licensed under a Creative Commons Attribution-Share Alike 4.0 (CC BY-SA 4.0)
GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countries.
Copyright © GENIVI Alliance 2017.

You might also like