실내에서 움직이는 로봇은 GPS 신호를 받지 못합니다. 천장과 철골이 위성 신호를 막기 때문입니다. 그래서 AMR이나 AGV를 개발할 때는 처음부터 다른 방식의 좌표 체계를 준비해야 합니다.
UWB 로봇 위치추적이란, UWB 앵커와 로봇에 부착한 태그 사이의 거리를 재서 위치를 계산하는 방식입니다. 그 좌표를 로봇의 제어 소프트웨어에 그대로 공급합니다. 앵커를 공간에 고정 설치하고 태그를 로봇에 얹으면, 로봇이 어디에 있는지를 초 단위가 아니라 십분의 일 초 단위로 알 수 있습니다.
구현 순서는 크게 네 단계입니다. 공간에 앵커 3개 이상을 설치하고, 로봇 본체에 태그를 붙이고, 좌표를 리스너나 게이트웨이로 받고, 그 값을 로봇의 온보드 컴퓨터에서 읽어 주행 로직에 반영하는 순서입니다.
앵커는 왜 3개부터 시작해야 하나
위치 계산의 기본 원리는 삼변측량입니다. 앵커 하나로는 거리만 알 수 있고, 위치는 앵커가 최소 3개일 때부터 평면 좌표로 계산됩니다. 높이까지 구분하려면 4개가 필요합니다.
로봇은 대개 바닥 한 층에서만 움직입니다. 그래서 평면 좌표만 있어도 주행에는 충분한 경우가 많습니다. 다만 앵커를 전부 같은 높이의 천장에만 달면 Z축 계산이 불안정해지고, 그 여파로 XY 정확도도 함께 흔들릴 수 있습니다. 앵커 간격은 실내 기준 15m 이내를 권장하며, 최소 2m는 떨어뜨려야 거리 차이가 의미 있게 벌어집니다.
여기서 자주 놓치는 부분이 하나 있습니다. 금속 선반이나 유리벽 옆에 앵커를 붙이면 신호가 반사되어 멀티패스 간섭이 생깁니다. 공장이나 물류센터처럼 금속이 많은 현장에서 로봇을 운용한다면, 앵커 위치를 잡을 때 이 점을 먼저 확인해야 합니다.
태그를 로봇에 붙이고 좌표 받기
앵커를 세웠다면 다음은 로봇에 태그를 얹는 일입니다. GrowSpace 개발자 태그는 로봇의 상단이나 본체 중앙, 신호가 가려지지 않는 자리에 부착합니다.
여기서 커넥터를 헷갈리면 안 됩니다. 개발자 태그의 좌측 커넥터는 3.3V이고, 우측 커넥터는 5V입니다. 로봇의 온보드 컴퓨터로 라즈베리파이를 쓴다면 반드시 좌측 3.3V 포트를 씁니다. 우측 5V 포트를 라즈베리파이 GPIO에 잘못 연결하면 UART 회로가 손상됩니다.
연결 후 시리얼로 lep을 입력하면 다음과 같은 좌표가 올라옵니다.
POS,-3.41,9.54,-1.53,74앞의 세 숫자가 X, Y, Z(m)이고, 마지막 74는 품질지수(QF, 0~100)입니다. QF가 60 이상이면 대체로 안정적인 값으로 봅니다. 로봇처럼 실시간으로 경로를 보정하는 시스템에서는 이 QF를 함께 읽어, 낮은 값이 들어올 때는 이전 좌표를 유지하는 필터링을 걸어두는 편이 안전합니다.
라즈베리파이와의 정확한 핀 연결, 파이썬 파싱 코드는 별도로 정리해 둔 라즈베리파이 UWB 연동 글에서 단계별로 다룹니다. 이 글에서는 로봇 통합에 필요한 흐름만 짚습니다.
로봇 여러 대를 동시에 운용한다면
로봇 한 대만 테스트할 때는 리스너로 충분합니다. 리스너는 USB로 PC나 온보드 컴퓨터에 바로 붙여 좌표를 문자열로 받는 구성입니다.
문제는 로봇이 여러 대로 늘어날 때입니다. 리스너는 한 대의 컴퓨터에 USB로 물리는 구조입니다. 로봇마다 리스너를 하나씩 붙이면 배선도 늘고 관리도 어려워집니다. 이럴 때는 게이트웨이로 넘어가는 편이 낫습니다. 게이트웨이는 태그들의 좌표를 MQTT로 뿌려줍니다. 로봇 각각이 자기 태그 ID의 토픽만 구독하면 됩니다. 중앙 관제 시스템에서 로봇 전체의 위치를 한 번에 모니터링하기도 게이트웨이 쪽이 쉽습니다.
| 구분 | 리스너 | 게이트웨이 |
|---|---|---|
| 연결 방식 | USB 시리얼 | Wi-Fi(2.4GHz) 또는 LAN, MQTT |
| 적합한 상황 | 로봇 1대 테스트·개발 초기 | 로봇 여러 대 동시 운용 |
| 데이터 형태 | CSV 문자열 | JSON |
MQTT 처리량도 미리 감안해둘 부분입니다. 게이트웨이 하나는 초당 150건까지 처리합니다. 10Hz로 갱신하면 로봇 15대, 1Hz로 낮추면 150대까지 감당합니다. 로봇 대수가 늘어날수록 갱신 주기와 태그 수의 균형을 맞춰야 합니다.
자주 묻는 질문
앵커 몇 개부터 로봇 위치추적이 가능한가요?
평면 좌표만 필요하면 3개부터 가능합니다. 높이까지 구분해야 하는 다층 로봇이라면 4개 이상을 권장합니다.
로봇이 빠르게 움직이면 좌표가 튈 수 있나요?
갱신 주기를 짧게 설정하면 반응은 빨라지지만 순간적인 노이즈에는 더 민감해집니다. QF 값을 함께 확인해 낮은 품질의 좌표를 걸러내는 로직을 두는 편이 안전합니다.
라즈베리파이 대신 다른 보드를 써도 되나요?
ESP32나 아두이노로도 시리얼 수신은 가능합니다. 다만 로봇 제어처럼 여러 연산을 동시에 처리해야 하는 경우, 처리 성능이 넉넉한 라즈베리파이가 더 무난합니다.
다음 단계
앵커 3개, 태그 하나로 로봇 한 대의 좌표부터 받아보는 게 먼저입니다. 그 구성이 안정적으로 돌아가는 걸 확인한 다음, 로봇 대수를 늘리고 게이트웨이로 옮겨가도 늦지 않습니다.
→ 로봇 운용 규모에 맞는 앵커·게이트웨이 구성 문의하기


