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
을 내가 그것을 읽고 있어요 방법에 대한 코드입니다 : 여기에 내가 얻을 원시 데이터의 샘플입니다 , 그러나 그것은 여전히 같은 결과를 갖는 것으로 보인다. 의사 소통을 망칠 수있는 아이디어가 있습니까?
참고 : 데이터 구독은 제조업체에서 제공 한 설정 도구를 사용하여 수행됩니다.
GPS 장치는 바퀴에 인코더 (회전 감지 용)와 가속도계가있는 차량에 장착됩니다. 빠른 Google에서 [Kalman filters] (http://stackoverflow.com/questions/1134579/smooth-gps-data)가 오류를 추정하는 데 사용되었습니다. 더 나은 결과를 얻기 위해 Kalman 필터와 함께이 두 가지 다른 정보를 사용하도록 제안 하시겠습니까? – McAngus
예, 좋은 제안이며보다 나은 지역 결과를 제공합니다. – NonCreature0714