저번에 R&E 연구를 위해 라즈베리파이를 세팅하는 과정을 올렸었습니다.

그 주제가 iBeacon 을 통한 실내 정밀측위 알고리즘의 개발이라 관련한(연구한) 알고리즘에 대해 몇자 적어봅니다.


iBeacon으로 거리를 측정하는 방법은 우선 이렇습니다. Beacon 발생기(HM-10 사용)를 이용하여 Beacon 신호를 주기적으로 송출하면 BLE(Bluetooth Low Energy) 4.0 이상을 지원하는 다른 기기 및 모듈에서 Beacon 신호를 검색할 수 있습니다. 검색을 하게되면 TxPower(송출신호크기), RSSI(신호의 세기), 모듈의 UUID 등의 정보를 얻을 수 있습니다. (아래 그림 참고)


-57이라고 적혀있는 rssi 값고 -59라고 적혀있는 TxPower 보이시나요? 그리고 제일 위에 있는 이상한 숫자와 영문자 조합이 UUID입니다. 이 UUID로 비콘을 식별할 수 있습니다. 우선, 거리를 측정하기 위해서 필요한것은 rssi와 TxPower 두가지밖에 없습니다. 원리는 간단합니다. 거리가 멀어질수록 신호 세기가 약해져서 rssi값이 낮아지는 것을 이용한 것입니다. 계산하는 공식은 이렇습니다.

RSSI = -10nlogd + TxPower

여기서 d는 거리, n은 전파 손실도와 관련된 값인듯 한데, 장애물이 없는 공간에서는 n=2로 생각하고 계산하면 된다고 합니다.

여기서 얻고싶은 값이 d이기 때문에 수식에 조금 변형이 필요하겠죠?

이항하여 정리하면

d = 10 ^ ((TxPower - RSSI) / (10 * n)) 

을 얻을 수 있습니다.

하지만 여기서 발생하는 문제. 

측정된 값은 스칼라 값으로 방향에 관한 정보가 없고, 송신모듈로부터 얼마나 떨어진것인가 밖에 측정할 수 없게 됩니다.

(참고로 스칼라 값이란 흔히 사용하는 숫자값입니다. 양만을 나타내고 방향에 관한 정보는 없습니다.

반대로 벡터값은 양과 방향에 대한 정보를 모두 가지고 있습니다. 주로 화살표로 표시하구요.)

다시 본론으로 돌아오면, 스칼라값을 이용해서 상대적인 위치를 확인해야 합니다. 즉, 방향을 확인해야 합니다.

처음에는 약간 낯설수도 있는데요, 그럼 이렇게 한번 생각해 봅시다. 송신모듈의 좌표를 (0,0)에 놓고, 측정된 거리를 반지름으로 하여 원을 그려봅시다.

그러면 감이 오시나요? 

네 맞습니다. 바로 원들을 이용하여 방향을 결정합니다. 원들의 교점을 이용하여 유일한 한 점을 결정하는 방법입니다.

하지만 이러려면 원이 여러개 있어야 합니다. 한번 생각해보죠.

원이 두개가 있으면 이론적으로는 교점이 1개(접점) 혹은 2개가 생기게 됩니다. 1개만 생긴다면 좋은데 2개일때가 문제이군요.

그러면 원을 3개를 사용하면? 교점이 2개인 상태에서 원 하나를 더 교차시키면 그중에서도 하나를 찾을 수 있죠.

그러므로 원을 최소 3개를 사용해야 합니다.

아래의 그림을 참고하세요 (밑에는 4개인 상황을 가정했습니다. 하지만 결과적으로는 같은 값을 얻을 수 있습니다.)

위의 그림에서 C1,2,3,4 은 각각 비콘신호 송신모듈의 위치이며 편의상 정사각형의 형태로 배치하였습니다. d1,2,3,4 는 각각의 송신모듈에서부터 측정된 거리입니다. 

같은색으로 그려진 원들이 각 거리를 반지름으로 하여 그린 원의 일부입니다.

그러면 이론적으로 한 점에서 3개의 원이 교차하는 교점이 생깁니다. 바로 저 점의 좌표를 찾으면 저희가 원하는 위치를 알아낼 수 있습니다.

하지만 이건 어디까지나 '이론적'인 부분이구요, 실제에서는 엄청난(?)오차 때문에 한점에서 교차할 일이 거의 없습니다. 

다음 포스팅에서는 한점에서 만나지 않을때 위치를 찾는 방법과 실제로 원의 방정식을 연립하여 위치의 좌표를 가져오는 식을 유도해 보도록 하겠습니다.




+ Recent posts