본문으로 이동
Kim Jongwon
Projects

제어 안정성 · 4인 팀 capstone · 2025.03 - 2025.11

Face-Tracking Robot Arm Camera System

OpenCV + Arduino serial bridge + servo control

vision-to-servo 제어 안정성을 팀 프로젝트에서 정량 지표로 개선했습니다.

FRT

1.8s

얼굴 재인식 시간

IFR

83%

이동 중 추적 안정성

ICR

82%

정지 안정성

Python, Arduino, 서보 제어로 구성된 얼굴 추적 로봇팔 제어 다이어그램
Vision-to-servo 제어 다이어그램

제어 품질

제어 안정성 결과

얼굴 검출보다 좌표 필터링, serial command, servo response를 연결해 안정적으로 따라가고 멈추는 제어 품질이 핵심이었습니다.

작업 파트

  • 4인 팀 팀장으로 일정 조율, 역할 분담, 최종 발표를 이끌었습니다.
  • 로봇팔 제어 코드 연동, Python-Arduino serial bridge, motor control stability 개선을 주도했습니다.
  • 좌표 노이즈, serial command, servo response가 맞물리는 구간에서 필터와 제어 파라미터를 반복 조정했습니다.

핵심 결과

  • 정보기술대학장 장려상 수상 프로젝트
  • FRT 1.8초 이내, IFR 15px 이하 프레임 비율 83% 이상, ICR 반지름 33px 원 내부 좌표 비율 82% 이상으로 최종 발표
  • DNN 좌표 노이즈와 servo jitter 개선을 위해 control redesign 수행

제어 측정

제어 지표와 시연

하드웨어, control flow, FRT/IFR/ICR, 시연 영상이 제어 개선 결과를 보여줍니다.

얼굴 추적 기반 촬영 보조 로봇팔 최종 하드웨어
최종 로봇팔 하드웨어
Python, Arduino, 서보 제어로 구성된 제어 다이어그램
제어 다이어그램
OpenCV 영상처리와 추적 소프트웨어 구조
소프트웨어 처리 구조
FRT 얼굴 재인식 시간 지표 요약
FRT 재인식 시간 지표
IFR 이동 중 추적 안정성 지표 요약
IFR 이동 안정성 지표
ICR 정지 안정성 지표 요약
ICR 정지 안정성 지표
최종 시연 영상
정보기술대학장 장려상 수상 이미지
장려상 수상 이미지

좌표에서 서보까지

Vision-to-servo 제어

얼굴 좌표가 serial command와 servo movement로 바뀌는 구간을 설명합니다.

  • OpenCV face detection/tracking 결과를 Python control loop에서 필터링한 뒤 Arduino serial command로 변환합니다.
  • Arduino/PCA9685/servo motor가 명령을 받아 camera arm movement를 수행하도록 software와 hardware 제어를 통합했습니다.
  • OneEuro filter, proportional control, Soft Deadzone, EMA, Adaptive Alpha로 motor jitter와 tracking response를 단계적으로 개선했습니다.
  • FRT, IFR, ICR 지표로 얼굴 재인식 시간, 이동 중 안정성, 정지 안정성을 정량적으로 측정했습니다.
PythonOpenCVArduinoSerial CommunicationServo Control

serial bridge

Serial 연결 코드

프로젝트의 핵심 구현 지점입니다.

Python-Arduino serial bridge 코드

src/python/main.py

try:
    # motor_1 ~ motor_7 값 전송
    vals = [motor_cmds.get(f"motor_{i}", 0) for i in range(1, 8)]
    message = ','.join(map(str, vals)) + '\n'

    ser.write(message.encode('utf-8'))
    serial_health["total_sent"] += 1
    serial_health["last_success_time"] = time.time()
    serial_health["consecutive_errors"] = 0
    debug_counters["serial_sent"] += 1

    debug_log(f"시리얼 전송 #{debug_counters['serial_sent']}: {message.strip()}", "DETAIL")

측정 결과

제어 안정성

제어 통합, serial bridge, motor stability 개선을 정량 지표와 시연 화면으로 검증했습니다.

지표와 시연

  • Python-Arduino serial bridge, motor stability 개선, 정량 지표 측정을 팀장 주도로 진행했습니다.
  • FRT, IFR, ICR 수치는 캡스톤 최종 발표자료와 프로젝트 저장소에 기록된 측정값입니다.