안전 설계 툴체인을 사용하여 Figma 디자인 문서에서 생성된 안전 모니터 솔루션을 제공합니다. 이 도구 시리즈를 순서대로 사용합니다.
안전 설계 컴파일러는 안전 모니터를 빌드하기 위한 후속 코드 생성을 구동하는 안전 아티팩트를 생성합니다. 설계 컴파일과 코드 생성을 분리하면 코드 생성기가 ISO-26262 등급 TCL-3을 달성할 수 있습니다.
그림 1. 안전 설계 툴체인
컴파일러가 아티팩트를 생성하면 툴체인은 OEM 안전 엔지니어가 검사하여 Figma 디자인에서 생성된 아티팩트를 검증할 수 있는 보고서를 만듭니다.
그림 2. 안전 설계 툴체인 워크플로
설계 컴파일러 입력
직렬화된 설계 문서는 설계 도구에서 가져와 툴킷 스키마로 처리된 UI 설계를 나타냅니다. 파일에는 설계에서 파싱된 다음 정보가 포함되어 있습니다.
- 설계의 전체 노드 트리
- 이미지 및 구성요소
- 이름, 버전, 최종 수정일과 같은 메타데이터
설계의 루트 노드는 노드 목록에 정의되어야 하며 설계에서 식별된 안전 관련 요소의 루트 노드여야 합니다.
이 파일은 Android Automotive OS와 통합되어 계기판을 렌더링하고 SDV 미디어에서 실행되는 고가용성 렌더러(HAR)를 사용하여 안전과 관련이 없는 요소를 오버레이로 표시하여 안전 관련 요소를 사용자에게 표시합니다.
설계 컴파일러는 DesignCompose 맞춤설정을 사용하여 설계에서 안전에 중요한 요소의 표시 상태를 전환하는 출력을 생성합니다. 설계는 Impeller를 사용하여 헤드리스로 렌더링됩니다. 맞춤설정 변경 간에 시스템은 렌더링 백엔드에 스크린샷 명령어를 실행하여 이미지 아티팩트를 생성합니다.
그림 3. 안전 모니터를 빌드하기 위한 샘플 Figma 설계 파일
출력 디렉터리
컴파일러가 생성된 아티팩트를 저장하는 로컬 파일 시스템의 위치입니다.
JSON 구성 파일
대부분의 경우 OEM 안전 엔지니어는 UI 설계에서 캡처되지 않은 차량 안전 관련 정보를 캡처하는 메타데이터가 포함된 JSON 구성 파일을 작성합니다. 이 파일에는 다음 데이터가 포함되어 있습니다.
안전 관련 디스플레이의 루트로 지정된 설계 요소 이 설계 요소는 차량 디스플레이에 맞게 크기가 조정됩니다. 크기는 디스플레이와 해상도가 같아야 합니다. 모든 안전 관련 요소는 이 요소의 하위 요소여야 합니다. 직접 하위 요소일 필요는 없지만 중간 노드에 중첩되어야 합니다. 이 루트는 루트 노드 객체이며 이름은 설계 문서의 노드와 일치해야 합니다.
설계의 타겟 디스플레이 여러 디스플레이에 걸쳐 요소가 있는 UI를 지원하기 위해 구성 파일은 둘 이상의 설계를 지정할 수 있으며 각 설계는 별도의 화면에 표시되도록 타겟팅됩니다.
차량 버스 신호 이름과 연결된 UI 요소의 사전 이 사전의 키와 값은 다음과 같습니다.
키: 이 신호가 활성 상태일 때 연결된 UI 요소가 표시되도록 의미를 포함하는 차량 버스 신호 이름입니다. 신호가 비활성 상태이면 연결된 UI 요소가 표시되지 않습니다.
값: 차량 버스 신호에 의거하여 제어되는 안전 관련 요소의 Figma 노드 ID입니다.
이 샘플 JSON 구성 파일을 참고하세요.
{
"documents" : [
{
"rootnode" : "#Stage",
"display_id" : 1,
"document_id": "GLJJrR1JI4HVEjL1qB40zq",
"states" : {
"abs": "#cluster/telltale/abs",
"airbag": "#cluster/telltale/airbag",
"low_tire_pressure": "#cluster/telltale/low-tire-pressure",
"brake": "#cluster/telltale/brake",
"traction": "#cluster/telltale/traction",
"lowbeam": "#cluster/telltale/lowbeam",
"hibeam": "#cluster/telltale/hibeam",
"park_lights": "#cluster/telltale/park-lights",
"fog_lights": "#cluster/telltale/fog-lights",
"seatbelts" : "#cluster/telltale/no-seatbelt"
}
}
]
,
"displays": [
{
"id": 1,
"width": 1920,
"height": 720
}
]
}
설계 컴파일러 실행
설계 컴파일러를 실행하려면 다음 단계를 따르세요.
/path/to/safety-design-compiler -c path/to/<input-file>.json
-o path/to/output_directory
설계 컴파일러 입력은 이 표에 설명되어 있습니다.
| 입력 | 짧은 버전 | 유형 | 설명 |
|---|---|---|---|
| 구성 | -c |
문자열 | 안전 구성 JSON 파일을 저장할 경로입니다. |
| 출력 | -o |
문자열 | 생성된 아티팩트를 저장할 경로입니다. |
설계 컴파일러 출력
설계 컴파일러는 컴파일러 도구를 호출할 때 지정된 출력 디렉터리에 출력을 생성하고 저장합니다. 이 출력은 안전 모니터에서 런타임 픽셀 테스트를 정의하고 사람이 읽을 수 있는 보고서를 생성하는 데 사용되는 헤더 파일을 생성합니다. 설계 컴파일러 출력은 다음이 포함된 Zip으로 제공됩니다.
내보낸 설계의 구조를 설명하기 위해 내보낸 애셋의 루트에 있는
data.json파일 메타데이터 파일입니다. 파일의 모든 경로는 이 파일을 기준으로 합니다.후속 코드 생성 중에 사용되는 활성 상태의 안전 관련 UI 요소를 표시하는 일련의 격리된 UI 요소 이미지입니다. 이러한 이미지의 알파 채널은 안전에 영향을 미치지 않는 픽셀 정보를 전달합니다.
생성된 코드를 테스트하는 동안 사용할 수 있도록 활성 및 비활성 상태의 안전 관련 UI 요소를 표시하는 일련의 전체 UI 이미지입니다.
컴파일러에서 입력으로 사용하는 직렬화된 Figma 문서의 업데이트된 버전입니다. HAR은 툴킷 스키마에서
RenderOptions::PixelPerfect플래그를 설정하여 추가 처리를 위해Config.json에 지정된 telltale 노드를 표시하고 업데이트합니다.
이 그림은 Figma 설계 파일을 보여줍니다.
그림 4. Zip 파일 콘텐츠
입력 파일 만들기
안전 모니터 생성기를 위한 data.json 입력 파일을 만듭니다. 출력은 각 안전 관련 디스플레이 요소의 크기 데이터와 이미지 링크를 포함하는 배열로 구성됩니다. 이 출력 파일의 구조는 이 표에 설명되어 있습니다.
| 요소 | 유형 | 단위 | 설명 |
|---|---|---|---|
static_ui_elements |
사전 | 해당 사항 없음 | Figma 문서에서 추출된 모든 안전 관련 UI 요소의 메타데이터가 포함된 구조입니다. |
x |
int | 픽셀 | 안전 관련 요소의 가로 좌표입니다. |
y |
int | 픽셀 | 안전 관련 요소의 세로 좌표입니다. |
width |
int | 픽셀 | 안전 관련 요소의 너비입니다. |
height |
int | 픽셀 | 안전 관련 요소의 높이입니다. |
name |
문자열 | 해당 사항 없음 | Figma 문서에서 추출된 안전 관련 UI 요소의 이름입니다. 이 요소로 생성된 이미지의 상대 경로를 나타냅니다. |
screen |
UI에서 타겟팅하는 화면을 설명하는 사전입니다. | ||
width |
int | 픽셀 | Figma 문서 UI의 너비입니다. |
height |
int | 픽셀 | Figma 문서 UI의 높이입니다. |
build |
이 설계 컴파일러 호출의 빌드 정보가 포함된 사전입니다. | ||
figma_document_id |
문자열 | 해당 사항 없음 | 아티팩트 세트를 생성하는 데 사용되는 Figma 문서의 ID입니다. |
design_compiler_version |
문자열 | 해당 사항 없음 | 아티팩트 세트를 생성하는 데 사용되는 설계 컴파일러의 버전입니다. |
이 섹션에서는 생성된 data.json 파일의 샘플을 제공합니다.
{
"static_ui_elements": [
{
"x": 71,
"y": 663,
"width": 38,
"height": 47,
"name": "cluster/telltale/no-seatbelt"
},
{
"x": 149,
"y": 667,
"width": 40,
"height": 39,
"name": "cluster/telltale/low-tire-pressure"
},
{
"x": 1727,
"y": 676,
"width": 43,
"height": 27,
"name": "cluster/telltale/hibeam"
},
{
"x": 1810,
"y": 675,
"width": 43,
"height": 30,
"name": "cluster/telltale/lowbeam"
},
...
...
],
"screen": {
"width": 1920,
"height": 720
},
"build": {
"figma_document_id": "taQnsdPS96wZY8dB1TbzOH",
"design_compiler_version": "0.1.0"
}
}
내보낸 설계 이미지
시스템은 직렬화된 설계 문서의 이름 지정에 따라 중첩된 디렉터리 구조로 안전 관련 노드의 이미지를 렌더링하고 저장합니다.
그림 5. 검증 이미지
시스템은 지정된 각 telltale에 대해 안전 관련 요소 정보 이미지를 생성합니다. 이러한 이미지에는 화면에 표시될 때 안전에 중요한 요소의 예상 픽셀이 포함되어 있습니다. 안전 모니터는 런타임 픽셀 테스트를 위해 이러한 이미지의 투명 픽셀을 무시할 수 있습니다.
시스템은 UI 테스트 및 검증 이미지도 생성합니다. 각 telltale이 포함된 전체 UI의 스크린샷을 렌더링하고 안전 엔지니어가 안전 구성을 검토하고 승인할 수 있도록 사람이 읽을 수 있는 보고서를 생성하는 데 사용하도록 제공합니다.
이러한 이미지를 사용하여 안전 모니터의 후속 테스트를 실행할 수도 있습니다. 시스템은 On 및 Off 상태의 모든 telltale에 대한 검증 이미지를 생성합니다.
이러한 이미지는 활성 및 비활성 상태의 모든 안전 관련 요소가 포함된 설계를 보여줍니다.
그림 6 및 그림 7. 활성 및 비활성 안전 관련 요소
그림 8은 안전벨트 미착용 telltale의 안전 관련 정보 이미지를 보여줍니다.
그림 8. 안전벨트 미착용 telltale
그림 9는 telltale의 UI 테스트 및 검증 이미지를 보여줍니다.
그림 9. telltale의 UI 테스트 및 검증
시스템은 컴파일된 아티팩트 폴더의 모든 요소에 대한 검증 이미지를 생성합니다. 시스템은 코드 생성 단계에서 이러한 이미지를 처리하고 안전 모니터의 런타임 픽셀 테스트에 사용될 헤더 파일에 추가합니다.
사람이 읽을 수 있는 보고서 생성기
Figma 문서에서 아티팩트를 생성한 후 사람이 읽을 수 있는 보고서를 생성할 수 있습니다. 보고서 생성기는 utils/human-readable-report-generator에 있습니다.
시스템은 노드가 활성 상태인 UI의 스크린샷을 포함하여 설계 컴파일러에서 생성된 안전 관련 노드의 아티팩트를 HTML 파일로 요약합니다. 안전 모니터를 빌드하기 전에 컴파일된 아티팩트를 검토할 수 있습니다.
명령줄에서 보고서 생성기를 실행합니다.
cargo run --bin human-readable-report-generator -- -d /path/to/data.json
-o /path/to/output_folder
이 표에서는 사람이 읽을 수 있는 보고서 생성기 입력을 설명합니다.
| 입력 | 짧은 버전 | 유형 | 설명 |
|---|---|---|---|
data_folder |
-d |
문자열 | 안전 컴파일러에서 생성된 data.json의 위치입니다. |
output_path |
-o |
문자열 | 생성된 보고서를 저장할 경로입니다. |
안전 승인 도구
승인 토큰을 생성하려면 사람이 읽을 수 있는 보고서를 검토한 후 안전 엔지니어가 output.json에 대해 안전 승인 스크립트를 실행할 수 있습니다.
이 도구는 utils/human-readable-report-generator에도 있습니다.
예를 들면 다음과 같습니다.
cargo run --bin approve-hrr -- -f /path/to/compiler_inspection_output.html -n
"Your Name" -e youremail@domain.com -o output/path
그림 10. 샘플 HTML 보고서
이 섹션에서는 안전 승인 도구 입력을 설명합니다.
| 입력 | 짧은 버전 | 유형 | 설명 |
|---|---|---|---|
file_path |
-f |
문자열 | 사람이 읽을 수 있는 보고서의 파일 경로입니다. |
approver_name |
-n |
문자열 | 승인 엔지니어의 이름입니다. |
approver_email |
-e |
문자열 | 승인 엔지니어의 이메일 주소입니다. |
output_path |
-o |
문자열 | 생성된 출력의 대상입니다. |
이 섹션에서는 approval_file.json의 샘플을 보여줍니다.
{
"approver_name": //Name of the approver
"approver_email": //Email of the approver
"file_hash": //SHA-256 hash generated against the human readable report.
}
참조 안전 모니터
참조 안전 모니터는 reference/safety-monitor에 있는 Rust 기반 서비스입니다. 모니터는 설계 컴파일러에서 생성된 아티팩트를 사용하여 시스템의 상태를 모니터링하여 디스플레이 안전 규정 준수를 보장합니다.
모니터는 독립형 바이너리 (har_safety_monitor)로 실행되며 data.json 파일의 경로와 아티팩트의 기본 경로를 인수로 사용합니다.
/path/to/har_safety_monitor --data-json-path /path/to/data.json
--artifact-base-path /path/to/artifacts
모니터는 다음 작업을 실행합니다.
- 아티팩트 로드:
data.json을 로드하여 안전 관련 UI 요소와 예상 위치 및 크기를 식별합니다. - 골든 이미지 비교: 컴파일러에서 생성된 안전에 중요한 요소의 골든 이미지와 현재 화면 콘텐츠를 비교합니다.
- 차량 데이터 통합: 차량 데이터 소스에 연결하여 각 telltale의 예상 상태를 확인합니다.
- 불일치 감지: 차량 데이터를 기반으로 예상되는 내용과 화면에 표시되는 내용이 일치하지 않으면 오류를 로깅합니다.
안전 모니터는 일반적으로 전용 APEX 내에서 시스템 이미지의 일부로 빌드되고 배포되도록 설계되었습니다.