제어 품질
제어 안정성 결과
얼굴 검출보다 좌표 필터링, 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, 시연 영상이 제어 개선 결과를 보여줍니다.
좌표에서 서보까지
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 수치는 캡스톤 최종 발표자료와 프로젝트 저장소에 기록된 측정값입니다.