AutoPilot : System
AP_FAA : FunctionalAnalysis
frontDriverLidar : FunctionalDevice ?
[ degradation = 1 ]
[ one output ]
frontPassengerLidar : FunctionalDevice ?
[ degradation = 1 ]
[ one output ]
lidarProcessing : AnalysisFunction ?
[ degradation = if # input = 2 then 1 else 2 ]
[ some input && one output ]
pointCloudClustering : AnalysisFunction ?
[ degradation = 1 ]
[ some input && one output ]
frontRadar : FunctionalDevice ?
[ degradation = 1 ]
[ one output ]
frontCamera : FunctionalDevice ?
[ degradation = 1 ]
[ one output ]
dynamicObjectDetection : AnalysisFunction ?
[ some input && one output ]
trajectoryPlanningAP : AnalysisFunction ?
[ degradation = 1 ]
[ some input && one output ]
speedControl : AnalysisFunction ?
[ degradation = 1 ]
[ some input ]
// Function Connectors
frontPassengerLidarVal : FunctionConnector ?
// Replacement constraints
AP_HA : HardwareArchitecture
dn -> AP_DN
AP_DN : DeviceNodeClassification
visionProcessor1 : DeviceNode ?
visionProcessor2 : DeviceNode ?
algorithmProcessor1 : DeviceNode ?
algorithmProcessor2 : DeviceNode ?
frontDriverLidarSensor : DeviceNode ?
frontPassengerLidarSensor : DeviceNode ?
frontRadarSensor : DeviceNode ?
frontCameraSensor : DeviceNode ?
AP_Dpl : Deployment
fa -> AP_FAA
ha -> AP_HA
[ # 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
software
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