It is truly impressive what a simple, inexpensive USB GPS module (costing less than 1,000 JPY) can achieve when set up properly. As shown in the attached image, I just placed it by my window, and it successfully tracked the precise orbits.
It’s always a joy to see such clean data from such modest equipment!
QZSS (Quasi-Zenith Satellite System), or “Michibiki,” is a Japanese satellite constellation designed to enhance GPS in the Asia-Oceania region.
The reason for this “figure-eight” pattern is that these satellites are in a specialized “high-inclination” orbit. They are designed to spend most of their time near the zenith (directly overhead) in Japan, which is why their ground track forms that distinct shape over time. It’s effectively a stationary-like performance despite the movement!
Also, I have attached a screenshot of the GPS module data currently running on the same Linux machine (LMDE 7) just for reference. It is working very smoothly.
In addition to the QZSS ‘figure-eight’ pattern, I’m getting great results with other constellations as well. Here is a screen recording of my Linux system tracking them all in real-time.
Following up on the QZSS/GPS tracking discussion, I wanted to share the simple Python script I’m using to capture the raw NMEA data.
It’s a straightforward approach: it reads the stream from my u-blox 7 module, filters for the NMEA data, and logs it to a text file for further analysis.
Python
import serial
# Configure your port and baudrate accordingly
PORT = '/dev/ttyACM0'
BAUDRATE = 9600
OUTPUT_FILE = 'my_gps_log.txt'
try:
with serial.Serial(PORT, BAUDRATE, timeout=1) as ser:
print("--- Start Logging ---")
with open(OUTPUT_FILE, 'a') as f:
while True:
# Read a line from the GPS module
raw_line = ser.readline()
# Decode to ASCII, ignoring errors
line = raw_line.decode('ascii', errors='ignore')
# Filter and save/print data starting with '$'
if line.startswith('$'):
print(line.strip())
f.write(line)
except Exception as e:
print(f"Error: {e}")
It requires the pyserial library (pip install pyserial).
This script has been the foundation for the tracking visualizations I shared earlier. If you’re looking to start your own DIY satellite tracking project on Linux, this is a great place to begin!
Has anyone else built similar loggers using different approaches or languages?