Beacon을 사용하여 위치 추정 할 때의 메모 (GPS 측량, RSSI → 거리)
측량법
지문, 삼각 측량, 삼변 측량, GPS 측량 또는 다양한 측량 방법이 있습니다. 솔직히 잘 모르겠어요.
지문은 일반적으로 정밀도가 높다고 하지만 사전 학습이 번거롭거나 하기 때문에, 이번에는 GPS 측량으로 사용되고 있는 방식을 이용합니다.
GPS 측량은 좌표가 알려진 3점(위성)으로부터의 거리를 알면 수신하는 단말의 상대 좌표를 알 수 있다는 원리입니다(실제로는 시간 동기화를 위해 4대의 위성이 필요하지만 이번에는 생각하지 않습니다 음). 이 위성을 Beacon으로 바꾸는 것으로 실내에서의 위치 추정이 가능합니다.
즉 이하의 계산을 할 수 있으면 k입니다.
Beacon으로부터의 거리는 전파 강도(RSSI)에서 구할 수 있습니다.
상대 좌표도 좌표가 알려진 3개의 Beacon과 RSSI로부터 구한 거리를 이용해 구할 수 있습니다. 공식 등은 참고 문헌이 알기 쉬웠으므로을 참조하십시오. 아래에 구현 예를 적어 둡니다.
구현
여기에서는 예로서 Objective-c로 표기해 둡니다.
- RSSI를 거리로 변환 -
/*RSSIを距離へ変換*/
-(CGFloat)value:(float)num power:(int)val{
CGFloat ans,x,k;
k = 2; //フリスの伝達公式(自由空間では2くらい)
x = (num+val)/(-10*k);
ans = powf(10, x);
return ans;
}
- 위치 좌표 계산 -
/*位置座標を計算*/
- (CGPoint)manPoint:(CGPoint)a beaconB:(CGPoint)b beaconC:(CGPoint)c distanceA:(CGFloat)dA distanceB:(CGFloat)dB distanceC:(CGFloat)dC {
CGFloat Va, Vb, x, y ;
Va = ((powf(dB,2)-powf(dC, 2))-(powf(b.x, 2)-powf(c.x, 2))-(powf(b.y, 2)-powf(c.y, 2)))/2;
Vb = ((powf(dB,2)-powf(dA, 2))-(powf(b.x, 2)-powf(a.x, 2))-(powf(b.y, 2)-powf(a.y, 2)))/2;
y = (Vb*(c.x-b.x)-Va*(a.x-b.x))/((a.y-b.y)*(c.x-b.x)-(c.y-b.y)*(a.x-b.x));
x = (Va-y*(c.y-b.y))/(c.x-b.x);
return CGPointMake(x, y);
}
참고문헌
[1] htp // // 역시 rx. st. p한다. 에즈/ゔぃ에w c/do w 응아 d? 도 = 10.1.1.684.6710&레 p=레 p1&tyぺ=pdf
[2] htps : // pdfs. 세만치 cs 쵸 r. rg / 69b0 / A 4b23d06f5244975394542fd6829 A0E 92658. pdf
Reference
이 문제에 관하여(Beacon을 사용하여 위치 추정 할 때의 메모 (GPS 측량, RSSI → 거리)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tamori54/items/7bb40590972e1aa8ed6b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/*RSSIを距離へ変換*/
-(CGFloat)value:(float)num power:(int)val{
CGFloat ans,x,k;
k = 2; //フリスの伝達公式(自由空間では2くらい)
x = (num+val)/(-10*k);
ans = powf(10, x);
return ans;
}
/*位置座標を計算*/
- (CGPoint)manPoint:(CGPoint)a beaconB:(CGPoint)b beaconC:(CGPoint)c distanceA:(CGFloat)dA distanceB:(CGFloat)dB distanceC:(CGFloat)dC {
CGFloat Va, Vb, x, y ;
Va = ((powf(dB,2)-powf(dC, 2))-(powf(b.x, 2)-powf(c.x, 2))-(powf(b.y, 2)-powf(c.y, 2)))/2;
Vb = ((powf(dB,2)-powf(dA, 2))-(powf(b.x, 2)-powf(a.x, 2))-(powf(b.y, 2)-powf(a.y, 2)))/2;
y = (Vb*(c.x-b.x)-Va*(a.x-b.x))/((a.y-b.y)*(c.x-b.x)-(c.y-b.y)*(a.x-b.x));
x = (Va-y*(c.y-b.y))/(c.x-b.x);
return CGPointMake(x, y);
}
[1] htp // // 역시 rx. st. p한다. 에즈/ゔぃ에w c/do w 응아 d? 도 = 10.1.1.684.6710&레 p=레 p1&tyぺ=pdf
[2] htps : // pdfs. 세만치 cs 쵸 r. rg / 69b0 / A 4b23d06f5244975394542fd6829 A0E 92658. pdf
Reference
이 문제에 관하여(Beacon을 사용하여 위치 추정 할 때의 메모 (GPS 측량, RSSI → 거리)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tamori54/items/7bb40590972e1aa8ed6b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)