I2C GPS support for Nvidia Jetson Nano (Python implementation)

Good evening everyone,

I am currently designing a miniaturized, mobile hardware solution that can geotag (using GPS RTK functionality) photographs on-the-fly. This will serve as an initial proof-of-concept as part of my PhD research project.

I’m strongly considering a Nvidia Jetson Nano as it provides the required number of USB3.0 ports for the Basler cameras (Basler provides a Python API for controlling the camera), alongside I2C, UART and USB interfaces for connecting a GPS sensor. For the GPS - or more accurately, the GNSS - sensor/module, I am in the process of designing a RTK base station using SparkFun’s [GPS-RTK2 Board - ZED-F9P as per their [detailed tutorial. The GPS module also comes with a very handy I2C connection that makes the process to acquire the new readings significantly easier, compared to a serial or a [UART interface (which is also supported alongside the I2C interface). With the real-time GPS datastream, the photographs’ Exif metadata can be modified on the Nano (also using Python) directly after photographs are captured. I’ve used a serial-based GPS implementation on a Raspberry Pi in the past (~2 years ago), with poor real-time performance when having to alternate between parsing the serial datastream and capturing photographs (tinkered with wireless GoPro’s back then) - hence the strong preference for I2C functionality.

On SparkFun’s [GitHub page which provides the required Ublox Python libraries (including support for the the ZED-F9P GPS module I’m planning to use), it is noted that only the Raspberry Pi platform is supported at this stage. The last updates to the GitHub page is however approximately 7 months old, so I’m not sure how accurate the platform support information is at this stage. The [Qwiic I2C dependant library is supported for the Jetson Nano, so the lower level I2C firmware is compatible with the platform.

My question is thus if anyone has been able to successfully interface the ZED-F9P GPS module (or any other similar modules as noted on the [GitHub page) using I2C on a Nividia Jetson Nano or similar Nvidia development kit. Available information on the internet is severely limited especially for Nvidia’s development kits, which is not commonly used together with GPS module. Or perhaps there is a 3rd party Python package that has been developed to support the Ublox / GPS modules? Any information would be highly appreciated.

Thank you and kind regards,

Andre Broekman :ugeek:

Department of Civil Engineering, University of Pretoria - all the way from sunny South Africa :)](GitHub - sparkfun/Qwiic_Ublox_Gps_Py)](GitHub - sparkfun/Qwiic_I2C_Py: Python package to support multi platform I2C bus integrations)](GitHub - sparkfun/Qwiic_Ublox_Gps_Py)](https://www.jetsonhacks.com/tag/gps/)](GPS-RTK2 Hookup Guide - SparkFun Learn)](SparkFun GPS-RTK2 Board - ZED-F9P (Qwiic) - GPS-15136 - SparkFun Electronics)

Unfortunately, we do not have a direct solution available for implementation. However, I would suggest that you could look into any Linux and python tools you could use to parse the GPS data. Try reading this tutorial we put out several years ago: https://www.sparkfun.com/tutorials/403

Thank you for the reply Brandon, that looks like a promising start! Handy alternatives to use will be the gpsd daemon that I know works on a [RPi 4 in addition to some of the earlier [Nvidia SBC’s. I’ve also come across a [few examples to implement Python’s threading, minimizing the time required to parse the data for time sensitive applications. Will post any developments on a working implementation on this thread, planning to have some of the hardware up and running by (hopefully) the end of the year, barring any additional delays.](Python GPS Module: Reading latest GPS Data - Stack Overflow)](https://www.jetsonhacks.com/2015/09/03/level-shifting-uart-and-gps-part-3-nvidia-jetson-tk1/)](https://maker.pro/raspberry-pi/tutorial/how-to-use-a-gps-receiver-with-raspberry-pi-4)