AutoPilot : System
AP_FAA : FAA
AP_HA : HardwareArchitecture
AP_DN : DeviceNodeClassification
visionProcessor1 : ECU ?
visionProcessor2 : ECU ?
algorithmProcessor1 : ECU ?
algorithmProcessor2 : ECU ?
frontDriverLidarSensor : DeviceNode ?
frontPassengerLidarSensor : DeviceNode ?
frontRadarSensor : DeviceNode ?
frontCameraSensor : DeviceNode ?
abstract 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
frontDriverLidarVal : FunctionConnector ?
frontPassengerLidarVal : FunctionConnector ?
compositePointCloud : FunctionConnector ?
frontRadarVal : FunctionConnector ?
frontCameraVal : FunctionConnector ?
pointCloudCusterVal : FunctionConnector ?
dynamicObjects : FunctionConnector ?
velocityProfile : FunctionConnector ?
[ no frontRadar => frontCamera ]// Replacement constraints
abstract System
abstract FeatureModel
abstract Architecture
abstract FunctionalAnalysis
abstract HardwareArchitecture
abstract DeviceNodeClassification
abstract CommTopology
abstract PowerTopology
abstract Deployment
abstract Feature
abstract FunctionalAnalysisComponent
deployedTo -> DeviceNode
xor implementation
software
input -> FunctionConnector *
[ this.receiver = parent ]// connectors for which this function is the receiver
output -> FunctionConnector *
[ this.sender = parent ]// connectors for which this function is the sender
degradation -> integer
[ this >= 1 && this <= 3 ]
resultingDegradation -> integer = max input.sender.resultingDegradation.dref, degradation.dref
// level 4 implies that the function is not available
abstract AnalysisFunction : FunctionalAnalysisComponent
abstract FunctionalDevice : FunctionalAnalysisComponent
abstract FunctionConnector
sender -> FunctionalAnalysisComponent
receiver -> FunctionalAnalysisComponent
deployedTo -> HardwareDataConnector ?
[ this.parent in this.deployedFrom ]
[ sender.deployedTo.dref, receiver.deployedTo.dref in deployedTo.endpoint.dref ]
[ sender.deployedTo.dref = receiver.deployedTo.dref <=> no this.deployedTo ]
enum DeviceNodeType = SmartDeviceNode | EEDeviceNode | PowerDeviceNode
abstract DeviceNode
type -> DeviceNodeType
abstract HardwareConnector
abstract PowerConnector : HardwareConnector
source -> DeviceNode
sink -> DeviceNode
abstract LoadPowerConnector : PowerConnector
abstract DevicePowerConnector : PowerConnector
abstract HardwareDataConnector : HardwareConnector
endpoint -> DeviceNode 2..*
deployedFrom -> FunctionConnector 1..*
[ this.deployedTo = this.parent ]
abstract DiscreteDataConnector : HardwareDataConnector
abstract AnalogDataConnector : HardwareDataConnector
abstract BusConnector : HardwareDataConnector
[ all e : endpoint | e.type = SmartDeviceNode ]
xor type
LowSpeedCAN
HighSpeedCAN
LIN
FlexRay
abstract LogicalBusBridge : HardwareDataConnector
bus -> BusConnector 2..2
[ all e : this.endpoint | e.type = SmartDeviceNode ]
abstract ECU : DeviceNode
// Automotive Concepts