스마트폰을 RTK correction 라우터로 만드는 Android 앱. NTRIP caster 의 RTCM3 보정신호를 USB-C OTG serial 로 NovAtel / u-blox 수신기에 주입해 RTK fix 를 얻는다. 폰이 모바일 인터넷 회선 + USB 브리지 역할을 한다. phone-sensor-stream(PhoneLoggingSystem) 파생.
NTRIP caster ──RTCM3/TCP──▶ [폰 NTRIP client] ──▶ [USB serial TX] ──▶ 수신기 RX ──▶ RTK fix
▲
수신기 NMEA GGA ──(역방향, 선택: VRS)──────────────────────┘ ──▶ caster 로 위치 업로드
- Android USB Host (OTG):
usb-serial-for-android(mik3y) — CDC-ACM / FTDI / CP210x / CH340. NovAtel OEM7 USB(CDC), u-blox(CDC/FTDI) 인식. - NTRIP client: v1.0/v2.0, HTTP-like 핸드셰이크, Basic auth, mountpoint, GGA 주기 업로드.
- RTCM3 relay: caster byte stream 을 serial 로 그대로 전달(passthrough). 0xD3 프레임 검증은 옵션.
- 상태 모니터: NTRIP 연결 / RTCM byte-rate / serial 연결 / (NMEA 역파싱 시) fix 상태.
| M | 목표 | 완료기준(정량) |
|---|---|---|
| M1 | USB serial 연결 | 수신기 인식 + baud 설정 + byte TX/RX echo 확인 |
| M2 | NTRIP client | caster 접속 + RTCM3 수신, byte-rate > 0 표시 |
| M3 | 브리지 | NTRIP→serial 주입으로 NovAtel·u-blox 각각 RTK FIX 달성 |
| M4 | 안정화 | GGA(VRS) 역방향 + 상태 UI + 자동 재연결 |
| M5 | 운영 | 수신기 프로파일 다중 + 세션 로깅 |
플랫폼별로 본다. prebuilt 는 GitHub Releases 에서 받는다.
헤드리스 CLI 와 ROS /rtcm 모드는 Linux 전용.
- 받기: Releases 의
app-release.apk(개발 빌드는./gradlew assembleDebug). - 설치: 폰으로 apk 옮겨 설치(설정에서 "알 수 없는 출처/이 출처 허용").
- 실행: NTRIP 설정(host/port/mount/auth) → USB-OTG 로 수신기 연결 → baud 선택 → START.
- 헤드리스/CLI/ROS 모드는 없음(데스크톱 전용).
받아서 설치:
sudo apt install ./rtk-router_<버전>_amd64.deb # 의존성 자동 (dpkg -i 후 apt -f install 도 가능).deb는 설치 패키지다../*.deb직접 실행 시 셸이 아카이브를 파싱해syntax error ... 'newline'/`!<arch>'에러 → 반드시 install 명령./opt/rtk-router/에 설치,/usr/local/bin/rtk-router(+rtk-router-cli) symlink 자동(제거 시 정리).
소스에서 빌드해 설치(서버/헤드리스, Releases 없이). JDK 17 만 있으면 됨(없으면 sudo 없이 홈에 받음):
git clone https://github.com/Onlyti/RTK_Router_App.git rtk-router && cd rtk-router
if ! ~/.jdks/jdk-17/bin/javac -version 2>/dev/null; then
mkdir -p ~/.jdks && ( cd ~/.jdks &&
curl -fsSL -o jdk17.tgz "https://api.adoptium.net/v3/binary/latest/17/ga/linux/x64/jdk/hotspot/normal/eclipse" &&
tar xzf jdk17.tgz && mv jdk-17* jdk-17 && rm jdk17.tgz )
fi
JAVA_HOME=~/.jdks/jdk-17 ./gradlew :desktopApp:packageReleaseDeb \
-Porg.gradle.java.installations.paths=$HOME/.jdks/jdk-17 --no-daemon
sudo apt install -y ./desktopApp/build/compose/binaries/main-release/deb/rtk-router_*_amd64.deb실행:
- GUI: 앱 메뉴 "RTK Router" 또는 터미널
rtk-router. - 헤드리스(서버):
rtk-router-cli— GUI 가 저장한~/.config/rtk-router/settings.json을 읽어 실행 (-c <path>로 지정,--help). 설정 JSON 은 GUI 로 한번 만들어 복사하거나 직접 작성. - ROS
/rtcm (u-blox)모드: START 시 번들 rospy 노드를 띄워 RTCM3 를rtcm_msgs/Message(/rtcm)로 떠 있는 ROS master 에 publish(ublox_gps→ RTK fix). ROS source 된 환경에서 실행,rtcm_msgs없으면 자동 설치. 상세·검증: ros/README.md.
시리얼 권한(/dev/tty*): 앱 내 pkexec/sudo 또는 dialout 그룹(sudo usermod -aG dialout $USER).
제거: sudo apt remove rtk-router.
- 받기: Releases 의
rtk-router-<버전>.msi. - 설치:
.msi실행 → 설치 마법사(단축아이콘 체크박스 모두 체크 권장). - 실행: 시작메뉴 "RTK Router" 또는
C:\Program Files\rtk-router\rtk-router.exe. - 시리얼: USB-UART / u-blox CDC 드라이버 설치 후 장치관리자에서
COM*번호 확인. 별도 권한 불필요.- ROS 모드·헤드리스 CLI 없음(Linux 전용).
플랫폼 상세(Windows 단축아이콘 트러블슈팅·디바이스 포트/baud): desktopApp/README.md.
- Android APK:
./gradlew assembleDebug(산출물app/build/outputs/apk/debug/). - Desktop dev 실행:
./gradlew :desktopApp:run(JDK 17). - 로컬 패키지:
./gradlew :desktopApp:packageReleaseDeb(Linux) /packageReleaseMsi(Windows). - 릴리즈: 태그
v*push → GitHub Release 에 APK/AAB +.deb+.msi자동 첨부.
- phone-sensor-stream: 같은 Kotlin/Compose 스택, USB/GNSS(gnsstest) 코드 재사용 후보.
- NovAtel: RTKASSIST / RTCM 입력 포트 문서. u-blox: u-center, UBX-CFG.