GPS 센서를 사용하여 위치 정보 획득 및 시간 보정하기

Raspberry Pi에 GPS 센서를 연결하고 gpsd 및 chrony 서비스를 활성화하여 위치 정보 획득 및 시간 보정

운영 환경


  • HW: Raspberry Pi 4B
  • OS: Raspberry Pi OS
  • 센서: GNSS 수신기 키트 (아키즈키 전자)
  • USB 컨버터: USB 시리얼 변환 모듈(아키즈키 전자)

  • 배선 연결



    준비한 GPS 센서는 UART 연결용이지만 Raspberry Pi 이외의 기기에도 적용하기 위해 변환기를 사용하여 USB 연결



    연결 확인



    USB 변환기가 인식되면 /dev/ttyUSB0가 생성됩니다.
    통신 내용 읽기 GPS 센서가 연결되어 있는지 확인
    cat /dev/ttyUSB0
    

    명령을 실행하면 다음과 같은 NMEA 형식 응답이 있습니다.
    참고 이미 gpsd를 설정하고 시작한 경우 Device or resource busy가 표시됩니다.
    GNGLL,3422.1331,N,13518.0431,E,141613.000,A,A*48
    GNGSA,A,3,17,28,04,14,09,03,19,06,22,,,,1.19,0.86,0.82*18
    ...
    

    gpsd를 사용하여 위치 정보 얻기



    위치 정보를 받는 메커니즘



    GPS 센서로부터 NMEA 형식의 신호를 수신한 gpsd 는, gpsd_json 형식 로 변환한 위치 정보 리포트를 TCP/IP 통신(포트 2947)으로 전달한다. 보고서의 내용은 cgps와 같은 gpsd 클라이언트를 사용하여 쉽게 볼 수 있습니다.

    gpsd, gpsd 클라이언트 설치


    sudo apt install gpsd gpsd-clients
    

    gpsd 설정


    /etc/default/gpsd 편집

    /etc/default/gpsd
    # Default settings for the gpsd init script and the hotplug wrapper.
    
    # Start the gpsd daemon automatically at boot time
    START_DAEMON="true"
    
    # Use USB hotplugging to add new USB devices automatically to the daemon
    USBAUTO="true"
    
    # Devices gpsd should collect to at boot time.
    # They need to be read/writeable, either by user gpsd or the group dialout.
    DEVICES="/dev/ttyUSB0"
    
    # Other options you want to pass to gpsd
    GPSD_OPTIONS="-F /var/run/gpsd.sock -b -n -r"
    

    옵션의 의미는 man gpsd에서 확인할 수 있습니다.

    -F 소켓 파일 경로
    -b 장치 보호 모드 (GPS 센서에 설정 쓰기 금지)
    -n 요청이 올 때까지 센서 연결을 대기하는 기능을 비활성화합니다.
    -r 보정이 완료되기 전에도 GPS 시간을 사용합니다. RTC 내장 센서라면 보정 완료 전에도 유효한 시각을 얻을 수 있다

    gpsd 재부팅
    sudo systemctl restart gpsd.service
    

    위치 정보 얻기



    cgps 및 gpsmon과 같은 gpsd 클라이언트를 사용하여 위치 정보 얻기
    cgps -s
    

    도서관를 사용하여 파이썬에서 위치 정보를 얻을 수도 있습니다.

    chrony를 사용하여 위치 정보 얻기



    chrony란?



    ntpd와 다른 NTP 구현. 호스트 머신이 자주 셧다운이나 네트워크 단절 상태가 되는 케이스로 안정적으로 동작하는 것이 특징 [공식]. CentOS 및 Red Hat에서는 ntpd로 바뀌고 기본값이므로 안정성이 높습니다.

    chorny는 gpsd가 shared memory에 쓴 정보를 읽고 시간을 수정합니다.

    chrnoy 설정



    Raspberry Pi OS에서는 기본적으로 systemd-timesyncd가 활성화되어 있으므로 비활성화합니다.
    sudo systemctl stop systemd-timesyncd
    sudo systemctl disable systemd-timesyncd
    

    chrony 설치
    sudo apt install chrony
    
    /etc/chrony/chrony.conf 편집

    /etc/chrony/chrony.conf
    # ネットワーク上の時刻サーバとの同期させない場合はコメントアウト
    # pool 2.debian.pool.ntp.org iburst
    
    # shared memoryから読み取る設定を追加
    refclock SHM 0 refid GPS precision 1e-1
    

    chrony 재부팅
    sudo systemctl restart chrony.service
    
    chrony sources 명령으로 상태를 확인할 수 있습니다.
    잠시 방치하고 GPS 왼쪽에 *가 표시되면 시간 동기화 완료
    210 Number of sources = 1
    MS Name/IP address         Stratum Poll Reach LastRx Last sample
    ===============================================================================
    #* GPS                           0   4   377    20    +18ms[  +32ms] +/-  100ms
    
    

    참고



    htp ///만두 s. 어쩌면. 코 m/만파게 s/후카나 l/만 8/gpsd. 8. HTML
    htps : // 만파게 s. 어쩌면. 이 m/만파게 s/p 레세세/만 5/gpsd_j 그래. 5. HTML
    htps : // gpsd. 기 t b. 이오 / gpsd / gpsd - 치메 - r ゔ ぃ 세 - 호와. HTML#_Fuee G_ch 로 ny_f m_gpsd
    htps : // gpsd. 기 t b. 이오 / gpsd / c ぃ 엔 t 호 w와. HTML#_인 t로즈 c치온

    좋은 웹페이지 즐겨찾기