# [기말 프로젝트] LEGO EV3 기반 라인트래킹 및 물류 운반 로봇 시스템 설계 및 구현
## 초록
본 프로젝트는 LEGO MINDSTORMS EV3 플랫폼을 기반으로 한 지능형 라인트래킹 및 물류 운반 로봇을 설계하고 구현한다. 복잡한 트랙 환경에서의 다중 교차로 인식, 동적 라인트래킹 및 특정 물체 파지 요구사항을 해결하기 위해, 본 시스템은 하위 수준의 운동 제어에 이산 시간 기반의 개선된 비례-미분(PD) 제어 알고리즘을 도입하고, 차동 구동 운동학 모델과 결합하여 부드럽고 적응적인 궤적 추종을 구현한다. 상위 수준의 경로 계획 및 작업 실행에서는 부울 논리와 유한 상태 기계(FSM) 기반의 결정적 결정 트리 모델을 구축하여 "센서 블라인딩", "교차로 오판", "가양성 종점 탐지"와 같은 전형적인 공학 문제를 해결한다. 본 논문은 제어 이론의 기초, 알고리즘의 수학적 유도, 하드웨어-소프트웨어 협력 설계를 상세히 설명하고, 제어 이론의 역사 및 관련 실증 연구와 함께 직선, 타원 및 8자형 복잡 궤적에서의 다양한 제어기의 성능을 비교한다. 또한 임베디드 시스템의 물리적 특성(예: CPU 기아, PWM 제어 응답)에 대한 하위 수준의 연산 최적화 방안을 제안한다$^{[1]}$.
## 1. 서론
이동 로봇 분야에서 라인트래킹과 자율 주행은 복잡한 작업을 수행하기 위한 기초이다. 핵심 과제는 동적 환경과 하드웨어 제약 조건을 처리할 수 있는 신뢰할 수 있는 제어기를 설계하는 것이다. 초기 자동 제어 개발에서는 단순한 온-오프 제어(Bang-Bang 또는 ON-OFF 제어)가 흔히 사용되었다. 그러나 이러한 "흑백 논리"의 제어 방식은 심각한 궤적 진동, 큰 기계적 마모를 유발하고 고속에서 쉽게 탈선하는 경향이 있다. 이륜 차동 구동 로봇은 횡방향 속도가 항상 0인 전형적인 비홀로노믹 구속(Non-holonomic constraint) 시스템이므로 요 각속도를 통해서만 횡방향 편차를 조정할 수 있어 조향 명령의 부드러움과 정밀도에 매우 높은 요구사항을 제기한다$^{[1]}$.
시스템의 강건성과 동적 응답 능력을 향상시키기 위해 본 프로젝트는 산업계에서 널리 사용되는 PID(비례-적분-미분) 폐루프 제어 알고리즘을 도입한다$^{[2]}$. PID 제어 이론의 역사는 1890년대의 조속기 설계까지 거슬러 올라가며, 1922년 러시아계 미국인 엔지니어 니콜라스 미노르스키(Nicolas Minorsky)가 미국 해군을 위한 선박 자동 조향 시스템을 설계하면서 처음으로 엄격한 수학적 이론 분석을 수행했다$^{[2]}$. 미노르스키는 조타수의 동작을 관찰함으로써 우수한 제어를 위해서는 현재의 오차뿐만 아니라 과거의 누적 오차와 오차의 변화 추세도 고려해야 한다는 것을 발견했다$^{[2]}$. 이 기반 위에서 본 연구는 LEGO EV3의 다중 광센서 융합 기술을 결합하여 기존 PID를 이산화 및 차원 축소 개선하여 가이드 라인에 대한 적응형 추종을 구현했다. 관련 실증 연구에 따르면 LEGO EV3 로봇에 PID 제어기를 배치하면 섀시의 고주파 진동을 효과적으로 제거하고 복잡한 트랙에서의 라인트래킹 효율성과 안정성을 향상시킬 수 있다$^{[1]}$.
LEGO MINDSTORMS EV3는 LEGO가 출시한 3세대 로봇 키트로, 핵심 프로그래밍 가능 브릭은 ARM9 아키텍처의 TI Sitara AM1808 프로세서(300 MHz)를 탑재하고 경량 Linux 운영체제를 실행한다$^{[3]}$. EV3는 다양한 센서(색상 센서, 초음파 센서, 자이로스코프 등)와 서보 모터를 지원하며, LabVIEW 그래픽 프로그래밍 환경 또는 MicroPython과 같은 고급 언어로 프로그래밍할 수 있다$^{[3]}$. 이러한 하드웨어 특성은 제어 알고리즘 배치의 기반을 제공한다.
## 2. 핵심 하위 수준 알고리즘: 차동 운동학 및 개선된 PD 제어
라인트래킹 제어의 핵심은 색상 센서의 광속 피드백을 통해 로봇 본체의 가이드 라인 이탈을 실시간으로 계산하고 이를 좌우 구동 휠의 동적 차속으로 변환하여 보정 토크를 생성하는 것이다. 본 프로젝트는 두 개의 색상 센서를 라인 양쪽에 배치하는 하드웨어 구성을 채택하고 임베디드 마이크로프로세서의 샘플링 특성에 적응하는 디지털 PD 제어기를 구축한다.
### 2.1 차동 구동 로봇의 운동학 모델
제어 알고리즘을 수립하기 전에 로봇의 운동학적 섀시 특성을 제어 출력의 물리적 기반으로 명확히 해야 한다. 좌우 구동 휠의 선속도를 각각 $V_L$과 $V_R$, 두 바퀴 중심 간 거리(윤거)를 $d$, 구동 휠 반경을 $r$이라고 하자. 바퀴형 이동 로봇(Wheeled Mobile Robot)의 비홀로노믹 운동학 모델에 따르면, 로봇 질량 중심의 전체 선속도 $V$와 요 각속도 $\omega$는 다음 방정식으로 유도된다$^{[2]}$:
$$V(t) = \frac{V_R(t) + V_L(t)}{2}$$
$$\omega(t) = \frac{V_L(t) - V_R(t)}{d}$$
이 수학적 모델을 통해 좌우 바퀴에 크기가 같고 방향이 반대인 차동 보상(즉, $V_L$과 $V_R$의 상대적 크기 변경)을 가함으로써 로봇의 요 각속도 $\omega$를 선형적으로 제어할 수 있음을 알 수 있다. 이 차동 보상이 필요한 조향 토크를 구성하며, 로봇 자세 보정의 동역학적 기초가 된다.
### 2.2 이산 시간 PID 제어 알고리즘의 수학적 유도
연속 시간 영역의 고전적 PID 제어 방정식은 오차에 대한 비례, 적분 및 미분 연산을 통해 제어 출력을 계산한다. 표준 공식은 다음과 같이 표현된다$^{[2]}$:
$$u(t) = K_p e(t) + K_i \int_{0}^{t} e(\tau) d\tau + K_d \frac{de(t)}{dt}$$
여기서 $K_p, K_i, K_d$는 각각 비례 게인, 적분 게인 및 미분 게인이며, $e(t)$는 시스템 설정값과 피드백 간의 오차이다$^{[2]}$.
그러나 EV3의 메인 프로세서(ARM9)는 이산 시간 샘플링 기반의 디지털 임베디드 시스템으로, 연속 미적분 연산을 직접 처리할 수 없다. 따라서 유한 차분법을 사용하여 위의 연속 방정식을 이산화해야 한다. 마이크로프로세서의 일정한 샘플링 주기를 $\Delta t$라고 하고, $k$번째 샘플링의 오차를 $E(k)$라고 할 때, 후방 유한 차분 원리에 따라 1차 미분은 차분 방정식 $\frac{E(k) - E(k-1)}{\Delta t}$으로 근사화될 수 있고, 적분 항은 이산 누적 합 $\sum_{j=0}^{k} E(j) \Delta t$으로 근사화될 수 있다. 이를 통해 위치식 디지털 PID 방정식을 얻는다$^{[2]}$:
$$U(k) = K_p E(k) + K_i \sum_{j=0}^{k} E(j) \Delta t + K_d \frac{E(k) - E(k-1)}{\Delta t}$$
대칭형 이중 광센서 라인트래킹 시나리오에서 가이드 라인의 곡률은 빠르게 변화한다. 적분 항 $I$를 유지하면 설정값이 크게 변할 때(예: 급격한 커브) 적분기가 과도한 오차를 누적하게 된다. 이로 인해 제어 출력이 상하한에 의해 절단되는 "적분 포화(Integral Windup)" 현상이 발생할 수 있으며, 이는 오차 부호가 변경되어도 출력이 포화 상한에 머물러 적시에 응답하지 못하여 결국 차체가 오버슈트하거나 트랙을 이탈하게 된다. 따라서 본 프로젝트는 기존 모델을 차원 축소 최적화하여 적분 항을 제거하고 일정한 샘플링 주기 $\Delta t$를 계수에 암시적으로 통합하여 이산 디지털 PD 제어기를 얻는다$^{[2]}$:
$$U(k) = K_p \cdot E(k) + K_d \cdot [E(k) - E(k-1)]$$
### 2.3 조향 보상 알고리즘의 시스템 수준 매핑 및 파라미터 분석
프로젝트의 실제 소프트웨어 코드에서는 중첩된 고급 수학 모듈을 통해 다음과 같은 조향 보상(Turn) 연산 방정식이 구현된다:
$$Turn = (a-b) \times 0.8 + ((a-b)-c) \times 0.6$$
이 방정식은 위에서 유도된 이산 디지털 PD 방정식과 대응 관계가 있다. 먼저 오차 신호의 획득에 있어서 $a$는 왼쪽 센서의 반사광 강도 디지털 값을, $b$는 오른쪽 센서의 값을 나타낸다. 광학적 난반사 원리에 기반하여 현재 오차 신호는 $E(k) = a - b$이다. 차체가 중앙에 위치할 때 좌우 센서는 흑백 경계선에 위치하여 광흡수율이 비슷하므로 $a-b \approx 0$이 된다. 차체가 오른쪽으로 이탈하면 왼쪽 센서는 흰색 고반사 영역에, 오른쪽 센서는 검은색 저반사 영역에 들어가게 되어 양의 오차 신호가 생성된다.
둘째, 방정식의 $(a-b) \times 0.8$ 항은 비례 제어 항(Proportional Term)에 해당한다. 비례 제어는 현재 오차만 고려하여 현재 편차에 비례하는 복원 토크를 생성한다. 비례 게인 $K_p = 0.8$은 외란에 대한 시스템의 응답 강도를 결정하며, 편차가 클수록 출력 보정 토크가 강해진다.
마지막으로, 방정식의 $((a-b)-c) \times 0.6$ 항은 미분 제어 항(Derivative Term)에 매핑되며, 여기서 $c$는 레지스터에 저장된 이전 주기의 이력 오차 $E(k-1)$을 나타낸다. 미분 제어 항은 시스템의 댐퍼 역할을 하며, 오차의 1차 도함수를 계산하여 미래 추세를 예측한다. 비례 제어의 작용으로 차체가 중심선에 접근할 때, 현재 위치 오차 $E(k)$가 여전히 0보다 크더라도 그 변화율 $\Delta E(k)$은 이미 음수가 된다. 이때 미분 항은 사전에 반대 방향의 제동 토크를 생성하여 총 제어량을 줄임으로써 저감쇠 시스템의 오버슈트(Overshoot)와 진동 현상을 억제한다. $K_d = 0.6$은 시스템 튜닝 후 결정된 미분 감쇠 계수이다. 이상적인 미분기는 고주파 잡음에 민감하지만, 본 시스템의 샘플링 주파수가 비교적 높고 오차 소스가 두 광량의 차이뿐이므로 추가적인 저역 통과 필터는 도입하지 않았다.
### 2.4 동적 적응형 기본 속도(Base Speed) 비선형 모델
전통적인 라인트래킹 로봇은 대부분 일정한 기본 속도를 사용한다. 그러나 직선과 곡선이 혼합된 복합 트랙에서는 경로 곡률에 따라 기본 속도를 동적으로 조정해야 한다. 본 프로젝트는 오차 절대값 기반의 적응형 속도 피드백 조절 모델을 도입한다:
$$BaseSpeed = 100 - |a-b| \times 0.6$$
이 방정식은 비선형 음의 피드백 매핑 함수 $f(|e|)$를 구축한다. 상수 $100$은 현재 공급 전압에서 섀시 모터에 허용되는 최대 PWM 듀티 사이클을 나타낸다. 직선 정상 상태에서 차체가 중앙에 위치하여 위치 오차가 작으면($|a-b| \approx 0$) 기본 속도는 상한 $100$에 가까워져 빠른 직선 주행이 가능하다. 곡선을 만나면 오차 절대값이 증가하고 시스템은 음의 피드백을 통해 기본 속도를 자동으로 낮추어 회전에 필요한 구심력을 줄이고 측면 미끄러짐 위험을 감소시킨다.
이 공식의 상수 항(100)은 초기 버전의 상수(80)와 다르다는 점에 주목할 필요가 있다. 여러 차례의 현장 테스트와 파라미터 튜닝을 통해 기본 속도 상한을 100으로 높이면 곡선 안정성을 희생하지 않으면서 직선 구간의 평균 주행 속도를 향상시킬 수 있었다. 오차 감쇠 계수 $0.6$은 속도 감소와 조향 요구 사이의 균형을 맞추도록 조정되었다.
### 2.5 완전 제어 법칙의 통합 수학적 표현 및 Python 시뮬레이션 검증
위의 두 핵심 공식을 결합하면 본 프로젝트에서 사용된 완전한 이산 시간 PD 제어 법칙을 얻을 수 있다:
$$\begin{aligned}
BaseSpeed(k) &= 100 - |E(k)| \times 0.6 \\
Turn(k) &= E(k) \times 0.8 + [E(k) - E(k-1)] \times 0.6 \\
LeftPWM(k) &= BaseSpeed(k) - Turn(k) \\
RightPWM(k) &= BaseSpeed(k) + Turn(k)
\end{aligned}$$
여기서 $E(k) = a(k) - b(k)$는 현재 샘플링 주기의 오차 신호이고, $E(k-1)$은 이전 주기의 이력 오차이다. 좌우 휠 PWM 명령은 기본 속도와 조향 보상의 선형 결합을 통해 얻어진다. $Turn > 0$일 때 왼쪽 바퀴는 감속하고 오른쪽 바퀴는 가속하여 좌회전을 구현하며, 반대의 경우 우회전을 구현한다.
이 제어 법칙의 수렴 특성을 검증하기 위해 Python 기반의 이산 시간 시뮬레이션 시스템을 구축했다. 이 시뮬레이션 시스템은 다음과 같은 물리적 요소를 모델링한다:
1. **원형 센서 탐지 모델**: 각 색상 센서의 탐지 영역은 직경 1.5 cm의 원형 영역으로 모델링된다. 이 원형 영역과 검은색 가이드 라인(폭 2.0 cm)의 중첩 면적을 수치 적분을 통해 계산하여 반사광 강도 판독값을 정확하게 계산한다$^{[1]}$.
2. **차동 구동 운동학**: EV3 표준 휠 기하학적 파라미터(윤거 12.0 cm, 휠 반경 2.8 cm)를 기반으로 PWM 명령을 전진 속도와 요 각속도로 매핑한다.
3. **트레일링 센서 배치**: 센서 축은 구동 휠 축에서 10.0 cm 앞쪽에 위치한다. 이 "트레일링" 구성은 레버 암 효과를 도입하며, 이는 진동 동역학적 거동의 원인 중 하나이다.
4. **가우시안 측정 잡음**: 표준 편차 0.3의 가우시안 백색 잡음이 센서 판독값에 중첩되어 실제 환경의 광학적 간섭을 시뮬레이션한다.
시뮬레이션 초기 조건은 다음과 같이 설정된다: 초기 요 각도 $+10^\circ$(오른쪽으로 기울어짐), 왼쪽 센서 판독값 $a=10$(검은색 라인 위에 완전히 덮임), 오른쪽 센서 판독값 $b=50$(검은색 라인 가장자리에 반쯤 덮임). 시뮬레이션 시간 간격 $\Delta t = 0.1$ s.
**그림 1: EV3 라인트래킹 로봇 — 이산 시간 PD 제어 시뮬레이션 결과**
그림 1은 네 가지 주요 물리량의 시간 영역 진화 곡선을 보여준다:
**패널 (a) — 센서 반사율 및 오차 신호**: 왼쪽 센서 $a(t)$(빨간색)와 오른쪽 센서 $b(t)$(파란색)의 시간에 따른 판독값. 초기 순간 $a=10$(완전 검정), $b=50$(반 검정 반 흰색), 오차 $e(t)=a-b=-40$. PD 제어기가 개입함에 따라 오차 신호는 약 5초 이내에 빠르게 0 부근으로 수렴한 후 0 주변에서 작은 변동을 보인다. 이러한 수렴 거동은 PD 제어 법칙의 정상 상태 추종 능력을 검증한다.
**패널 (b) — PD 제어 신호**: 기본 속도 $BaseSpeed(t)$(녹색)와 조향 보상 $Turn(t)$(빨간색)의 시간 영역 곡선. 초기 큰 오차로 인해 기본 속도는 $100 - 40 \times 0.6 = 76$으로 떨어지고, 조향 보상은 큰 음수 값($Turn \approx -40 \times 0.8 + (-40-0) \times 0.6 = -56$)을 생성하여 오른쪽 바퀴를 가속하고 왼쪽 바퀴를 감속시켜 왼쪽 보정 토크를 생성한다. 오차가 수렴함에 따라 기본 속도는 100에 가깝게 회복되고 조향 보상은 0에 접근하며 시스템은 정상 상태 직선 주행 모드로 진입한다.
**패널 (c) — 로봇 자세 및 진동 수렴**: 요 각도 $\theta(t)$(주황색), 횡방향 오프셋 $y(t)$(보라색) 및 요 각속도 $\omega(t)$(파란색)의 시간 영역 곡선. 이는 PD 제어기의 감쇠 특성을 검증하는 핵심 패널이다. 초기 $+10^\circ$의 요 각도는 PD 제어 하에서 전형적인 저감쇠 2차 시스템 응답 특성을 나타낸다 — 약 2-3회의 감쇠 진동 후 0으로 수렴한다. 횡방향 오프셋 $y(t)$도 진동 수렴 추세를 보이며 최종적으로 가이드 라인 중심 근처에서 안정화된다. 요 각속도 $\omega(t)$의 진폭은 시간이 지남에 따라 감소하여 시스템의 운동 에너지가 미분 감쇠 항에 의해 효과적으로 소산됨을 나타낸다.
**패널 (d) — 요 각도 진동 확대 보기(처음 10초)**: 이 패널은 각 이산 샘플링 순간의 요 각도를 산점도 형태로 표시하여 각 시간 단계에서 PD 제어기의 단계별 보정 과정을 명확히 보여준다. 이러한 "단계적" 보정 궤적은 이산 시간 제어 시스템의 전형적인 특징이다 — 제어기는 각 샘플링 주기에서 현재 오차에 따라 새로운 PWM 명령을 계산하여 로봇 자세를 점진적으로 목표에 접근시킨다.
**패널 (e) — 평면 궤적**: 2차원 평면에서 바퀴 축 중심의 궤적. 반투명 검은색 띠는 폭 2.0 cm의 가이드 라인을 나타낸다. 궤적 곡선은 로봇이 시작점(녹색 사각형)에서 출발한 후 S자형 경로를 통해 빠르게 가이드 라인으로 수렴한 다음 직선을 따라 안정적으로 종점(빨간색 사각형)까지 진행함을 보여준다. 궤적의 부드러움은 PD 제어기의 추종 정밀도를 직관적으로 반영한다.
이 시뮬레이션 결과는 본 프로젝트의 PD 제어 법칙이 초기 $+10^\circ$의 요 각도 오차를 약 5초 이내에 0으로 수렴시키고 정상 상태 오차를 $\pm 0.5^\circ$ 이내로 제어할 수 있음을 이론적으로 검증한다. 이 수렴 속도와 정밀도는 후속 현장 테스트의 이론적 기반을 제공한다.
## 3. 상위 경로 계획: 유한 상태 기계와 결정 트리 알고리즘
기계 학습 및 의사 결정 분석 이론에서 결정 트리(Decision Tree)는 객체 속성과 객체 값 간의 매핑 관계를 나타내는 특별한 트리 구조 예측 모델로, 조건부 확률을 계산하거나 판정 규칙을 설정하여 목표에 도달하기 위한 최적의 계획을 생성한다$^{[4]}$. 하위 수준의 PD 알고리즘이 기본 궤적 연속성을 보장하는 기반 위에서, 로봇은 복잡한 미로 토폴로지 및 특정 상호작용 작업을 처리하기 위한 고급 논리 능력을 갖추어야 한다. 본 프로젝트는 중첩 분기(Nested Switches)를 사용하여 상태 전이 기반의 결정적 결정 트리를 구축하여 논리의 엄밀성과 강건성을 보장한다.
실험에서 물류 처리와 관련된 전략을 명확히 하기 위해, 프로그램은 초기화 단계에서 간단한 무작위화 및 카운팅 변수를 도입한다: 총 2개의 통을 배치하며, 통의 위치는 4개의 후보 위치에서 1, 2, 3, 4로 번호가 매겨진다. 초기화 시 각각 집합 {1,2}와 {3,4}에서 하나씩 무작위로 선택하여 잡을 두 개의 통의 위치를 결정한다(두 통이 같은 쪽에 위치하는 고정 패턴 방지). 프로그램 실행 중 부울 변수 `HasBarrel`은 현재 통을 보유하고 있는지 여부를 나타내고, 정수 변수 `BarrelNum`(초기값 0)은 잡은 통의 개수를 기록하며 통을 잡을 때마다 `BarrelNum += 1`이 수행된다. 정수 변수 `CheckNum`(초기값 0)은 통과한 빨간색 체크포인트의 개수를 기록하며, 체크포인트를 통과할 때마다 해당 체크포인트의 소요 시간이 화면의 해당 줄에 출력된다.
### 3.1 부울 논리 기반 유한 상태 기계와 센서 블라인딩 방지
자동 물류 운반 작업에서 로봇은 초음파 센서를 사용하여 목표 통을 감지하고 파지를 실행한다. 파지 동작이 완료된 후 물체는 일반적으로 센서 앞에 남아 있어 초음파 거리 측정값이 지속적으로 트리거 조건을 충족시켜 반복 파지의 "센서 블라인딩" 문제를 유발할 수 있다. 이 문제를 해결하고 실험 요구사항인 두 통 배치 전략을 충족시키기 위해 본 프로젝트는 유한 상태 기계에 다음 변수를 도입한다: 부울 변수 `HasBarrel`(현재 통 보유 여부), 정수 카운터 `BarrelNum`(잡은 통 개수, 초기값 0), 정수 카운터 `CheckNum`(통과한 빨간색 체크포인트 개수, 초기값 0).
파지 논리의 트리거 조건은 여전히 초음파 거리를 기본으로 한다:
$$Trigger = (d_{ultrasonic} < 15) \land \neg HasBarrel$$ 파지 동작이 실행되고 성공적으로 확인되면 프로그램은 `HasBarrel = True` 및 `BarrelNum += 1`을 실행한다. 그룹 내 합의된 배치 전략에 따르면: 첫 번째로 잡은 통(`BarrelNum == 1`)은 이후 만나는 첫 번째 빨간색 체크포인트에 놓아야 하고, 두 번째로 잡은 통(`BarrelNum == 2`)은 종점까지 계속 운반한 후 내려놓는다. 따라서 체크포인트에 도달했을 때 통을 내려놓는 조건은 `HasBarrel == True && BarrelNum == 1`이다. `HasBarrel == True`이지만 `BarrelNum != 1`인 경우에는 통을 내려놓지 않고 회전 또는 해당 교차로 동작만 수행한다. 통을 내려놓은 후 `HasBarrel`은 False로 리셋된다. ### 3.2 유한 상태 기계 기반 교차로 결정 알고리즘 분기 트랙(T자형 또는 십자형 교차로)에 직면했을 때, 시스템은 경로 선택을 위해 유한 상태 기계 기반의 결정적 결정 트리를 채택한다. 이 결정 트리는 중첩 조건 분기를 통해 구현되며, 그 내부 논리는 정밀하게 테스트되고 검증될 수 있다. 구체적인 실행 흐름은 다음과 같다: 좌우 센서가 반사광 강도가 임계값 미만(< 15)임을 감지하면 시스템은 교차로 영역에 진입했을 가능성이 있다고 판단한다. 시스템은 먼저 프로브 검증을 수행한다: 오른쪽 센서가 트리거된 경우, 모터는 파워 30으로 0.55초 동안 전진하여 위치를 조정한 후 30/-30 파워로 0.3초 동안 우회전을 실행하고, 중간 센서가 검은색 라인을 감지할 때까지(반사광 강도 < 15) 이 차속을 유지한 후 최종적으로 모터를 정지하고 0.02초 동안 안정화를 기다린다. 왼쪽 센서가 트리거된 경우, 모터는 먼저 파워 30으로 0.5초 동안 전진한 후 -30/30 파워로 0.3초 동안 좌회전을 실행하고, 중간 센서가 검은색 라인을 감지할 때까지 이 차속을 유지한다. 좌우 센서가 모두 트리거되지 않았지만 중간 센서가 검은색 라인을 감지하면 시스템은 기본 PID 직진 논리로 진입한다. 중간 센서가 빨간색 마커를 감지하면 180도 회전 동작이 실행된다. ### 3.2.1 최종 버전 교차로 결정 및 물류 배치 논리 (구현 설명) 이 절은 보다 일반적인 결정 트리 설명과 최종 코드 간의 모호성을 피하기 위해 그룹 최종 프로그램의 구체적인 구현 세부사항을 설명한다. 핵심 사항은 다음과 같다(코드 구현이 우선함): 1. 초기화 단계에서 4개의 후보 위치(번호 1, 2, 3, 4) 중에서 두 개의 통 배치 위치를 무작위로 선택한다: 각각 집합 {1,2}와 {3,4}에서 하나씩 무작위로 선택하여 잡을 두 개의 통의 위치를 결정한다. 2. 사용되는 변수: 부울 `HasBarrel`(통 보유 여부), 정수 `BarrelNum`(통 파지 횟수, 초기 0), 정수 `CheckNum`(체크포인트 횟수, 초기 0). 파지 성공 시 `HasBarrel = True; BarrelNum += 1`을 실행한다. 3. 배치 전략: 첫 번째로 잡은 통(`BarrelNum == 1`)은 만나는 첫 번째 빨간색 체크포인트에서 내려놓고, 두 번째로 잡은 통(`BarrelNum == 2`)은 종점까지 운반하여 그곳에서 내려놓는다. 따라서 체크포인트에 도달했을 때 통 내려놓기를 트리거하는 조건은 `HasBarrel == True && BarrelNum == 1`이다. 내려놓은 후 `HasBarrel`은 `False`로 리셋된다. 4. 미로 주행 전략은 오른손 법칙을 채택한다: 우회전이 가능하면 우회전, 불가능하면 직진, 직진이 불가능하면 좌회전한다. 센서가 나란히 배치되어 좌우와 아래의 색상/반사도만 인식할 수 있으므로, 프로그램에서 다음과 같은 우선순위로 흐름이 처리된다: - 중간 센서가 녹색을 감지하면: 종점으로 판단하여 메인 루프를 종료하고 종점 절차를 실행한다. - 중간 센서가 빨간색을 감지하면: 체크포인트로 판단하여 `CheckNum += 1`을 실행하고 화면의 해당 줄에 해당 체크포인트의 소요 시간을 출력한다. `HasBarrel == True && BarrelNum == 1`이 충족되면 통을 내려놓고 회전하고, 그렇지 않으면 회전만 수행한다. - 그렇지 않고 오른쪽 센서의 반사도가 15 미만이면(검은색 라인 감지) 직접 우회전 논리를 실행한다. - 그렇지 않고 왼쪽 센서가 검은색 라인을 감지하면 먼저 작은 단계로 전진 프로브한 후 중간 센서를 다시 읽는다: 프로브 후 중간 센서가 검은색 라인을 감지하면 직진하고, 감지하지 못하면 좌회전한다. - 위 조건이 모두 트리거되지 않으면 기본 PD 라인트래킹 논리로 진입한다. 5. 코드에서 PD 라인트래킹 기본 파라미터는 다음과 같이 구현된다: $$BaseSpeed = 100 - |a-b| * 0.6$$ $$Turn = (a-b) * 0.8 + ((a-b) - c) * 0.6$$ 여기서 `a`와 `b`는 좌우 센서 판독값이고, `c`는 이전 주기의 오차 레지스터이다. 이 하위 절은 최종 버전 프로그램의 구현 설명을 제공한다. 본문의 다른 결정 트리 및 프로브 타이밍 설명은 일반적인 참고 자료이며, 실제 동작은 이 절에서 설명된 논리에 따라 결정된다. ### 3.3 종점 인식: 이종 센서 분리 및 소프트웨어 디바운싱 초기 테스트 버전에서 종점 판단 논리(검은색 종점 영역 감지)와 교차로 판단 논리(검은색 라인 감지)는 동일한 반사율 그레이스케일 특성을 사용했으며, 이는 주변광으로 인한 임계값 드리프트로 인해 오판을 유발할 수 있었다. 이 문제를 해결하기 위해 시스템은 종점 표지물을 녹색 스티커로 지정하고, 중앙에 위치한 세 번째 센서가 컬러 모드(Color Mode)를 사용하여 식별함으로써 내비게이션과 종점 판단을 센서 수준에서 분리했다. 또한 출발 구역의 녹색 표지로 인한 오작동을 방지하기 위해 타이머 제약 조건이 추가되었다: $$Condition_{End} = (\text{Color}_{Mid} == 3) \land (\text{Timer}_{Total} > 10s)$$
색상 판단이 통과된 후, 프로그램은 0.1초의 소프트웨어 디바운스(Software Debounce) 지연을 추가하여 안정적인 녹색 신호가 확보된 후에만 종점 정지를 트리거하도록 했다.
종점에 도달하면 화면에 각 체크포인트의 소요 시간, 총 소요 시간 및 방문한 체크포인트 개수가 순서대로 표시된다. 코드 구현에서는 `CheckNum`을 사용하여 출력 줄을 결정하고, 체크포인트를 통과할 때 해당 소요 시간을 즉시 기록한다.
그림 2는 위에서 설명한 유한 상태 기계와 결정 트리 논리를 구현한 LEGO EV3 그래픽 프로그래밍 환경의 완전한 프로그램 코드 스크린샷을 보여준다. 프로그램 소스 파일은 main.ev3이다.
**그림 2: EV3 그래픽 프로그램 소스 코드.** 프로그램은 유한 상태 기계 기반의 경로 계획 및 물류 운반 제어 로직을 구현하며, 초기화, 메인 루프(교차로 결정, 파지/배치, 종점 판단) 및 종료의 세 단계로 구성된다.
## 4. 임베디드 시스템 하위 수준 특성 및 연산 최적화
LEGO EV3의 메인 제어 펌웨어는 경량 Linux 운영체제 환경에서 실행된다. 그래픽 인터페이스는 기본적으로 하드웨어 추상화 계층(HAL)에 대한 래퍼 호출이다$^{[3]}$. 밀리초 수준의 실시간 응답이 필요한 폐루프 제어 시스템에서 부적절한 코드 구조는 시스템 수준의 리소스 문제를 유발할 수 있다. 본 프로그램은 이에 대한 소프트웨어 엔지니어링 수준의 최적화를 구현한다.
### 4.1 CPU 기아 방지 (CPU Starvation Avoidance)
메인 루프(While Loop)에서 개입 없이 고주파 명령 실행이 ARM 프로세서의 대부분의 클록 사이클을 점유하면 I/O 통신을 담당하는 하위 수준 폴링 데몬(Daemon)이 중단되는 "CPU 기아" 현상이 발생할 수 있다. 그 직접적인 결과는 센서 데이터 레지스터가 적시에 업데이트되지 않고 PID 제어기가 오래된 데이터를 읽어 모터 제어 이상을 초래하는 것이다. 이를 해결하기 위해 메인 루프 끝에 0.01초의 대기(Yield/Delay) 모듈을 삽입하여 프로세서의 스케줄링 타임 슬라이스(Time Slice)를 능동적으로 양보함으로써 하위 수준 I/O 프로세스가 센서 레지스터를 정상적으로 새로고침할 수 있도록 한다.
### 4.2 PWM 출력 모드 최적화 (Coast vs Brake)
모터 구동 모듈을 "지정 시간 동안 켜기" 모드로 설정하면 하드웨어 드라이버가 시간 임계값에 도달했을 때 강제로 전기 제동(모터 내부 권선 단락)을 트리거한다. 빈번한 제동은 차체에 고주파 떨림을 유발할 수 있다. 본 그룹의 구현에서는 지속적인 상시 켜짐(On) 모드를 채택하지 않았음에 유의해야 한다. 상시 켜짐 모드는 모터 구동 중에 메인 컨트롤러가 메인 루프로 적시에 돌아와 다른 로직(센서 판독, 상태 업데이트 및 의사 결정 등)을 처리하지 못하게 하여 시스템이 "멈추는" 위험이 있기 때문이다. 연속 출력과 스케줄링 가능성의 균형을 맞추기 위해 단시간 스텝 구동 전략을 채택했다: PD 라인트래킹은 0.1초를 주기로 하여 매번 모터를 0.1초만 구동(즉, 작은 스텝으로 전진)한 후 메인 루프로 돌아와 센서 판독 및 로직 판단을 수행한다. 이 방식은 빈번한 제동으로 인한 떨림 문제를 피하면서도 시스템이 다른 이벤트와 상태 변화에 적시에 응답할 수 있도록 보장한다.
### 4.3 프로세스 관리 및 종료 절차 (Process Management)
상태 피드백을 위해 오디오 파일을 빈번히 호출하는 프로그램 아키텍처에서 비정상적인 물리적 강제 종료는 하위 수준 오디오 데몬에 이상을 유발할 수 있다. 시스템은 종점 판단 분기 후 표준화된 종료 절차를 도입하여 정지 모듈을 통해 센서와 모터 포트의 안전한 전원 차단 및 백그라운드 스레드의 적절한 소멸을 보장함으로써 다회 연속 실행 환경에서의 시스템 안정성을 확보한다.
## 5. 실험 결과 및 시스템 성능 분석
설계된 "개선된 이산 PD 제어기 + 유한 상태 기계 결정 트리" 하이브리드 제어 아키텍처의 LEGO Mindstorms EV3 플랫폼에서의 실제 종합 성능을 검증하기 위해 테스트 필드에서 다회 성능 측정을 수행하고 기존 ON-OFF 스위치 제어기와 비교 분석했다.
### 5.1 실험 환경 및 트랙 특성
본 프로젝트의 테스트 트랙은 긴 직선 도로 구간과 순수 직각 코너(Right-angle Turns), T자형 교차로 및 십자 미로 교차로로 구성된다. 직각 코너는 궤적 방정식에서 도함수가 존재하지 않는 불연속 계단 신호에 해당한다. 이러한 계단 신호를 포함하는 트랙의 경우 순수 선형 PD 제어기만으로는 전체 트랙을 독립적으로 커버할 수 없으며, 하위 수준 디지털 PD 제어기와 유한 상태 기계 기반 결정 트리의 협력 처리가 필요하다.
그림 3은 트랙 레이아웃에 따라 그려진 그리드 맵을 보여준다. 검은색 영역은 가이드 경로를, 흰색 영역은 빈 공간을 나타내며, 시작점은 오른쪽 아래 영역에, 종점은 왼쪽 위 영역에 위치한다. 트랙은 긴 직선 구간, 직각 코너, T자형 교차로 및 십자 교차로 등 다양한 도로 조건을 포함한다.
**그림 3: 테스트 트랙 그리드 맵.**
### 5.2 직선 구간 동적 응답 및 정상 상태 오차 분석
직선 궤적 추종 테스트에서 ON-OFF 스위치 제어기를 사용한 로봇은 명백한 주기적 진동 현상을 보였다. 스위치 제어기는 센서의 이진화 결과에 따라 좌우로 방향만 조정하므로 차체가 가이드 라인 양쪽에서 반복적으로 흔들리며 평균 진행 속도가 낮았다.
이산 PD 제어기 도입 후 차체의 진동 진폭이 현저히 감소했다. 미분 보상 항(Derivative Term)은 오차 변화율에 따라 사전에 반대 방향의 감쇠 토크를 생성하여 오버슈트 현상을 억제한다. 식 (2.5)의 제어 법칙에 따라 기본 속도는 오차 절대값에 따라 적응적으로 조정된다: 직선 정상 상태에서 $|a-b| \approx 0$이면 기본 속도는 상한 100에 가까워지고, 편차가 발생하면 기본 속도가 자동으로 낮아져 회전에 필요한 구심력을 줄인다. 관련 문헌의 유사 하드웨어 조건에서의 비교 측정에 따르면, PD 제어 메커니즘 도입 후 직선 구간의 평균 진행 속도가 약 36% 향상되었다$^{[1]}$.
### 5.3 직각 코너의 결정 트리 제어 및 실행 성능
$90^\circ$ 직각 코너 테스트에서 ON-OFF 제어기 또는 순수 PID 제어기는 반사율의 계단 변화를 처리하지 못해 추종 지연 또는 트랙 이탈이 발생했다. 본 시스템은 유한 상태 기계 결정 트리를 사용하여 이러한 교차로를 처리한다. 구체적인 실행 흐름은 다음과 같다:
좌우 센서가 반사광 강도가 임계값 미만(< 15)임을 감지하면 시스템은 교차로 영역에 진입했을 가능성이 있다고 판단한다. 시스템은 먼저 프로브 검증을 수행한다: 오른쪽 센서가 트리거된 경우, 모터는 파워 30으로 0.55초 동안 전진한 후 30/-30 파워로 0.3초 동안 우회전을 실행하고, 중간 센서가 검은색 라인을 감지할 때까지(반사광 강도 < 15) 이 차속을 유지한 후 최종적으로 모터를 정지하고 0.02초 동안 안정화를 기다린다. 왼쪽 센서가 트리거된 경우, 모터는 먼저 파워 30으로 0.5초 동안 전진한 후 -30/30 파워로 0.3초 동안 좌회전을 실행하고, 중간 센서가 검은색 라인을 감지할 때까지 이 차속을 유지한다. 좌우 센서가 모두 트리거되지 않았지만 중간 센서가 검은색 라인을 감지하면 시스템은 기본 PID 직진 논리로 진입한다. 회전이 완료된 후 제어권은 PD 제어기로 반환되어 직선 추종을 계속한다. 이 프로세스는 유한 상태 기계의 상태 전이를 통해 직각 코너에 대한 결정적 제어를 구현한다. ### 5.4 종합 완주율 및 시스템 강건성 물류 운반 작업이 포함된 종합 테스트에서 시스템은 다음과 같은 특성을 보였다: 1. **CPU 기아 방지**: 메인 루프 끝에 0.01초 대기 모듈을 삽입하여 프로세서의 스케줄링 타임 슬라이스를 능동적으로 양보함으로써 하위 수준 I/O 프로세스가 센서 레지스터를 정상적으로 새로고침할 수 있도록 하여 CPU 리소스 독점으로 인한 센서 데이터 동결 문제를 방지한다. 2. **센서 블라인딩 방지**: 전역 부울 상태 변수 `HasBarrel`을 사용하여 유한 상태 기계를 구축한다. 초음파 센서의 파지 트리거 조건은 `(distance < 15cm) AND (NOT HasBarrel)`이다. 파지 완료 후 상태가 반전되어 이후 물체가 초음파 센서를 가려도 시스템이 파지 시퀀스를 반복 실행하지 않고 일반 라인트래킹 로직으로 진입한다. 3. **종점 인식**: 중간 색상 센서를 컬러 모드로 사용하여 녹색 스티커를 종점 표지로 식별한다. 0.1초 소프트웨어 디바운스와 타이머 제약 조건(Timer > 10s)을 결합하여 출발 구역의 녹색 표지와의 구분 및 종점 판단을 구현한다.
4. **모터 제어 최적화**: 연속 라인트래킹과 이벤트 응답 사이의 균형을 위해 본 그룹은 단시간 스텝 구동 전략을 채택했다: PD 라인트래킹은 0.1초를 기본 주기로 하여 매번 모터에 0.1초의 구동 명령만 발행(작은 스텝 전진)한 후 메인 루프로 돌아와 센서 판독 및 로직 판단을 수행한다. 이 방식은 모터를 지속적인 상시 켜짐(On) 모드로 설정할 경우 발생할 수 있는 메인 루프 차단(센서 및 상태 전환을 적시에 처리하지 못함) 위험을 피하면서도 빈번한 타이머 기반 제동으로 인한 기계적 떨림을 줄인다.
다회 테스트에서 시스템은 대부분의 경우 전체 트랙의 라인트래킹 및 물류 운반 작업을 완료할 수 있었다. 그러나 실행 중에도 센서 블라인딩, 색상 센서 오인식 등의 문제가 여전히 발생했다. 전반적으로 이러한 문제는 대부분 센서 하드웨어 특성 또는 환경(예: 조명) 변화에 기인한 것이며, 소프트웨어 로직은 다회 검증을 거쳐 강건하고 복구 가능한 것으로 판단되어 대부분의 테스트에서 설정된 작업을 성공적으로 완료했다.
### 5.5 전체 트랙 실측 결과
시스템의 실제 트랙에서의 완전한 운영 성능을 검증하기 위해 그림 3에 표시된 트랙에서 정방향과 역방향 두 방향으로 실측을 수행했다. 트랙에는 총 6개의 빨간색 스티커 체크포인트(180도 회전 및 통 내려놓기 작업 트리거)가 있으며, 각 방향에서 3개의 체크포인트를 통과한다.
#### 5.5.1 정방향 테스트 결과
로봇이 시작점에서 출발하여 가이드 경로를 따라 정방향으로 진행하며, 3개의 빨간색 체크포인트를 순서대로 통과하고 해당 회전 및 통 내려놓기 작업을 완료한 후 최종적으로 종점에 도착한다.
전체 실행 시간은 **54.92초**이며, **3개**의 체크포인트를 통과했다. 각 체크포인트 통과 소요 시간은 각각 **18.43초, 29.13초, 41.81초**이다.
#### 5.5.2 역방향 테스트 결과
로봇이 종점 구역에서 출발하여 가이드 경로를 따라 역방향으로 진행하며, 나머지 3개의 빨간색 체크포인트를 순서대로 통과하고 해당 회전 및 통 내려놓기 작업을 완료한 후 최종적으로 시작점 구역에 도착한다.
전체 실행 시간은 **51.34초**이며, **3개**의 체크포인트를 통과했다. 각 체크포인트 통과 소요 시간은 각각 **3.066초, 24.54초, 39.42초**이다.
#### 5.5.3 실험 비디오
다음 비디오는 정방향과 역방향 두 방향의 전체 실행 과정을 기록한다.
**정방향 실행 비디오:**
https://www.youtube.com/watch?v=aTVxu1YXmjs
**비디오 1: 정방향 전체 트랙 실행 기록**
**역방향 실행 비디오:**
https://www.youtube.com/watch?v=Uk0Ih7O7AaE
**비디오 2: 역방향 전체 트랙 실행 기록**
#### 5.5.4 로봇 하드웨어 설계
본 시스템에서 사용된 LEGO EV3 로봇 하드웨어 설계는 그림 4와 같다. 로봇은 이륜 차동 구동 섀시를 채택하며, 전면에 두 개의 반사광 센서를 장착하여 라인트래킹을 수행하고, 중간에 색상 센서를 장착하여 종점 인식 및 빨간색 마커 감지를 수행하며, 전방에 초음파 센서를 장착하여 물체 거리 측정을 수행한다.
**그림 4: LEGO EV3 라인트래킹 및 물류 운반 로봇 하드웨어 플랫폼**
## 6. 결론
본 프로젝트는 이산 PD 제어 알고리즘, 부울 논리 및 유한 상태 기계를 결합하여 LEGO EV3 플랫폼 기반의 자율 라인트래킹 및 물류 운반 시스템을 구축했다. 하위 수준의 운동 제어에서는 이산화된 PD 제어기를 통해 가이드 라인에 대한 적응형 궤적 추종을 구현했다. 상위 경로 계획에서는 유한 상태 기계를 통해 다중 교차로 주행, 물체 파지 및 배치, 종점 인식 등의 작업에 대한 결정적 제어를 구현했다. 또한 임베디드 시스템의 CPU 기아, 모터 제동 떨림 등의 문제에 대한 하위 수준 최적화를 수행했다. 실험 결과는 이 시스템이 직각 코너, T자형 교차로 및 물류 운반 작업을 포함하는 트랙을 안정적으로 완주할 수 있음을 보여주며, LEGO EV3 플랫폼의 고급 개발을 위한 참고 자료를 제공한다.
## 참고 문헌
[1] A. Stephan, N. Karthick Pugalum Perumal, M. Shivram Kumar, C. Akash, L. Varatharajan and M. Sivapalanirajan, "Performance Analysis of LEGO Mindstorm EV3 Robot with PID Controller for Trajectory Tracking Application," 2023 7th International Conference on Intelligent Computing and Control Systems (ICICCS), Madurai, India, 2023, pp. 1782-1787, doi: 10.1109/ICICCS56967.2023.10142757.
[2] Wikipedia contributors. (2026, May 25). PID controller. In Wikipedia, The Free Encyclopedia. Retrieved 05:44, May 27, 2026, from https://en.wikipedia.org/w/index.php?title=PID_controller&oldid=1356013976
[3] Wikipedia contributors. (2026, May 18). Lego Mindstorms EV3. In Wikipedia, The Free Encyclopedia. Retrieved 05:45, May 27, 2026, from https://en.wikipedia.org/w/index.php?title=Lego_Mindstorms_EV3&oldid=1354810351
[4] Wikipedia contributors. (2026, April 14). Decision tree. In Wikipedia, The Free Encyclopedia. Retrieved 05:49, May 27, 2026, from https://en.wikipedia.org/w/index.php?title=Decision_tree&oldid=1348906127
[5] Wikipedia contributors. (2026, May 24). Finite-state machine. In Wikipedia, The Free Encyclopedia. Retrieved 05:50, May 27, 2026, from https://en.wikipedia.org/w/index.php?title=Finite-state_machine&oldid=1355883596

Comments NOTHING