
UWB 키트를 사고 나서 가장 먼저 막히는 질문은 이것이다. 좌표는 받았는데, 이걸로 무엇을 만들까.
UWB 개발키트 Q1은 앵커 3개와 태그, 리스너로 실내 좌표를 10~30cm 정확도로 받는 개발용 키트다. 좌표는 시리얼 문자열로 나온다. 그래서 라즈베리파이, 아두이노, ESP32 어디에든 바로 붙는다.
Q1으로 실제 진행된 프로젝트 중 대표적인 것은 네 가지다. 로봇 위치와 방향 제어, 실내 드론 제어, 사람을 따라오는 Follow-me 로봇, 그리고 위험 구역을 감시하는 지오펜스다. 아래에서 각각 무엇이 필요하고 어디서 막히는지 정리했다.
네 가지 프로젝트, 무엇이 다른가
| 프로젝트 | 태그 구성 | 핵심 계산 | 먼저 챙길 것 |
|---|---|---|---|
| 로봇 방향 제어 | 로봇 1대에 태그 2개 | 두 좌표로 방향각 계산 | 태그 간격 |
| 실내 드론 제어 | 드론에 태그 1개 | X·Y·Z 3차원 좌표 | 앵커 4개, 높이 분산 |
| Follow-me 로봇 | 로봇 1개 + 사람 1개 | 두 대상의 거리와 방위 | 갱신 주기 |
| 안전 지오펜스 | 작업자·장비마다 1개 | 좌표가 구역 안인지 판정 | 구역 경계 여유 |
태그 두 개로 로봇 방향까지 잡는 법
태그 하나는 위치만 알려준다. 로봇이 어느 쪽을 보고 있는지는 모른다.
그래서 로봇 앞과 뒤에 태그를 하나씩 단다. 두 좌표를 이으면 로봇이 향한 방향이 나온다. 계산은 atan2(앞 Y − 뒤 Y, 앞 X − 뒤 X) 한 줄이다. 로봇에 태그를 얹고 좌표를 받는 기본 과정은 UWB로 로봇 위치추적 만드는 방법에 정리해 두었다.
여기서 태그 간격이 중요하다. 좌표마다 수십 cm 오차가 있기 때문이다. 간격이 좁으면 그 오차가 각도에 그대로 크게 실린다. 로봇 몸체가 허락하는 한 두 태그를 최대한 멀리 떨어뜨리는 편이 방향 값이 덜 흔들린다.
정지 상태에서는 방향 값이 튀기 쉽다. 몇 번의 값을 평균 내고, 품질지수(QF)가 낮은 좌표는 버리는 필터를 먼저 걸어두자.
실내 드론 제어: 높이가 관건이다
드론은 바닥에 붙어 다니지 않는다. 높이까지 알아야 한다.
평면 좌표는 앵커 3개로 충분하지만, 높이까지 계산하려면 4개가 필요하다. 앵커를 전부 같은 천장 높이에 달면 Z값이 불안정해진다. 일부는 높게, 일부는 낮게 달아 높이를 나눠야 한다.
드론은 빠르게 움직인다. 그래서 갱신 주기를 10Hz로 두고, 튀는 값을 걸러내는 로직을 비행 제어 앞단에 넣는다. 처음에는 넓은 실내에서 낮은 고도로만 시험하는 순서가 안전하다.
Follow-me 로봇: 대학 텀프로젝트의 단골 과제
사람이 걸으면 로봇이 따라온다. 대학 텀프로젝트로 Q1을 이렇게 쓴 사례가 있다.
구성은 단순하다. 로봇에 태그 하나, 사람에게 태그 하나를 둔다. 두 좌표의 거리가 일정 값보다 멀어지면 로봇이 사람 쪽 방위로 움직이고, 가까우면 멈춘다. 방향 제어까지 하려면 앞에서 본 태그 두 개 방식을 로봇 쪽에 같이 쓴다.
막히는 지점은 반응 속도다. 사람은 수시로 멈추고 방향을 바꾼다. 좌표 갱신이 느리면 로봇이 한 박자 늦게 따라온다. 갱신 주기를 높이고, 정지 거리에 여유를 두면 부딪힐 걱정이 줄어든다.
안전 지오펜스: 위험 구역에 들어가면 알린다
작업자나 지게차에 태그를 붙인다. 그리고 지도 위에 위험 구역을 다각형으로 그린다.
좌표가 들어올 때마다 그 점이 다각형 안에 있는지만 판정하면 된다. 안에 들어오면 경고를 띄운다. 알고리즘은 점-다각형 포함 판정 하나로 끝난다.
경계선 근처에서는 경고가 켜졌다 꺼졌다를 반복하기 쉽다. 진입과 이탈 기준 사이에 여유 폭을 두면 이 깜빡임이 사라진다. 대상이 여러 명이면 리스너 대신 게이트웨이로 받는다. 게이트웨이는 좌표를 MQTT로 보내고, 10Hz 기준 태그 15개까지 처리한다.
자주 묻는 질문
네 가지 모두 기본 키트 하나로 되나요?
로봇 방향 제어와 Follow-me는 태그가 2~3개 필요해서 태그를 추가하면 된다. 드론은 높이 계산용 앵커 4개가 필요해 확장 키트가 맞다.
좌표는 어떤 형식으로 나오나요?
lep 명령을 보내면 POS,x,y,z,qf 형식으로 나온다. 앞 세 값이 미터 단위 좌표, 마지막이 0~100 품질지수다.
라즈베리파이 말고 아두이노로도 되나요?
된다. 아두이노는 5V 커넥터, 라즈베리파이와 ESP32는 3.3V 커넥터를 쓴다는 점만 지키면 된다. 배선과 코드는 Arduino UWB 위치추적 구현 방법과 라즈베리파이 UWB 연동 방법에 있다.
다음 단계
어떤 프로젝트든 시작은 같다. 앵커 3개와 태그 하나로 좌표를 받아보는 것이다. 그게 안정적으로 들어오면, 태그를 늘리거나 앵커를 추가해 원하는 프로젝트로 넓혀가면 된다.


