2016-06-01 3 views
1

C++의 Hemisphere GPS 장치에서 데이터를 가져와 일부 후 처리를 수행하고 있습니다. 장치와 통신하려면 a serial library을 사용하고 있습니다. 이 GPS 장치의 데이터 만 구독 할 수 있습니다. 귀하의 위치는 20Hz, 10Hz, 5Hz, ...에서 최대 5 초까지받을 수 있습니다. 이전에 직렬 통신으로 경험 한 것은 명령을 보내고 응답을 기다리는 것입니다. 나는 두 가지 문제를 안고있다.GPS와의 연속 통신 - 연속 데이터 전송

내가 직면 한 첫 번째 문제는 GPS를 이동할 때와 이동 한 시간 사이에 대기 시간이있는 것 같습니다 (약 3-5 초). 거기에 어떤 종류의 큐와 같은 버퍼가 채워질 수 있습니까? 그래서 내가 서있는 동안 고정 된 위치가 대기열을 가득 채우고 몇 미터 떨어진 곳으로 움직일 때 정지 된 위치는 여전히보고되고 있습니다. 그렇다면 어떻게이 버퍼를 제거하여 최신 데이터 만 가져올 수 있습니까?

두 번째 문제는 내가 얻은 결과, 두 결과가 병합되거나 조각이 꺼내집니다.

int baudrate = 9600; 
serial::bytesize_t databits = serial::eightbits; 
serial::parity_t parity = serial::parity_none; 
serial::stopbits_t stopbits = serial::stopbits_one; 
serial::flowcontrol_t flowcontrol = serial::flowcontrol_none; 
Serial* serialObj = new serial::Serial(ss.str(), baudrate, serial::Timeout(), 
         databits, parity, stopbits, flowcontrol); 

while (true) 
{ 
    std::string rawData = serialObj->readline(); 
    std::cout << rawData << std::endl; 
    //decode and do other processing - takes about 0.5 seconds 
} 

내가 구독 속도 장난 시도했다 : 여기

$GPGLL,5804.7646091,N,11407.8367957,W,035009.40,A,D*7C 
$GPGLL,5804.7646449,N,11407.8368155,W,035009.50,A,D*79 
$GPGLL,5804.7646737,N,11407.8368444,W,035009.60,A,D*75 
$GPGLL,5804.7647076,N,11407.8368787,W,035009.70,A,D*7B 
$GPGLL,5804.7647484,N,11407.8368970,W,035009.80,A,D*7B 
$GPGLL,5804.7647751,N,11407.8369257,W,035009.90,A,D*7E 
$GPGLL,5804.7648048,N,1.7650578,N,11407.8372036,W,035010.80,A,D*77 //bad data 
$GPGLL,5804.7650880,N,11407.8372280,W,035010.90,A,D*73 
$GPGLL,5804.7651175,N,11407.8372626,W,035011.00,A,D*71 
$GPGLL,5804.7651413,N,11407.8372992,W,035011.10,A,D*75 
$GPGLL,5804.7651673,N,11407.8373189,W,035011.20,A,D*71 
$GP,N,11407.8374179,W,035012.90,A,D*72 //bad data 
$GPGLL,5804.7652561,N,11407.8374194,W,035013.00,A,D*79 
$GPGLL,5804.7652545,N,11407.8374191,W,035013.10,A,D*7B 
$GPGLL,5804.7652553,N,11407.8374223,W,035013.20,A,D*75 
$GPGLL,5804.7652543,N,11407.8374190,W,035013.30,A,D*7E 
$GPGLL,580407.8374360,W,035015.00,A,D*76 //bad data 
$GPGLL,5804.7652603,N,11407.8374404,W,035015.10,A,D*75 
$GPGLL,5804.7652625,N,11407.8374373,W,035015.20,A,D*75 
$GPGLL,5804.7652647,N,11407.8374386,W,035015.30,A,D*7A 
$GPGLL,5804.7652668,N,11407.8374359,W,035015.40,A,D*72 
$GPGLL,5804.76526W,035017.10,A,D*7F //bad data 
$GPGLL,5804.7652684,N,11407.8374404,W,035017.20,A,D*7B 

을 내가 그것을 읽고 있어요 방법에 대한 코드입니다 : 여기에 내가 얻을 원시 데이터의 샘플입니다 , 그러나 그것은 여전히 ​​같은 결과를 갖는 것으로 보인다. 의사 소통을 망칠 수있는 아이디어가 있습니까?

참고 : 데이터 구독은 제조업체에서 제공 한 설정 도구를 사용하여 수행됩니다.

답변

1

여기의 문제는 C++ 문제가 아닌 GPS 시스템과 비슷합니다. GPS 시스템에 대한 귀하의 경험을 알지 못하지만 여기에 몇 가지 일이 있습니다 :

처음 발생하는 문제는 GPS를 이동할 때와 대기 시간 사이에 대기 시간이있는 것 같습니다. 그것은 이동했다고보고합니다 (약 3-5 초).

설명 : 일반적으로 GPS가 느려집니다 ... 고정되어있는 것처럼 들리면 GPS는 10-30 미터, 최대 100 미터 또는 그 이상의 오류 영역이 있습니다. , 중앙 위치에서. GPS는 움직이는 동안 가장 정확합니다. 수신기가 한 정지 지점에서 다른 지점으로 이동하는 경우 수신자가 다음과 같아야합니다.

  • 수신기가 처음 정지 지점에서 이동했음을 감지합니다. 수신기가 한 지점에서 다른 지점까지 가까이에서 감지하기 어렵습니다.
  • 도시 또는 건물 근처에서 테스트를 수행하는 경우 환경에 크게 좌우 됨, 특히 위치를 다시 계산하십시오. 수신기가 거의 기본적으로 multipath 환경에있는 위치를 계산하면 특히 악화됩니다.
  • 수신자가 위치를 업데이트하기까지 3-5 초가 걸리고 그때까지 원래 위치 인 마지막으로 가장 잘 알려진 위치가 전송됩니다.

    (이것이 자동차에서 GPS 드리프트가 발생하는 이유이며, 고정 된 경우 GPS는 방향을 잃어 실제 위치에서 벗어나기 시작합니다.스마트 폰의 GPS가 enhanced GPS이기 때문에 스마트 폰이 고정 된 움직임을 감지 할 때 GPS 지점을 "고정"함으로써 GPS를 줄이려고 시도합니다. 이는 GPS 수신기가 휴대 전화 기술과 스마트 폰에 의해 보강된다는 것을 의미합니다. 자이로 스코프, 자력계 및 중력 센서와 같은 온보드 센서 (또는 GPS 매핑이 MAC 주소 및 신호 환경과 관련되어있을 때 이전에 HEAT 매핑 된 알려진 WiFi 액세스 포인트) 차량 및 실내지도). 모두가 신중한 GPS 센서 시스템보다 훨씬 쉽고 빠르게 움직임을 감지 할 수 있습니다. 심지어 매우 비싼 것입니다.)

    두 번째 문제는 내가 얻은 결과가 두 개의 결과가 병합되거나 조각이 밖으로 나옵니다. 예컨대, 전원, 자동차, 또는 다른 (즉, 어떤) 에미 근처 인 것으로

    1. 전자파 :

    불량 데이터는 여러 이유로 의한 통상 오판을 초래한다.

  • 하나 이상의 GPS 위성의 데이터가 불완전합니다. 이것은 고층 건물 근처, 특히 많은 곳에 또는 돌출부가있는 경우에 발생합니다. 지구 자체가 명확한 신호 경로를 차단하기 때문에 수평선 근처의 인공위성조차도이 문제를 일으킬 수 있습니다.
  • 또는 일반적인 더러운 용의자, 안전하지 않은 신호 케이블.
  • 대부분의 수신자는 일반적으로 솔루션에서 가장 높은 폴링을 수행 할 위치를 선택하여 나쁜 데이터를 "버립니다". 원시 데이터에 표시되지만 위치는 영향을받지 않습니다.

    코드에는 아무런 문제가없는 것처럼 보이지만 GPS 센서는 매우 비싼 디지털 나침반과 함께 값 비싼 정밀 타이밍 장치가없는 경우 종종 불완전합니다. 이들은 외부 센서의 향상없이 ​​움직임을 감지하는 데 여전히 느리며 정지 상태 일 때 일정 정도 예상되는 부정확도로 동작합니다.

    +0

    GPS 장치는 바퀴에 인코더 (회전 감지 용)와 가속도계가있는 차량에 장착됩니다. 빠른 Google에서 [Kalman filters] (http://stackoverflow.com/questions/1134579/smooth-gps-data)가 오류를 추정하는 데 사용되었습니다. 더 나은 결과를 얻기 위해 Kalman 필터와 함께이 두 가지 다른 정보를 사용하도록 제안 하시겠습니까? – McAngus

    +0

    예, 좋은 제안이며보다 나은 지역 결과를 제공합니다. – NonCreature0714