DR (Drawing Robot) Android 앱
전시·렌탈·판매 현장에서 PC 기반 프로그램으로만 구동되던 드로잉 로봇(DR)을 Android 앱으로 전환한 프로젝트입니다. 단순 포팅이 아니라, OpenCV 이미지 변환·선 추출 로직만 참고해 벡터화 파이프라인·로봇 제어 프로토콜·현장 운영 기능을 Android 환경에 맞게 새로 설계했습니다. 현장에서 코드 수정 없이 장비 편차에 대응할 수 있도록 주요 좌표·OpenCV 파라미터를 런타임 튜닝 가능하게 파라미터화하고, 종이 평면 기울기를 로봇 제어 시퀀스에서 자동 측정해 보정하는 자동 캘리브레이션을 추가했습니다.
- •기간: 2024년 전환 → 2025년까지 현장 운영·고도화
- •플랫폼: Android (Java + NDK C/C++)
- •전환 대상: PC 기반 DR 제어 프로그램 → Android 앱
담당 역할
기존 PC 코드의 Android 이식을 시작점으로, 그림 품질과 작업 속도, 현장 운영성을 함께 개선하는 방향으로 구조를 정리했습니다. 무거운 이미지 연산은 NDK로 오프로드하고, 현장 변수(설치 위치·종이 위치·로봇 원점·조명)는 관리자 모드 파라미터화 + 자동 캘리브레이션으로 흡수하도록 설계했습니다.
- •OpenCV + NDK 이미지 전처리 / 래스터 → SVG 벡터화 파이프라인
- •two-line(외곽선) · one-line(한붓그리기) 두 가지 드로잉 알고리즘
- •TCP Socket 기반 로봇 제어 프로토콜 및 home 복귀 종료 판정
- •종이 평면 자동 캘리브레이션(AUTO_CAL) — 3점 측정 기반 사용자 좌표계 보정
- •관리자 모드 — OpenCV·로봇 파라미터 현장 튜닝 UI
- •작업 이력 SQLite + 통계, 파일 lifecycle 관리
- •5개국어 다국어, 음성 안내(TTS), 로고 오버레이, 퍼포먼스 동작 등 운영·연출 기능
기술 스택
| 분류 | 기술 |
| 플랫폼 | Android (Java), Android SDK, AppCompat / Material |
| 네이티브 처리 | OpenCV, NDK (C/C++), JNI, ndk-build / Android.mk |
| 벡터화 | Potrace (C), AndroidSVG, Apache Batik |
| 로봇 통신 | TCP Socket (raw), Gson (명령 JSON 직렬화) |
| 저장 / 이력 | SQLite (SQLiteOpenHelper), SharedPreferences, Apache Commons IO |
| 부가 기능 | RecyclerView, Android TextToSpeech(음성 안내), Camera 줌 제스처 |
| 빌드 | Gradle, AGP 8.x, CMake / ndk-build |
| 형상관리 | Git (기능별 브랜치 운영) |
핵심 기능
모바일 앱 기반 DR 제어
PC 의존 구동을 Android 단말 중심으로 전환했습니다. 전면 카메라 프리뷰(더블탭 줌 지원), 카운트다운 촬영, 갤러리 파일 선택, SVG 변환·미리보기, 드로잉 실행, 결과 확인까지 모든 흐름을 한 앱 안에서 처리합니다. 운영자 전용 진입은 화면에 노출하지 않고, 로고 연속 터치·버전 텍스트 탭 등 숨김 제스처로 갤러리·관리자 모드를 열도록 했습니다.
이미지 전처리 및 SVG 벡터화
핵심 이미지 연산을 NDK(appmain.cpp)로 오프로드했습니다. ROI 크롭(좌우 35%·하단 30% 절삭) → Grayscale → 해상도 축소 → GaussianBlur → Canny 엣지 추출 → 외곽 1px 라인 제거 → 반전 순으로 스케치 라인을 만들고, Potrace로 path 기반 SVG로 벡터화합니다. Bezier 곡선 근사와 거리 기반 포인트 필터링으로 선 떨림·중복 선·경로 복잡도를 줄여 로봇 드로잉 품질을 높였습니다.
두 가지 드로잉 모드 — 외곽선 / 한붓그리기
용도에 따라 two-line(Potrace 외곽선 추종)과 one-line(한붓그리기) 모드를 관리자 모드에서 선택할 수 있습니다. 한붓그리기는 검은 픽셀을 최근접 이웃(greedy nearest-neighbor) 순서로 이어 펜을 거의 떼지 않고 한 번에 그려내는 모드로, 외곽선 모드와는 다른 결의 결과물을 제공합니다. 경로 샘플링·짧은 path 필터링·pen-up 분리로 두 모드 모두 품질 저하 없이 처리 시간을 단축했습니다.
종이 평면 자동 캘리브레이션 (AUTO_CAL)
현장마다 종이가 놓인 평면이 미세하게 기울어 펜 압력·선 굵기가 달라지는 문제를, 앱에서 로봇을 순차 제어해 자동 측정·보정하도록 만들었습니다. 작업면의 3점을 찍어 TCP 좌표를 측정하고, 세 점으로 평면의 법선 벡터를 계산해 기울기 보정각(Ry·Rz)을 구한 뒤 사용자 좌표계(DR_1)를 갱신합니다. 기존에 사람이 수동으로 맞추던 캘리브레이션을 자동화해 현장 셋업 시간을 줄였습니다.
관리자 모드 — 현장 파라미터 튜닝
버전 텍스트 연속 탭 + 비밀번호로 진입하는 관리자 화면에서 현장 장비 편차에 대응합니다. OpenCV 파라미터(Canny min/max, Blur 커널)는 Seekbar로, 로봇 home joint 6축 값·드로잉 영역(±0.05~±10 단위 미세조정)은 입력 필드로 즉시 튜닝·저장(SharedPreferences)합니다. 드로잉 모드 전환, 로고 선택, 퍼포먼스 포즈 등록, 기간별 작업 통계 조회도 이 화면에서 처리합니다.
눈 / 동공 드로잉
Haar Cascade로 얼굴·눈을 검출한 뒤 동공을 별도 렌더링해 인물 결과물의 표정·생동감을 살립니다. 일반 스케치에 동공을 합쳐 그리는 모드와 흰 배경에 눈만 그리는 모드(ConvertOnlyEye)를 토글로 제공하고, 일반 SVG와 eye SVG를 병합해 한 번의 드로잉 시퀀스로 처리합니다.
로고 오버레이 · 퍼포먼스 연출
전시·납품처 브랜딩을 위해 커스텀 SVG 로고를 그림에 합쳐 함께 그릴 수 있고, 로고 위치는 미리보기 화면에서 드래그로 조정합니다(CustomSvgView). 또한 드로잉 시작 전/후에 로봇이 인사 등 퍼포먼스 포즈 시퀀스를 수행하도록 등록할 수 있어(관람객 호응용), 그림 완성 시 한국어 음성 안내(TTS)까지 함께 제공합니다.
작업 이력·통계 및 파일 lifecycle
촬영 파일은 Capture → Complete 폴더로 이동하며 관리되고, 날짜 기반 정렬·당일 외 오래된 파일 자동 정리를 수행합니다. 드로잉 완료 건은 SQLite 이력 DB(`draw_history`)에 기록해, 관리자 화면에서 오늘 그린 그림 수·기간별 작업 수를 조회할 수 있습니다.
다국어 지원
res/xml/language.xml에 한국어·영어·베트남어·일본어·중국어 5개국어 텍스트를 관리하고, 런타임에 버튼 라벨·국기 아이콘·광고 이미지까지 동기화합니다. 선택 언어는 SharedPreferences에 영속화되어, 전시·렌탈 환경에서 운영자와 관람객 언어에 유연하게 대응합니다.
성과
전환 전 운영 한계
- •초기(2023~2024년 초) DR은 PC 기반 구동 — 매번 별도 PC·카메라 세팅과 장비 구성을 챙겨야 하는 부담이 커, 전시 출전이 2회에 그침
- •그 2회마저 준비 부담 탓에 렌탈·판매·상시 운영으로는 이어지지 못함
전환 후 성과
- •DR을 Android 앱으로 전환해 모바일 단말에서 직접 구동 가능
- •그림 품질 개선과 작업 시간 단축(약 4~5분 → 3분대)을 동시에 달성
- •좌표·OpenCV 파라미터 전면 파라미터화와 자동 캘리브레이션으로, 납품처마다 코드 수정 없이 현장 셋업
- •파일 관리·작업 통계·다국어·로고·퍼포먼스 등 운영/연출 기능으로 현장 대응성과 전시 완성도 확보
- •PC 기반 구동 때 제한적이던 출고가, 모바일 단말 구동 이후 전시·교육 현장 렌탈/납품으로 꾸준히 이어짐 (아래 실적 참고)
- •정규 제품 라인업으로 자리매김 — 회사 홈페이지에 드로잉 로봇 전용 탭이 별도 개설될 만큼 상시 운영 제품으로 정착
렌탈 · 납품 실적
앱 전환 이후 전시·교육 현장을 중심으로 렌탈/납품이 꾸준히 이어졌습니다.
- •2024년: 11회
- •2025년: 14회
- •2026년: 현재까지도 지속 출고 중
2025년 11월경부터는 후임 담당자가 이어받아 AI 기반 이미지 변환 등 신규 기능을 추가 개발하며 제품을 고도화하고 있습니다. 본 문서가 정리하는 범위는 PC → Android 전환부터 현장 운영 기능 구현까지입니다.

