AutoPilot
:
System
AP_FAA
:
FunctionalAnalysis
frontDriverLidar
:
FunctionalDevice
?
[
implementation
.
hardware
]
[
degradation
= 1
]
[
one
output
]
frontPassengerLidar
:
FunctionalDevice
?
[
implementation
.
hardware
]
[
degradation
= 1
]
[
one
output
]
lidarProcessing
:
AnalysisFunction
?
[
implementation
.
software
]
[
degradation
=
if
#
input
= 2
then
1
else
2
]
[
some
input
&&
one
output
]
pointCloudClustering
:
AnalysisFunction
?
[
implementation
.
software
]
[
degradation
= 1
]
[
some
input
&&
one
output
]
frontRadar
:
FunctionalDevice
?
[
implementation
.
hardware
]
[
degradation
= 1
]
[
one
output
]
frontCamera
:
FunctionalDevice
?
[
implementation
.
hardware
]
[
degradation
= 1
]
[
one
output
]
dynamicObjectDetection
:
AnalysisFunction
?
[
implementation
.
software
]
[
degradation
=
if
frontRadarVal
&&
pointCloudCusterVal
then
1
else
if
frontCameraVal
&&
pointCloudCusterVal
then
2
else
3
]
[
some
input
&&
one
output
]
trajectoryPlanningAP
:
AnalysisFunction
?
[
implementation
.
software
]
[
degradation
= 1
]
[
some
input
&&
one
output
]
speedControl
:
AnalysisFunction
?
[
implementation
.
software
]
[
degradation
= 1
]
[
some
input
]
// Function Connectors
frontDriverLidarVal
:
FunctionConnector
?
[
sender
=
frontDriverLidar
&&
receiver
=
lidarProcessing
]
frontPassengerLidarVal
:
FunctionConnector
?
[
sender
=
frontPassengerLidar
&&
receiver
=
lidarProcessing
]
compositePointCloud
:
FunctionConnector
?
[
sender
=
lidarProcessing
&&
receiver
=
pointCloudClustering
]
frontRadarVal
:
FunctionConnector
?
[
sender
=
frontRadar
&&
receiver
=
dynamicObjectDetection
]
frontCameraVal
:
FunctionConnector
?
[
sender
=
frontCamera
&&
receiver
=
dynamicObjectDetection
]
pointCloudCusterVal
:
FunctionConnector
?
[
sender
=
pointCloudClustering
&&
receiver
=
dynamicObjectDetection
]
dynamicObjects
:
FunctionConnector
?
[
sender
=
dynamicObjectDetection
&&
receiver
=
trajectoryPlanningAP
]
velocityProfile
:
FunctionConnector
?
[
sender
=
trajectoryPlanningAP
&&
receiver
=
speedControl
]
// Replacement constraints
[
no
frontRadar
=>
frontCamera
]
AP_HA
:
HardwareArchitecture
dn
->
AP_DN
AP_DN
:
DeviceNodeClassification
visionProcessor1
:
DeviceNode
?
[
type
=
SmartDeviceNode
]
visionProcessor2
:
DeviceNode
?
[
type
=
SmartDeviceNode
]
algorithmProcessor1
:
DeviceNode
?
[
type
=
SmartDeviceNode
]
algorithmProcessor2
:
DeviceNode
?
[
type
=
SmartDeviceNode
]
frontDriverLidarSensor
:
DeviceNode
?
[
type
=
EEDeviceNode
]
frontPassengerLidarSensor
:
DeviceNode
?
[
type
=
EEDeviceNode
]
frontRadarSensor
:
DeviceNode
?
[
type
=
EEDeviceNode
]
frontCameraSensor
:
DeviceNode
?
[
type
=
EEDeviceNode
]
AP_Dpl
:
Deployment
fa
->
AP_FAA
ha
->
AP_HA
[
fa
.
frontDriverLidar
.
deployedTo
=
ha
.
dn
.
frontDriverLidarSensor
]
[
fa
.
frontPassengerLidar
.
deployedTo
=
ha
.
dn
.
frontPassengerLidarSensor
]
[
fa
.
lidarProcessing
.
deployedTo
in
ha
.
dn
.
visionProcessor1
,
ha
.
dn
.
visionProcessor2
]
[
fa
.
pointCloudClustering
.
deployedTo
in
ha
.
dn
.
algorithmProcessor1
,
ha
.
dn
.
algorithmProcessor2
]
[
fa
.
frontRadar
.
deployedTo
=
ha
.
dn
.
frontRadarSensor
]
[
fa
.
frontCamera
.
deployedTo
=
ha
.
dn
.
frontCameraSensor
]
[
fa
.
dynamicObjectDetection
.
deployedTo
in
ha
.
dn
.
algorithmProcessor1
,
ha
.
dn
.
algorithmProcessor2
]
[
fa
.
trajectoryPlanningAP
.
deployedTo
in
ha
.
dn
.
algorithmProcessor1
,
ha
.
dn
.
algorithmProcessor2
]
[
fa
.
speedControl
.
deployedTo
in
ha
.
dn
.
algorithmProcessor1
,
ha
.
dn
.
algorithmProcessor2
]
[
#
DeviceNode
= 7
]
assert [
AP_FAA
.
trajectoryPlanningAP
&&
AP_FAA
.
speedControl
]
abstract
System
abstract
FunctionalAnalysis
abstract
HardwareArchitecture
abstract
DeviceNodeClassification
abstract
Deployment
abstract
FunctionalAnalysisComponent
deployedTo
->
DeviceNode
1..2
xor
implementation
hardware
[
deployedTo
.
type
in
EEDeviceNode
,
SmartDeviceNode
]
software
[
deployedTo
.
type
in
SmartDeviceNode
]
input
->
FunctionConnector
*
[
this
.
receiver
=
parent
]
output
->
FunctionConnector
*
[
this
.
sender
=
parent
]
degradation
->
integer
[
this
> 0 &&
this
<= 3
]
resultingDegradation
->
integer
= max
input
.
sender
.
resultingDegradation
.
dref
,
degradation
.
dref
abstract
AnalysisFunction
:
FunctionalAnalysisComponent
abstract
FunctionalDevice
:
FunctionalAnalysisComponent
abstract
FunctionConnector
sender
->
FunctionalAnalysisComponent
[
parent
in
this
.
output
]
receiver
->
FunctionalAnalysisComponent
[
parent
in
this
.
input
]
enum
DeviceNodeType =
SmartDeviceNode
|
EEDeviceNode
|
PowerDeviceNode
abstract
DeviceNode
[
some
fac
:
FunctionalAnalysisComponent
|
this
in
fac
.
deployedTo
]
type
->
DeviceNodeType