부인 성명:길고 자세한 문제 설명 + 실제로는 모르겠지만 socat
매우 이상한 문제에 봉착했습니다. 마지막에 있는 tl;dr과 유사합니다.
현재 Ubuntu 18.04를 직렬로(RS232) 실행하는 컴퓨터를 INS(특히 Ellipse-D)에 연결하여 RTK 수준 GPS 정확도를 달성할 수 있도록 RTCM 보정 데이터를 보내려고 합니다.
이를 위해 BKG Ntrip 클라이언트(BNC)가 내 컴퓨터에서 실행되고 있으며 NMEA 문자열이 직렬 인터페이스를 통해 INS에서 전송되어 인터넷을 통해 NTRIP 브로드캐스터로 전송되고 NTRIP 브로드캐스터는 다시 RTCM 수정 데이터를 전송합니다. NTRIP 클라이언트가 직렬 인터페이스를 통해 수신된 수정 데이터를 INS에 전달할 수 있도록 합니다. (아래 사진은 예시입니다.)
불행하게도 INS는 항상 수정 데이터를 수신하지 않는다고 표시하지만 BNC는 항상 INS로부터 NMEA 문자열을 수신하고 NTRIP 캐스터로부터 RTCM 데이터를 수신합니다. 그래서 나는 RTCM 데이터가 컴퓨터에서 나가는지 확인하기 위해 직렬 포트(내 경우에는 /dev/ttyUSB0)에서 트래픽을 모니터링하기로 결정했습니다. 그래서 다음 항목을 찾았습니다.
직렬 포트 트래픽을 모니터링하는 방법은 무엇입니까?socat
따라서 위에서 설명한 대로 를 사용하여 다음 명령을 실행하는 다른 터미널을 여는 동안 시스템을 실행하는 솔루션을 변환했습니다 .
socat /dev/ttyUSB0,raw,echo=0 \
SYSTEM:'tee in.txt |socat - "PTY,link=/tmp/ttyV0,raw,echo=0,waitslave" |tee out.txt'
나는 들어오는 트래픽이 결국 도착 in.txt
하고 나가는 트래픽이 결국 도착할 것으로 예상합니다 out.txt
. in.txt
INS의 NMEA 문자열이 있지만 out.txt
거기에는 아무것도 없습니다. 내 INS가 갑자기 RTK 수준 GNSS 위치를 추정하라는 지시를 받았기 때문에 갑자기 RTCM 보정 데이터가 INS에 도착했다는 사실을 알기 전까지 처음에는 실망했습니다. 더욱 놀라운 점은 socat
터미널 명령을 취소하면 RTK 수준 정확도가 더 이상 존재하지 않으므로 더 이상 RTCM 데이터가 INS에 도달하지 않는다는 것입니다. 이 과정을 여러 번 반복했는데 결과는 항상 같았기 때문에 우연의 일치는 배제할 수 있습니다. (유일한 흥미로운 점은 일정 시간이 지나면 RTK 수평 정확도가 더 이상 달성되지 않지만 socat 명령을 다시 시작한 직후에는 다시 달성된다는 것입니다.)
간단히 말해서:socat
문제에 대한 긴 설명을 끝내기 위해 위 명령의 어떤 부작용 으로 인해 socat(여기서는 BNC) 이외의 다른 프로그램이 직렬 인터페이스를 통해서만 외부 장치(여기에서는 데이터를 보낼 수 있는지)를 알 수 있는지 스스로에게 묻습니다. INS) 이 인터페이스(여기서는 /dev/ttyUSB0)를 모니터링하는 경우 내 애플리케이션에서 항상 병렬로 실행 socat
하고 싶지 않기 때문입니다 .socat
BNC는 Ubuntu 18.04 시스템에서 실행되고 있으며 여기의 GNSS 로버는 Ellipse-D INS입니다. 직렬로 전송되는 참조 관측치는 socat
위의 명령이 동시에 실행될 때만 도착하는 것처럼 보이므로 문제가 됩니다. 반면에 NMEA 좌표는 에 관계없이 항상 도착합니다 socat
.