자작 로봇이나 산업 설비에 실내 위치추적 기능을 넣고 싶을 때, 처음부터 완제품 RTLS 시스템을 통째로 구축하는 것은 비효율적입니다. 실제 정확도가 내 서비스에 충분한지, 통신 구조가 내 시스템과 맞는지부터 작은 규모로 검증하는 것이 순서입니다. 이 글에서는 GrowSpace Q1 개발자 태그를 라즈베리파이에 연결해서 실시간 위치 좌표(X, Y, Z)를 받아오는 과정을 실제 배선도와 코드로 정리했습니다.
준비물
- GrowSpace Q1 개발자 태그 1개 이상
- UWB 앵커 3개 이상 (삼변측량 원리상 최소 3개 필요, 아래에서 설명)
- Raspberry Pi 4 Model B, USB-C 전원 어댑터(5V 3A 이상)
- 점퍼 케이블 (TX, RX, GND, 3.3V)
- Python 3.9 이상 + pyserial 패키지
1단계 — 앵커는 몇 개, 어떻게 배치해야 할까
UWB 실내 위치측위는 삼변측량(Trilateration) 방식으로 동작합니다. 태그가 신호를 보내면 주변 앵커들이 신호의 왕복 시간(TOF)으로 거리를 측정하고, 3개 이상의 앵커에서 측정된 거리가 겹치는 지점을 태그의 위치로 계산합니다. 그래서 앵커는 최소 3개가 필요합니다 — 2개 이하로는 위치 계산 자체가 불가능합니다.
실무에서 자주 놓치는 부분은 높이(Z축) 정확도입니다. 앵커를 전부 같은 높이(예: 천장)에 설치하면, 태그가 그 아래위 1m 안에서 움직여도 앵커와의 거리가 거의 같게 측정되어 Z축을 구분하지 못합니다. 아래 실측 영상은 태그를 던지고 받으면서 Z축이 실제로 어떻게 잡히는지 보여줍니다.
Z축 정확도를 확보하려면 앵커를 서로 다른 높이에 분산 설치해야 합니다 — 예를 들어 천장에 2개, 바닥 근처에 2개를 교차 배치하는 식입니다. 공간이 40m×20m 이상으로 넓다면 네 귀퉁이만으로는 부족하므로 벽면 중간이나 공간 중앙에 보조 앵커를 2~3개 추가하고, 앵커 간 거리는 15~20m 이내로 유지하는 것이 좋습니다.
설치 전 체크리스트: 앵커 3개 이상 설치했는가, 각 앵커의 (X,Y,Z) 좌표를 정확히 입력했는가, 앵커 간 거리가 2m 이상 확보되었는가, 서로 다른 높이에 분산되었는가.
2단계 — 라즈베리파이 시리얼 포트 활성화
터미널에서 sudo raspi-config를 실행하고 Interface Options → Serial Port로 들어가 “Login shell via serial”은 No, “Enable serial port hardware”는 Yes로 설정한 뒤 재부팅합니다.
3단계 — 핀 연결
Q1 개발자 태그에는 좌우에 전기적으로 다른 시리얼 포트가 있습니다. 라즈베리파이는 반드시 좌측 3.3V 커넥터를 사용해야 합니다 — 5V 포트를 잘못 연결하면 라즈베리파이 GPIO가 손상될 수 있습니다.
- 태그 TX → 라즈베리파이 10번(RXD/GPIO15)
- 태그 RX → 라즈베리파이 8번(TXD/GPIO14)
- 태그 3.3V → 라즈베리파이 1번
- 태그 GND → 라즈베리파이 6번
TX와 RX는 반드시 교차 연결합니다 (태그 TX → 라즈베리파이 RX, 태그 RX → 라즈베리파이 TX).
4단계 — Python으로 위치 데이터 받기
pyserial을 설치한 뒤(pip install pyserial), 아래 코드로 태그가 보내는 위치 데이터를 실시간으로 확인할 수 있습니다.
import serial
import time
PORT = "/dev/serial0"
BAUD = 115200
ser = serial.Serial(PORT, BAUD, timeout=1)
time.sleep(2)
ser.write(b"lep\r")
while True:
line = ser.readline().decode(errors="ignore").strip()
if line:
print(line)실행 후 프롬프트에 lep을 입력하면 위치 값만, lec을 입력하면 거리 정보까지 포함해서 받을 수 있습니다. 실제 출력은 이런 형태입니다.
POS,-3.41,9.54,-1.53,74
앞에서부터 X(m), Y(m), Z(높이, m), 그리고 마지막 숫자는 품질 지수(QF, 0~100)입니다. SDK 설치나 별도 빌드 과정 없이, USB 케이블 하나로 이 값을 바로 받아 내 로봇 제어 코드나 모니터링 시스템에 연결할 수 있다는 것이 Q1의 핵심입니다.

TWR로 시작해도 될까? TDoA는 언제 필요할까
여기까지 실습한 방식은 TWR(Time of Flight) 기반입니다. TWR은 태그와 앵커가 신호를 주고받는 구조라 구성이 단순하고 진입장벽이 낮아서, Q1 크리에이터 키트처럼 합리적인 가격(99만 5천 원)으로 지금 바로 PoC를 시작할 수 있습니다. 개인 연구, 로봇 프로토타입, 대학·연구기관의 실험용으로는 TWR 기반 Q1로 충분한 경우가 대부분입니다.
반면 태그 수가 아주 많거나 배터리 교체 주기를 최대한 늘려야 하는 대규모 산업 현장이라면 TDoA(Time Difference of Arrival) 방식이 유리합니다. TDoA는 태그가 신호를 송신만 하면 되므로 배터리 소모가 줄고 태그 하나당 처리 부담이 낮아 대규모 동시 추적에 적합합니다. 다만 TDoA 인프라는 시간 동기화된 앵커망을 갖춰야 해서 통상 1,000만 원 이상이 드는 산업급 구축 규모입니다.
그래서 실무적으로는 순서가 중요합니다. 먼저 Q1(TWR)으로 저렴하게 PoC를 검증하고, 실제 현장 규모와 정확도 요구사항이 확정된 뒤 TDoA 기반 구축으로 단계적으로 확장하는 것을 권장합니다. GrowSpace는 두 방식을 모두 지원하므로, PoC 결과를 그대로 가지고 다음 단계를 상담할 수 있습니다.
다음 단계
이 실습에 사용한 Q1 크리에이터 키트는 여기서 바로 구매할 수 있습니다. TWR과 TDoA 방식을 더 자세히 비교하려면 TWR vs TDoA 비교 글을, 산업 현장 구축까지 고려 중이라면 UWB-RTLS 구축 서비스를 확인해보세요.

