Reference

1. Basics of Positioning

1.1 Common Positioning Systems

GPS
Basic GPS positioning uses four satellites to determine 3D coordinates. Signal delays through the ionosphere/troposphere cause errors (~10m).

GNSS
Global Navigation Satellite System (GNSS) provides global 3D position, velocity, and time data via satellite radio navigation.

BDS (China)
BeiDou Navigation Satellite System offers decimeter/cm-level accuracy, 0.2 m/s velocity precision, and 10 ns timing accuracy.

GPS (USA)
Global Positioning System delivers global location, speed, and time data.

GLONASS (Russia)
Russia’s global satellite navigation system, similar to GPS.

Galileo (EU)
EU’s global satellite navigation system.

QZSS (Japan)
Quasi-Zenith Satellite System enhances GPS in the Pacific region, especially in urban canyons.

RTK
Real Time Kinematic (RTK) uses carrier-phase differential measurements. A base station transmits correction data (RTCM) to rovers for real-time cm-level accuracy.

1.2 Data Transmission Diagram

8ddf609c6b735406ded7f722c804b6d5.png

1.3 Positioning Basics

  • Control surveys (e.g., engineering, topography)
  • Topographic mapping
  • Construction staking

1.4 NMEA Data Parsing

Modules output NMEA 0183 messages (e.g., RMC, GGA). Example GGA data: $GNGGA,063924.000,3037.643956,N,10348.010829,E,5,34,0.46,507.909,M,-32.181,M,1.0,3335*76

Field Name Description Example
0 Identifier Start character ($) $
1 System $GP (GPS), $GL (GLONASS), $GN (GNSS) $GNGGA
2 Sentence ID GGA (Global Positioning System Fix Data) GGA
3 UTC Time hhmmss.sss 063924.000
4 Latitude ddmm.mmmmmm 3037.643956
5 N/S Indicator N (North), S (South) N
6 Longitude dddmm.mmmmmm 10348.010829
7 E/W Indicator E (East), W (West) E
8 Position Fix 0=Invalid, 1=GPS, 2=DGPS, 4=RTK Fixed, 5=RTK Float 5
9 Satellites Used Number of satellites 34
10 HDOP Horizontal Dilution of Precision (lower = better) 0.46
11 MSL Altitude Meters above Mean Sea Level 507.909
12 Units M (meters) M
13 Geoid Separation Geoid height above/below WGS84 ellipsoid (m) -32.181
14 Separation Units M (meters) M
15 Differential Age Age of RTK corrections (valid for RTK only) 1.0
16 Base Station ID Reference station ID 3335
17 Checksum *+ hex value *76

Full NMEA 0183 Reference

2. Product Features

  • LoRa Data Transmission: Utilizes LoRa wireless technology for stable, long-range, and low-power communication of RTCM correction data between the base station and rover(s).

  • User-Friendly: Designed for ease of use with a pre-configured data link, enabling rapid setup and operation right out of the box.

  • Low Cost of Use: Provides an accessible entry point into high-precision positioning technology, minimizing initial investment and complexity.

  • Centimeter-Level Accuracy in Open Areas: Achieves high-precision centimeter-level positioning under optimal open-sky conditions.

  • Single Base Station Supports Multiple Mobile: One base station can broadcast correction data to several Mobile units simultaneously, improving efficiency and scalability.

3. API Description

/**
 * @fn getUTC
 * @brief Get UTC, standard time 
 * @return sTim_t type, represents the returned hour, minute and second 
 * @retval sTim_t.hour hour 
 * @retval sTim_t.minute minute 
 * @retval sTim_t.second second 
 */
  sTim_t getUTC(void);

/**
 * @fn getDate
 * @brief Get date information, year, month, day 
 * @return sTim_t type, represents the returned year, month, day 
 * @retval sTim_t.year year
 * @retval sTim_t.month month 
 * @retval sTim_t.day day 
 */
  sTim_t getDate(void);

/**
 * @fn getLat
 * @brief Get latitude 
 * @return sLonLat_t type, represents the returned latitude  
 * @retval sLonLat_t.latDD   Latitude degree(0-90)
 * @retval sLonLat_t.latMM   The first and second digits behind the decimal point 
 * @retval sLonLat_t.latMMMMM Latitude  The third and seventh digits behind the decimal point 
 * @retval sLonLat_t.latitude Latitude value with 7 decimal digits
 * @retval sLonLat_t.latDirection Direction of latitude
 */
  sLonLat_t getLat(void);

/**
 * @fn getLon
 * @brief Get longitude 
 * @return sLonLat_t Type, represents the returned longitude
 * @retval sLonLat_t.lonDDD  Longitude degree(0-90)
 * @retval sLonLat_t.lonMM   Longitude  The first and second digits behind the decimal point
 * @retval sLonLat_t.lonMMMMM Longitude The third and seventh digits behind the decimal point
 * @retval sLonLat_t.lonitude Longitude value with 7 decimal digits
 * @retval sLonLat_t.lonDirection Direction of longitude 
 */
  sLonLat_t getLon(void);

/**
 * @fn getNumSatUsed
 * @brief Get the number of the used satellite used
 * @return uint8_t type, represents the number of the used satellite
 */
  uint8_t getNumSatUsed(void);

/**
 * @fn getAlt
 * @brief Altitude information
 * @return double type, represents altitude 
 */
  double getAlt(void);

/**
 * @fn getSep
 * @brief At the height of geoid
 * @return double 
 */
  double getSep(void);

/**
 * @fn getHdop
 * @brief Indicates the horizontal accuracy of positioning
 * @return double
 */
  double getHdop(void);

/**
 * @fn getQuality
 * @brief message Quality
 * @return uint8_t 
 */
  uint8_t getQuality(void);

/**
 * @fn getSiteID
 * @brief The site id of differential gps data, commonly used for differential gps positioning
 * @return uint16_t
 */
  uint16_t getSiteID(void);

/**
 * @fn getDifTime
 * @brief The number of seconds in which a differential signal was last received
 * @return double 
 */
  double getDifTime(void);

/**
 * @fn setModule
 * @brief Set the Module
 * @param mode 4G or lora
 */
  void setModule(eModuleMode_t mode);

/**
 * @fn getModule
 * @brief Get the Module run mode
 * @return eModuleMode_t 
 */
  eModuleMode_t getModule(void);

  /**
   * @fn transmitAT
   * @brief Interface for transparent transmission of gnss commands
   * @return char * return commands
   */
  char * transmitAT(const char* cmd);

/**
 * @fn getGnssMessage
 * @brief Get different types of gps data
 * @param mode eGnssData_t type
 * @return char* 
 */
  char * getGnssMessage(eGnssData_t mode);

/**
 * @fn getAllGnss
 * @brief Get GNSS data, call back and receive
 * @return null
 */
  void getAllGnss(void);

/**
 * @fn setModuleBaud
 * @brief Set the Module Baud rate
 * @param baud eModuleBaud_t
 */
  void setModuleBaud(eModuleBaud_t baud);

/**
 * @fn setLoraBaud
 * @brief Set the recevie Lora Baud rate
 * @param baud eModuleBaud_t
 */
  void setLoraBaud(eModuleBaud_t baud);

/**
 * @fn getModuleBaud
 * @brief Get the Module Baud rate
 * @return uint32_t Baud rate of serial communication
 */
  uint32_t getModuleBaud(void);

/**
 * @fn getLoraBaud
 * @brief Get the Lora Baud rate
 * @return uint32_t Baud rate of serial communication
 */
  uint32_t getLoraBaud(void);

/**
 * @fn setCallback
 * @brief Set callback function type
 * @param  call function name 
 * @return null
 */
  void setCallback(void (*call)(char *, uint8_t));

Was this article helpful?

ON THIS PAGE

TOP