🛰️

Android GNSS Loggerで受信したデータをGNSS Analysisで表示する

に公開

測位に関して素人な私は「位置情報の取得?GPSを使うんでしょ?」ぐらいの知識しかありませんでした。測位について学んでいくと、GPSはアメリカが打ち上げた衛星のことを指していて、実際には他にも色々あることを知りました。総合してGNSS(Global Navigation Satellite System(全球測位衛星システム))と呼ばれています。GPS以外には次のようなものがあります。

  • GALILEO...欧州
  • GLONASS...ロシア
  • BeiDou...中国
  • NavIC...インド
  • みちびき(QZSS)...日本!

QZSSはQuasi-Zenith Satellite Systemの略です。quasi-zenith orbitが「準天頂軌道」を意味して、日本に色々とメリットのある軌道なのだとか。

GNSSの生データってどんなものなんだろう~みてみたいな」と思ったら今の時代、すぐ手に入るんですね。スマホのAndroidアプリで簡単に取得できました。

GNSS Logger

GNSS LoggerはGoogleが提供しているアプリです。

https://play.google.com/store/apps/details?id=com.google.android.apps.location.gps.gnsslogger&hl=ja

とてもわかりやすいUIで補足しているGNSSの情報をみれます。

Home(設定画面)

どんな情報を取得するか選択する画面です。GNSS Loggerが出力するファイルは観測データの共通フォーマットであるRINEXではありませんが、Log RINEXを選ぶことで、同時にRINEXファイルも出力してくれます。

設定画面

Plot

時系列の受信状況がみれます。

Status

捕捉している衛星が確認できます。

Skyplot

衛星の位置を確認できます。

Log

以下の画面で「Start Log」を押すとログの取得を開始します。終了は「Stop & Send」です。終了するとログを共有する方法(GmailやDriveなどのメニュー一覧)が表示されます。

実際に取得したファイルは次のようなものです。gnss_log_2025_08_28_14_46_45.txtと年月日時分秒がついたテキストファイルとして出力されます。

# 
# Header Description:
# 
# Version: v3.1.0.8 Platform: 15 Manufacturer: Google Model: Pixel 7 GNSS Hardware Model Name: Broadcom, BCM4776, GLL ver. 154.20.24 616640
# 
# Raw,utcTimeMillis,TimeNanos,LeapSecond,TimeUncertaintyNanos,FullBiasNanos,BiasNanos,BiasUncertaintyNanos,DriftNanosPerSecond,DriftUncertaintyNanosPerSecond,HardwareClockDiscontinuityCount,Svid,TimeOffsetNanos,State,ReceivedSvTimeNanos,ReceivedSvTimeUncertaintyNanos,Cn0DbHz,PseudorangeRateMetersPerSecond,PseudorangeRateUncertaintyMetersPerSecond,AccumulatedDeltaRangeState,AccumulatedDeltaRangeMeters,AccumulatedDeltaRangeUncertaintyMeters,CarrierFrequencyHz,CarrierCycles,CarrierPhase,CarrierPhaseUncertainty,MultipathIndicator,SnrInDb,ConstellationType,AgcDb,BasebandCn0DbHz,FullInterSignalBiasNanos,FullInterSignalBiasUncertaintyNanos,SatelliteInterSignalBiasNanos,SatelliteInterSignalBiasUncertaintyNanos,CodeType,ChipsetElapsedRealtimeNanos,IsFullTracking,SvPositionEcefXMeters,SvPositionEcefYMeters,SvPositionEcefZMeters,SvVelocityEcefXMetersPerSecond,SvVelocityEcefYMetersPerSecond,SvVelocityEcefZMetersPerSecond,SvClockBiasMeters,SvClockDriftMetersPerSecond,KlobucharAlpha0,KlobucharAlpha1,KlobucharAlpha2,KlobucharAlpha3,KlobucharBeta0,KlobucharBeta1,KlobucharBeta2,KlobucharBeta3
# 
# UncalAccel,utcTimeMillis,elapsedRealtimeNanos,UncalAccelXMps2,UncalAccelYMps2,UncalAccelZMps2,BiasXMps2,BiasYMps2,BiasZMps2
# 
# Accel,utcTimeMillis,elapsedRealtimeNanos,AccelXMps2,AccelYMps2,AccelZMps2
# 
# UncalGyro,utcTimeMillis,elapsedRealtimeNanos,UncalGyroXRadPerSec,UncalGyroYRadPerSec,UncalGyroZRadPerSec,DriftXRadPerSec,DriftYRadPerSec,DriftZRadPerSec
# 
# Gyro,utcTimeMillis,elapsedRealtimeNanos,GyroXRadPerSec,GyroYRadPerSec,GyroZRadPerSec
# 
# UncalMag,utcTimeMillis,elapsedRealtimeNanos,UncalMagXMicroT,UncalMagYMicroT,UncalMagZMicroT,BiasXMicroT,BiasYMicroT,BiasZMicroT
# 
# Mag,utcTimeMillis,elapsedRealtimeNanos,MagXMicroT,MagYMicroT,MagZMicroT
# 
# Pressure,utcTimeMillis,elapsedRealtimeNanos,PressureHpa
# 
# OrientationDeg,utcTimeMillis,elapsedRealtimeNanos,yawDeg,rollDeg,pitchDeg
# 
# Fix,Provider,LatitudeDegrees,LongitudeDegrees,AltitudeMeters,SpeedMps,AccuracyMeters,BearingDegrees,UnixTimeMillis,SpeedAccuracyMps,BearingAccuracyDegrees,elapsedRealtimeNanos,VerticalAccuracyMeters,MockLocation,NumberOfUsedSignals,VerticalSpeedAccuracyMps,SolutionType
# 
# Nav,Svid,Type,Status,MessageId,Sub-messageId,Data(Bytes)
# 
# Status,UnixTimeMillis,SignalCount,SignalIndex,ConstellationType,Svid,CarrierFrequencyHz,Cn0DbHz,AzimuthDegrees,ElevationDegrees,UsedInFix,HasAlmanacData,HasEphemerisData,BasebandCn0DbHz
# 
# Agc,utcTimeMillis,TimeNanos,LeapSecond,TimeUncertaintyNanos,FullBiasNanos,BiasNanos,BiasUncertaintyNanos,DriftNanosPerSecond,DriftUncertaintyNanosPerSecond,HardwareClockDiscontinuityCount,AgcDb,CarrierFrequencyHz,ConstellationType
# 
UncalGyro,1756360005244,7595383134924,-0.06001751,0.09728029,0.0012217305,0.0005809451,-0.00028273478,-0.00059705804
UncalMag,1756360005248,7595387044816,-127.5754,21.2158,-82.4964,-96.323135,48.03869,-3.2782698
UncalAccel,1756360005248,7595387325415,-0.5461618,8.192427,5.154738,0.023109367,-0.03632758,0.057774
UncalGyro,1756360005252,7595391526618,-0.08689558,0.02321288,0.01786781,0.0005809451,-0.00028273478,-0.00059705804
UncalAccel,1756360005256,7595395722896,-0.49830532,8.14457,5.1499524,0.023109367,-0.03632758,0.057774
UncalMag,1756360005258,7595397057430,-127.880394,21.301199,-82.472,-96.323135,48.03869,-3.2782698
UncalGyro,1756360005260,7595399938523,-0.095753126,-0.043218717,0.03573562,0.0005809451,-0.00028273478,-0.00059705804
UncalAccel,1756360005265,7595404131404,-0.44506502,8.087741,5.2552366,0.023109367,-0.03632758,0.057774
UncalMag,1756360005268,7595407057510,-127.4656,21.301199,-82.728195,-96.323135,48.03869,-3.2782698
UncalGyro,1756360005269,7595408342168,-0.08659015,-0.09193522,0.049938235,0.0005809451,-0.00028273478,-0.00059705804
OrientationDeg,1756360005256,7595395722896,35.0,4.0,-55.0
OrientationDeg,1756360005265,7595404131404,35.0,4.0,-55.0
UncalAccel,1756360005273,7595412538517,-0.39601216,8.04467,5.384449,0.023109367,-0.03632758,0.057774
OrientationDeg,1756360005273,7595412538517,35.0,4.0,-55.0
UncalGyro,1756360005277,7595416745996,-0.06414085,-0.11957687,0.0571159,0.0005809451,-0.00028273478,-0.00059705804
UncalMag,1756360005278,7595417044611,-127.6608,21.6306,-83.1308,-96.323135,48.03869,-3.2782698
UncalAccel,1756360005281,7595420953984,-0.37627137,7.9830546,5.499305,0.023109367,-0.03632758,0.057774
OrientationDeg,1756360005281,7595420953984,35.0,3.0,-55.0
Pressure,1756360005284,7595423548639,1006.9951
UncalGyro,1756360005286,7595425141484,-0.035888333,-0.13439035,0.053145275,0.0005809451,-0.00028273478,-0.00059705804
UncalMag,1756360005288,7595427057346,-128.6002,21.6062,-83.1064,-96.323135,48.03869,-3.2782698
UncalAccel,1756360005290,7595429341342,-0.32303107,7.954939,5.561518,0.023109367,-0.03632758,0.057774
OrientationDeg,1756360005290,7595429341342,35.0,3.0,-55.0
UncalGyro,1756360005294,7595433536614,-0.012370021,-0.1414153,0.043218717,0.0005809451,-0.00028273478,-0.00059705804
UncalMag,1756360005298,7595437057589,-129.1248,21.5208,-82.9966,-96.323135,48.03869,-3.2782698
UncalAccel,1756360005298,7595437729749,-0.2745764,7.945368,5.6183476,0.023109367,-0.03632758,0.057774
OrientationDeg,1756360005298,7595437729749,35.0,3.0,-55.0
UncalGyro,1756360005302,7595441944836,0.0050396384,-0.13041973,0.032223143,0.0005809451,-0.00028273478,-0.00059705804
UncalAccel,1756360005307,7595446144483,-0.21655045,7.911868,5.709275,0.023109367,-0.03632758,0.057774
OrientationDeg,1756360005307,7595446144483,35.0,3.0,-55.0
UncalMag,1756360005308,7595447044608,-128.7954,21.716,-82.472,-96.323135,48.03869,-3.2782698
Pressure,1756360005309,7595448615084,1007.0409
UncalGyro,1756360005311,7595450349795,0.014966198,-0.096516706,0.021380283,0.0005809451,-0.00028273478,-0.00059705804

なぜRINEXじゃないんだろ?と疑問だったのですが、こちらの資料によると

Why didn’t Android use RINEX in the first place?
Because there are many raw measurement attributes that are very important to
phones but not present in RINEX:

と書いてあって、RINEXで表現できないスマホにとっても大事なデータも生データには含まれるから、とのこと。

ちなみにRINEX形式のファイルはこんな感じです。

     4.01           OBSERVATION DATA    M                   RINEX VERSION / TYPE
GnssLogger          Google 15           20250828 054725 UTC PGM / RUN BY / DATE
Google GnssLogger                                           MARKER NAME
Unknown                                                     MARKER NUMBER
Unknown             Unknown                                 OBSERVER / AGENCY
Unknown             GnssLogger          v3.1.0.8            REC # / TYPE / VERS
Unknown             Unknown                                 ANT # / TYPE
        0.0000        0.0000        0.0000                  ANTENNA: DELTA H/E/N
G    8 C1C L1C D1C S1C C5Q L5Q D5Q S5Q                      SYS / # / OBS TYPES
R    4 C1C L1C D1C S1C                                      SYS / # / OBS TYPES
J    8 C1C L1C D1C S1C C5Q L5Q D5Q S5Q                      SYS / # / OBS TYPES
C    8 C2I L2I D2I S2I C5P L5P D5P S5P                      SYS / # / OBS TYPES
E    8 C1C L1C D1C S1C C5Q L5Q D5Q S5Q                      SYS / # / OBS TYPES
  2025    08    28    05    47   25.0000000     GPS         TIME OF FIRST OBS
 5 R01  1 R02 -4 R03  5 R12 -1 R13 -2                       GLONASS SLOT / FRQ #
Google Pixel 7 (Android 15) HW Year: 2020 HW Model:         COMMENT
Broadcom, BCM4776, GLL ver. 154.20.24 616640                COMMENT
                                                            END OF HEADER
> 2025 08 28 05 47 25.9199821  0 1                      
G10  22411354.54205    -55600.57805      2368.07305        29.85005
> 2025 08 28 05 47 26.9235693  0 1                      
G10  23486316.46105    -57968.84405      2367.94205        29.93305
> 2025 08 28 05 47 27.9235687  0 10                      
G10  23485684.79904    -60336.85504      2368.17204        28.82204  23485708.78213    -50396.07013      1768.01413        17.99513
G12  22802692.52423    -50428.00723      2363.76323        22.82623                                                                
G18  23255364.44623    105161.64323     -3476.00923        19.41423                                                                
R13  20645601.24823    -33341.51023      2506.35823        22.93523
R03  22407565.16524    -29681.42724      2142.14624        24.08824
J02  37310952.76522      3221.13322      -487.17722        16.81122
J03  37171226.99523     11949.98923     -1230.38323        19.58223
J07  37292369.83023      6600.85723      -862.82923        18.10323
C16  37991794.32823      4241.38823      -400.06123        20.72323
C26  24799822.34024    -22193.86224      2302.69924        27.55024
> 2025 08 28 05 47 28.9235682  0 10                      
G10  23485078.31904    -62704.94704      2367.54504        27.75904  23485110.09722    -52168.81622      1766.53122        15.81322
G12  22802091.74023    -52792.42523      2360.84023        22.78923                                                                
G18  23255807.24023    108635.65323     -3473.87423        21.04623                                                                
R13  20644984.27523    -35851.79323      2503.57123        23.10323
R03  22407020.14323    -31825.70523      2139.98223        22.28323
J02  37310892.20722      3707.88722      -489.32822        17.47222
J03  37171306.74022     13180.01522     -1233.60022        14.25022
J07  37292375.82523      7462.01423      -864.39223        17.95823
C16  37991727.47423      4643.21123      -402.95023        20.38623
C26  24799234.74724    -24497.34624      2302.48724        27.82824

GNSS Analysis

GNSS Loggerで取得したデータはGNSS Analysisを使って細かく分析できます。

https://developer.android.com/develop/sensors-and-location/sensors/gnss?hl=ja

https://github.com/google/gps-measurement-tools/releases

私の環境はWindows 11 ProなのでZipを落としてGnssAnalysisWindowsV4.6.0.1\for_redistribution\MyAppInstaller_web.exeを実行しました。するとMatLab?のランタイムのインストールなどが行われて、うまくいくと以下のような画面が起動します。

「Find Log File」ボタンを押して、GNSS Loggerで取得したTXTファイルを指定すると「Analyze and Plot」ボタンが有効になるので押しましょう。GNSS Loggerで取得したログが小さすぎるとエラーになったので、ある程度長い時間取得したファイルを指定するのがよさそうです。

読み込みが正常に終わると、衛星の情報などが表示されます。

各種グラフも自動起動しました。Skyplotなど一部データが表示されなかった原因はわからなかったのですが。。

Androidのスマホされあれば気軽に測位の世界に入門できるんだなぁとちょっと感動しました。

GNSSたまごくらぶ

Discussion