콘텐츠로 바로가기

Hardware-in-the-Loop Simulation (HILS)

실제 하드웨어를 가상의 환경에 연결하여 위험 요소 없이 정밀하게 성능과 안전성을 검증하는 하드웨어-시뮬레이터 통합 테스트 물리 체계를 다루는 학습 노드입니다.

Article
M

Me

hyunyoun's Blog

computer-architecture-embedded-systemscomputer-architectureembedded-systemsroboticscontrol-systems-mechanicshardware-in-the-loop-simulation-hilslearningcontrol10 min read

1. Overview

HILS와 가상 검증 (Hardware-in-the-Loop Simulation)은 우주발사체 펌웨어나 자율주행 자동차 ECU 제어 코드를 검증하겠다고 100억 원짜리 실물 기체에 바로 코드를 밀어 넣고 테스트(추락/충돌)하는 미친 짓을 막기 위해, 칩셋(Hardware)의 센서/모터 핀을 뽑아 강력한 슈퍼컴퓨터(시뮬레이터)에 직결하여 완벽한 매트릭스 가상현실을 속여 넘기는 우주 방어급 검증 공학입니다.

학습자는 MCU 펌웨어가 자신이 가상 환경에 물려있는지도 모른 채 모터 PWM을 뱉으면, 가상 시뮬레이터 랙장(Rig)이 이를 0.001초 만에 미분 방정식 물리 엔진으로 계산하여 엔코더(Encoder) 펄스 신호로 칩에 다시 쑤셔 넣는 폐루프(Closed-loop) 통신 동기화 뼈대를 뜯어봅니다. 나아가 단순히 코딩 논리(SILS)를 넘어, 프로세서 아키텍처의 캐시 딜레이나 메모리 버그까지 100% 잡아내는 하드웨어 검증의 권력을 해부하고, 고장 주입(Fault Injection)을 통해 극한의 엣지 케이스(단선, 센서 파괴)를 폭격하는 디지털 트윈 아키텍트 역량을 확보합니다.

2. Scope & Boundaries

In-Scope

  • X-in-the-Loop 아키텍처 (XILS 궤적): MILS(Model), SILS(Software), HILS(Hardware) 시뮬레이션 위상 체인.
  • 실시간 버스 인터페이스 (Real-time Interface): 시뮬레이터(Plant)와 칩(Controller)을 연결하는 I/O 하드웨어(CAN, SPI, 아날로그/디지털 신호 에뮬레이션).
  • 고장 주입 테스팅 (Fault Injection): 센서 핀(Pin) 쇼트(Short-to-Ground), 배터리 전압 드롭 방전, 네트워크 패킷 딜레이 강제 삽입.
  • 플랜트 동기화 물리 (Synchronization): HILS 실시간(Real-Time) 스텝 록(Step-Lock) 붕괴와 지터(Jitter).

Out-of-Scope

  • ROS2 기반 가상 시뮬레이터: Gazebo나 Webots 같은 화면 중심의 소프트웨어(로봇) 물리 엔진 시뮬레이터 단독 사용 \rightarrow 02-08-05. ROS2 Distributed Robotics Physics 영역.
  • 순수 C/C++ 유닛 테스트 (Unit Testing): 구글 테스트(GTest) 기반의 함수(Function) 단위 테스트 \rightarrow 06-03-01. Unit Testing & Mocking 영역.

Boundaries

  • HILS vs. SILS (06-03-01): SILS(Software-in-the-Loop)가 "PC 화면에서 가상 드론 물리 엔진을 돌리고, 파이썬 제어 코드를 똑같은 PC 메모리상에서 돌려보며 '아 잘 뜨네'하는 순한 맛"이라면, HILS는 "펌웨어를 쇳덩이 칩(MCU)에 진짜 굽고, 그 칩의 구리선 핀(Pin)을 가짜 센서 파형(아날로그 3.3V)을 내뿜는 괴물 서버 장비에 물리적으로 납땜 연결하여 칩 자체가 1%의 의심도 없이 자신이 진짜 우주를 날고 있다고 착각하게 만드는 극한의 기만술"입니다.

3. Counterexample

  • SILS 맹신에 의한 양산 폭파 (The Software-Only Illusion): "소프트웨어 시뮬레이터(PC)에서 1달 동안 띄웠을 때 완벽했으니까 실물 차에 박아도 문제없음!"이라며 양산 펌웨어를 올리는 개발자의 교만. PC의 인텔 코어(3GHz)에서는 제어 루프 연산이 0.1ms 만에 끝났지만, 실제 양산용 100MHz짜리 보급형 자동차 MCU 칩에서는 플로팅 포인트 연산 병목이 터져 루프가 5ms로 늘어지는(Latency) 하드웨어 아키텍처 붕괴가 발생해 차가 고속도로에서 차선을 이탈합니다. 칩 자체의 캐시(Cache), 버스(Bus) 한계를 태우지 않는 SILS는 반쪽짜리 진실입니다.
  • HILS 동기화 랙(Lag) 방치 (Synchronization Jitter Crash): 실물 칩이 모터 PWM을 뱉었는데, 거대한 물리 엔진 시뮬레이터(PC)가 윈도우(OS) 백그라운드 업데이트 때문에 계산을 0.05초 지연(Jitter)시켜서 센서 값을 늦게 뱉어버린 파탄적 세팅. 칩은 "어? 모터를 돌렸는데 차가 안 가네? 파워 더 때려!"라며 적분(Integral Windup) 폭주를 시전하고, 0.05초 뒤에 가짜 센서값이 폭포수처럼 밀려오면 가상 차가 뒤집어집니다. HILS의 물리 엔진 서버 역시 반드시 0.001초의 절대 결정성을 지키는 리얼타임 OS(RTOS/Linux-RT) 위에 돌아가야만 합니다.

4. Prerequisites

  • 디지털-아날로그 물리 변환 (Basic): 칩이 PWM을 쏘고 ADC로 아날로그 전압을 읽어 들이는 하드웨어 핀 맵 구조를 알아야 HILS 장비와 연결할 수 있습니다. (02-05-04 Hardware Interfacing)
  • 동역학 상태 방정식 (Recommended): HILS 서버 장비 내부에서 돌아가는 우주(가상 드론 물리 모델)가 행렬 방정식(Plant)으로 계산됨을 꿰야 전체 루프를 장악할 수 있습니다. (02-08-01 Physical Modeling)

5. Learning Map

Sequence Core Cluster Objective & Description Evidence (BoK)
1 X-in-the-Loop Concept MILS(수식) \rightarrow SILS(코드) \rightarrow HILS(실물 칩)으로 진화하며 시뮬레이션의 차원(물리적 지터)을 넓혀가는 궤적을 쥡니다. P1
2 The Matrix (Plant Emulator) MCU 칩의 다리(Pin)에 가짜 아날로그 센서 전압과 CAN 패킷을 실시간으로 쑤셔 넣는 괴물 시뮬레이터 서버를 뜯어봅니다. P5
3 Fault Injection Physics 실차 테스트에선 절대 못 하는 미친 짓(주행 중 브레이크 센서 선 자르기)을 가상 전기 신호(Short)로 때려 박는 악마성을 해부합니다. Industry
4 Real-Time Synchronization MCU의 틱(1ms)과 시뮬레이터 서버의 계산(1ms)이 서로 맞물려 톱니바퀴처럼 0.1ms의 오차도 없이 핑퐁 치는 동기화를 장악합니다. Industry

6. Learning Topics

Basic

Core Topic 01: 완벽한 매트릭스의 구축, X-in-the-Loop 단계별 진화 (V-Model Simulation)

  • Why to Learn: 무턱대고 칩에 코드를 넣는 야만적 하드웨어 디버깅에서 벗어나, 순수 알고리즘(MILS) \rightarrow C언어 번역(SILS) \rightarrow 실물 칩 포팅(HILS)으로 이어지는 항공/자동차 업계의 3단 V-모델 검증 헌법을 세우기 위함입니다.
  • What to Learn:
    • Concepts: MILS(Model-in-the-Loop), SILS(Software-in-the-Loop), HILS(Hardware-in-the-Loop).
    • Skills: 플랫폼 의존성(Target Dependency) 분리, 모델 기반 설계(MBD) 코드 생성.
    • Tools: MATLAB Simulink Coder, 랩뷰(LabVIEW).
    • Trade-offs: SILS까지는 랩탑 하나로 방구석에서 1초 만에 1시간어치 가상 주행(Accelerated Time)을 돌려댈 수 있는 극강의 편리함이 있지만, HILS로 넘어가는 순간 실제 시간(Real Time) 1초당 1초씩밖에 테스트를 못 하고 수천만 원짜리 장비 배선(Harness)을 깔아야 하는 끔찍한 오버헤드 전환.
  • How to Learn:
    • 1단계: MILS 단계에서 (Error * Kp) 블록 다이어그램(수식)끼리 선을 그어 드론이 잘 뜨는지 확인한 뒤, 이 그림을 버튼 클릭 한 방으로 거대한 C 소스코드(수천 줄)로 번역하여 윈도우(PC) 램 위에서 돌려보는 SILS의 무결점 가상 공간을 해부합니다.
    • 2단계: SILS에서 번역된 이 C 코드를 최종적으로 STM32 칩(MCU) 플래시에 진짜 굽고, 이 칩을 HILS 시뮬레이터 랙(Rack)에 랜선과 전선으로 연결하여 "내 코드가 진짜 칩의 메모리와 캐시 병목 속에서도 똑같이 도는가"를 심판하는 마지막 관문을 뜯어봅니다.
  • Implement: 파이썬 환경에서 Controller 함수와 Plant 물리 모델 객체를 동일 스레드에서 직접 물려버리는 SILS 스크립트 모사. 이후 이 둘을 강제로 찢어버리고, Controller는 독립된 로컬 소켓 클라이언트로, Plant는 소켓 서버(TCP/UDP) 프로세스로 쪼갠 뒤 물리적 이더넷 지연(Network Latency)을 가미하여 통신(HILS 구조 흉내)으로만 맞물려 돌아가는 아키텍처 디커플링 증명.

Core Topic 02: 칩의 뇌를 속이는 아날로그 핑퐁, HILS I/O 인터페이스 역학 (Real-time Interface)

  • Why to Learn: 소프트웨어(소켓/API)로 "모터 30% 켜라"라고 말로 주고받는 가상 세계와 달리, HILS 장비가 칩의 구리선 핀(Pin)에 실제 '가짜 전압(3.3V)'과 '가짜 PWM 신호'를 쏘아주는 물리적 통신 배관을 장악하기 위해서입니다.
  • What to Learn:
    • Concepts: 아날로그 에뮬레이션(Analog Out/In), PWM 캡처(Capture), 프로토콜 시뮬레이션(CAN/LIN 모사).
    • Skills: 로직 분석 라우팅, 신호 스케일링(Signal Conditioning) 회로 맵핑.
    • Tools: dSPACE, NI(National Instruments) PXI 섀시, FPGA.
    • Trade-offs: HILS 장비가 자동차 엔진 물리 수식을 풀어낸 뒤 가스 페달 센서 핀에 05V0 \sim 5\text{V} 아날로그 전압을 직접 쏴주는 건 칩을 100% 속일 수 있어 완벽하지만, 채널 100개짜리 센서를 일일이 아날로그 카드와 릴레이로 물리 배선 연결(Wiring)해야 하는 지옥의 노가다.
  • How to Learn:
    • 1단계: 칩(제어기)이 가상 엔진을 돌리겠다고 Timer1 핀으로 진짜 30%짜리 아날로그 PWM 전기를 쏘면, HILS 장비의 FPGA 카드가 그 찌그러진 전기 펄스의 폭(Width)을 측정해 "아, 30퍼센트구나"라고 거꾸로 디지털화(Capture)하여 내부 시뮬레이터 뇌로 퍼담는 역학을 해부합니다.
    • 2단계: 물리 엔진(HILS)이 "엔진 RPM이 3000이네"라고 계산을 끝내면, HILS의 아날로그 출력 카드가 홀 센서 핀(Pin)에 진짜 3000Hz 주파수의 펄스형 전압 펄스를 물리적으로 쏘아 넣어 칩의 인터럽트 핀을 찰싹찰싹 때리는 기만 기하학을 뜯어봅니다.
  • Implement: 파이썬 딕셔너리로 HILS_Board 가상 객체 생성. 제어기 스크립트가 Write_Pin('PWM_1', 0.5)로 디지털 논리 값을 쓰면, 인터페이스 객체가 이를 수학적 전압(Volt=1.65V)으로 변환해 Plant_Physics 모델에 넘기고, 모델이 계산한 온도 결괏값을 다시 가상 ADC 12비트(0~4095) 원시 헥사(Hex) 쓰레기 값으로 인코딩하여 제어기 핀에 돌려꽂는 I/O 스케일링 루틴 증명.

Practical

Core Topic 03: 악마의 엣지 케이스 폭격, 고장 주입 테스트 (Fault Injection)

  • Why to Learn: 자율주행 차를 고속도로에서 100km/h로 달리게 한 뒤 핸들 조향 센서 선을 진짜 가위로 잘라버리는 짓(실차 테스트)은 사람이 죽을 수 있으므로, 매트릭스(HILS) 안에서 수만 가지 기계적 붕괴 시나리오를 전기로 지져버리기 위함입니다.
  • What to Learn:
    • Concepts: 폴트 인젝션(Fault Injection), 단락(Short to Ground / Short to Battery), 개방(Open Circuit), 패킷 드롭(Network Fault).
    • Skills: 페일 세이프(Fail-Safe) 로직 활성화 검증, 릴레이 보드(Fault Insertion Unit, FIU) 통제.
    • Tools: 고장 주입 자동화 시퀀서(Sequencer).
    • Trade-offs: 모든 센서 채널에 HILS 장비의 물리적 릴레이(FIU)를 달아서 단선을 모사할 수 있게 만들면 우주 최강의 디버깅 커버리지를 얻지만, 릴레이 카드를 수백 개 꽂느라 HILS 장비 랙 1세트 구축 비용이 수억 원대로 미친 듯이 팽창하는 엔터프라이즈의 고통.
  • How to Learn:
    • 1단계: 테스트 자동화 스크립트가 HILS 장비에게 명령을 내려, 잘 달리고 있는 가상 드론의 '자이로 센서 아날로그 핀'에 붙은 물리적 릴레이를 'Short to Ground(0V 강제 접지)'로 틱! 하고 붙여버려 센서값을 영원히 0으로 박아버리는 전기적 암살 궤적을 해부합니다.
    • 2단계: 그 순간 MCU 칩의 제어 코드가 즉각 "센서 값 변화율(Variance) 0, 이상 감지!" 듀얼 락(Dual-lock) 페일 세이프 헌법을 터트려 모터를 즉각 스톱시키고 비상 낙하산을 펴는지, 아니면 그냥 추락하는지를 자동으로 채점(Assertion)하는 테스팅 파이프라인을 뜯어봅니다.
  • Implement: 무한 루프로 도는 폐루프 제어 모의 스크립트에 Fault_Injector 스레드를 심어둠. 3초 경과 시 강제로 Sensor_Dict['speed'] 변수에 노이즈(Noise)를 10배 튀기거나, 연결을 끊어(Return None) 버렸을 때, 제어 루프 내부의 if sensor is None 예외 방어선이 발동하여 시스템 상태(State)를 EMERGENCY_STOP으로 성공적으로 천이(Transition)시키고 덤프를 남기는 에러 폭격 증명.

Advanced

Core Topic 04: 시간의 폭력과 지터의 죽음, 실시간 동기화 뼈대 (Real-Time Synchronization)

  • Why to Learn: 칩(MCU)은 1밀리초마다 완벽한 칼춤(Tick)을 추는데 HILS 시뮬레이터 서버가 윈도우 업데이트 한방에 0.05초 랙(지연)을 뱉어버리면 가상 매트릭스의 시공간이 뒤틀려 칩이 뻗어버리므로, 완벽한 스텝 동기화(Step-Lock)를 결속하기 위해서입니다.
  • What to Learn:
    • Concepts: 실시간 운영체제(RTOS on HILS), 스텝 록(Step-Lock), 하드 리얼타임(Hard Real-time) 타이밍 마진, 오버런(Overrun).
    • Skills: 물리 엔진 연산 최적화(데드라인 방어), 하드웨어 타이머(FPGA) 트리거 핑퐁.
    • Tools: Linux-RT, dSPACE QNX 커널.
    • Trade-offs: HILS 서버의 물리 엔진(시뮬레이터)이 타이어 마찰과 바람의 유체역학까지 100% 똑같이 묘사(고도 모델링)하면 현실감은 끝내주지만, 1ms 루프 데드라인(Deadline) 안에 수학 계산을 끝내지 못해 오버런(Overrun)이 터져버려 통신 지연(Latency)이 튀어 오르는(시공간 붕괴) 수학 복잡도와의 싸움.
  • How to Learn:
    • 1단계: 일반 윈도우/리눅스는 마우스 클릭이나 백그라운드 잡스(Jobs) 때문에 내 시뮬레이터 프로세스를 10ms씩 스케줄러에서 쫓아내기도 합니다. 찰나의 지터(Jitter)조차 허용하지 않기 위해 HILS 서버 자체를 무자비한 실시간 커널(RTOS)로 싹 밀어버리고 연산 코어를 독점 결박(Core Affinity)하는 역학을 해부합니다.
    • 2단계: 칩이 PWM 신호를 1스텝 보내면 \rightarrow HILS 물리 엔진 서버가 이를 받아 차의 속도를 딱 1ms어치만 수식 계산하고 센서값을 응답한 뒤 \rightarrow 서로 다음 틱(Tick)을 기다리며(Step-Lock) 0.001초의 톱니바퀴를 무한히 맞물리는 핑퐁 기하학을 뜯어봅니다.
  • Implement: 클라이언트(MCU)와 서버(HILS)가 파이썬 쓰레드로 돌아감. MCU는 엄격히 time.sleep(0.1) 틱마다 동작을 수행하려 하나, HILS 쓰레드가 무거운 연산(강제 sleep(0.15)) 탓에 데드라인을 놓치고(Overrun) 늦게 응답함. 결국 MCU의 센서 수신 큐(Queue)가 텅 비게 되는 현상(Starvation)이 발생해 궤적이 완전히 무너지는 타임라인 지터 타이밍 출력 스크립트 작성.

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core)
HILS 실제 제어기 하드웨어를 실시간 물리 주입 장치에 연결하여 폐루프(Closed-loop) 성능을 시험하는 기법입니다. 기본 최종 검증 Plant / DUT SILS '소프트웨어만 테스트' 아님 Industry core
Plant Model 시뮬레이터 내부에서 실제 기계(엔진, 로봇 등)의 물리적 거동을 수행하는 수식 기반의 모델입니다. 추천 가상 물리 Modeling / State Simulation '공장 건물' 의미 아님 Industry Sys core
Overrun 시뮬레이션 연산이 정해진 샘플링 주기를 넘겨 실제 시간(Wall clock)과 어긋나게 된 물리적 사고 현상입니다. 실무 실시간성 위반 Determinism Jitter '속도가 느린 것' 이상의 정지 문제 Industry/NI core
Fault Injection 시스템의 회복력을 평가하기 위해 하드웨어 핀이나 통신 라인에 인위적으로 오류를 주입하는 물리 처리입니다. 심화 안전 인증 FIU / Safety Robustness '버그 수정'이 아닌 '유발' Industry 26262 core

8. References

Primary

Secondary

  • [Simulation-Based Design and Evaluation of Embedded Control Systems] — Comprehensive HILS theory.
  • [Real-Time Simulation Technologies: Principles and Applications] — Industry standard methodology.

Industry

  • [dSPACE: Hardware-in-the-Loop (HIL) Simulation Guide] — Market leading equipment docs.
  • [National Instruments: ADAS HIL Test Solutions Case Studies] — Real-world autonomous driving HILS.

9. Final Checklist

Primary

  • 'SILS'와 'HILS'의 물리적 차이점(실제 하드웨어 개입 여부와 전기적 신호 변환 유무)을 명확히 설명 가능한가? (P1)
  • 시뮬레이터 모델이 '실시간성'을 잃었을 때, 왜 대상 하드웨어의 피드백 제어 로직이 물리적으로 붕괴하는지 입증할 수 있는 가? (P1)

Secondary

  • 'FPGA 기반 HILS'가 'CPU 기반 HILS'보다 고속 물리 현상(나노초 단위 스위칭)을 모사하는 데 왜 유리한지 전파 지연 관점에서 소통 가능한가?
  • 모델 연산 주기(dtdt)가 시스템의 물리 시간 상수보다 10배 이상 빨라야 하는 이유를 제어 정밀도 수리적 근거로 도출할 수 있는 가?

Industry

  • 자율주행 차량의 긴급 제동 시스템(AEB) 검증 시, 왜 전용 HILS 장비를 통한 '단선/합선 테스트'가 필수적인지 안전 규격 관점에서 제안할 수 있는 가? (SFIA)
  • HILS 시험 결과가 실제 차량의 실도로 시험 결과와 물리적으로 일치(Correlation)함을 증명하기 위해 필요한 데이터 보정 절차를 기술할 수 있는 가?

Robotics & Control Systems Mechanics

4 / 5