uBlox Library

Brian,
Given the availability of the Ublox GPS-RTK chips, I'm thinking of replacing my GPS subsystem connected to Teensy 3.2 and 3.5 devices. Do you think your library will hold up? I doubt you thought about position corrections data input back in '16. But, hey, you never know.

Sparkfun has an Arduino library to work with their boards, and I'll test that with the Teensy's. There likely will be one or two issues. But would love your thoughts, if you have any.
 
Brian,
Given the availability of the Ublox GPS-RTK chips, I'm thinking of replacing my GPS subsystem connected to Teensy 3.2 and 3.5 devices. Do you think your library will hold up? I doubt you thought about position corrections data input back in '16. But, hey, you never know.

Sparkfun has an Arduino library to work with their boards, and I'll test that with the Teensy's. There likely will be one or two issues. But would love your thoughts, if you have any.

My library works fine at receiving the high accuracy GNSS data that you'll get from applying CORS or RTK corrections. Be sure to download the latest from:
https://github.com/bolderflight/ublox-arduino

During the Begin method, it checks whether the UBX-NAV-HPPOSLLH packet has been received. If it has, then then it uses the higher accuracy position data instead of the UBX-NAV-PVT packet position data; although, it will still use the UBX-NAV-PVT packet for the date, time, velocities, etc. My library doesn't handle sending or receiving the CORS or RTK corrections, but that's typically done through the uBlox UART2 instead of UART1. We've done both RTK and CORS work with the ZED-F9P and use the ZED-F9P for most of our vehicles, so I'd be interested in hearing whether you run into any snags.

I'm not familiar enough with the SparkFun library to comment on it.
 
Brian.... thank you.

I'm going to set up a two unit test rig with some Teensy's and RFM69 radios. When I get that working, I'll shift over to the GPS stuff and set up a base station and rover. That's where your library may come in handy. In my case in the field, I need about 600m of LOS coverage and I can get that from the RFM69s with good antennas and base station elevation. Looks good on paper. But the real world is what it is.
 
Hello everybody!
Is it possible to analyze geolocation from satellites of all available systems by receiving only one uBlox package at a time?
If yes, how to do it? or does each system require 7 receivers to be configured and used?
 
Hello everybody!
Is it possible to analyze geolocation from satellites of all available systems by receiving only one uBlox package at a time?
If yes, how to do it? or does each system require 7 receivers to be configured and used?

I'm not sure if i understand your question. You need two pieces of info to geolocate with gps (or any gnss). You need the pseudoranges to your receiver, and the gps satellite positions associated with each of those pseudoranges. to get the satellite positions, one way is to read the binary (ubx) data from your receiver and convert it to Rinex nav file format using rtkconv, then convert the ephemeris data from the Rinex nav file to gps satellite position. you can also read the ephemeris via a rtcm stream from the receiver, and again use rtklib to decode it and convert to gps sat positions.
 
my task is to read the geoposition from different satellites at the same time.
for example, analyzing the flow of GPS and Glonas at the same time, perhaps some more constellations
how to do it?
 
One way:
1. Connect a ublox receiver to a PC.
2. Open either the U-Center or pygpsclient application.
3. Configure the ublox for the GNSS constellations you want to use.
4. Read the geolocation (lat, long, alt) from the app.
 
I'm trying to simplify the program for further porting to another processor. For tests I use Teensy 4.0.
problem here

/
Code:
/ CFG-PRT (0x06 0x00) Get/Set Port Configuration for UART
    uint8_t const SET9600B_CFG_PRT[28]   =    {0xB5, 0x62, 0x06, 0x00, 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x08, 0x00, 0x00, 0x80, 0x25, 0x00, 0x00, 0x07, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0xB5};
    uint8_t const SET460800B_CFG_PRT[28] = {0xB5, 0x62, 0x06, 0x00, 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0xD0, 0x08, 0x00, 0x00, 0x00, 0x08, 0x07, 0x00, 0x07, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0xBC};
    uint8_t const SET115200B_CFG_PRT[28] = {0xB5, 0x62, 0x06, 0x00, 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0xD0, 0x08, 0x00, 0x00, 0x00, 0xC2, 0x01, 0x00, 0x07, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7E};

 Serial1.write(SET9600B_CFG_PRT,28);
 while (29 > Serial1.availableForWrite()){}

for my stand, the maximum speed is 115200 due to the length of the USB cable (5 meters)
for speed 115200 I took from here by analogy for both 9600 and 460800 which I took from post #19
Безымянный4.png
https://forum.pjrc.com/threads/36103-uBlox-Library?p=169511&viewfull=1#post169511
my receiver NEO -M8
The original example works.
setting any of the three speeds causes the Receiver to freeze. what's my mistake?
 
Hooray! earned! needed at the beginning:
Code:
void setup() 
{
  Serial.begin(230400);
  while ( !Serial && (millis() < 10000)) ; // wait until serial monitor is open or timeout 10 seconds
  gps.begin(9600);
  //gps.SetGPSbaud(115200, true); 
 // Serial1.write(SET115200B_CFG_PRT,sizeof(SET115200B_CFG_PRT)); 
 Serial1.write(SET460800B_CFG_PRT,sizeof(SET460800B_CFG_PRT));   
  while (29 > Serial1.availableForWrite()){}
  gps.end();
  //gps.begin(115200);
  gps.begin(460800);
 
it does not work, I put any numbers from 10 to 10000!
Code:
gps.SetRATE(1000,1000, true);                 // Navigation/Measurement Rate Settings, e.g. 100ms => 10Hz, 200 => 5.00Hz, 1000ms => 1Hz, 10000ms => 0.1Hz

It works
Code:
 uint8_t const _SET_RATE [14] = {0xB5, 0x62, 0x06, 0x08, 0x06, 0x00, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, 0x79, 0x10};
.......
Serial1.write(_SET_RATE,14);
  while (15 > Serial1.availableForWrite()){}
 
it does not work, I put any numbers from 10 to 10000!
Code:
gps.SetRATE(1000,1000, true);                 // Navigation/Measurement Rate Settings, e.g. 100ms => 10Hz, 200 => 5.00Hz, 1000ms => 1Hz, 10000ms => 0.1Hz

It works
Code:
 uint8_t const _SET_RATE [14] = {0xB5, 0x62, 0x06, 0x08, 0x06, 0x00, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, 0x79, 0x10};
.......
Serial1.write(_SET_RATE,14);
  while (15 > Serial1.availableForWrite()){}

gps.SetRATE should only take 2 varialbes - rate, bool so probably should try

gps.SetRate(1000, true);
 
@mjs513
Yes! I was wrong, but anyway I'm glad that the second option works because it suits me better. I plan to port to another processor in the future.
I apologize for misleading you! it's good that you fixed it in the Git library

Now I'm working on the Almanac. Any thoughts? i really need the other receiver to start in HOT or WARM mode
 
Last edited:
@mjs513
Yes! I was wrong, but anyway I'm glad that the second option works because it suits me better. I plan to port to another processor in the future.
I apologize for misleading you! it's good that you fixed it in the Git library

Now I'm working on the Almanac. Any thoughts? i really need the other receiver to start in HOT or WARM mode

Really have no idea on the almanac - I usually use assistnow from Ucenter. You might want to try Ublox forum: https://portal.u-blox.com/s/v and do a search to start
 
I have just started reading the documentation for my receiver, English is not my native language - the process of studying the documentation is moving very hard.
It doesn't matter to me if it's the Almanac or something else.
My task:
I have two receivers, the first works constantly, the second has no power. As soon as I connect the second receiver to the system it should go to mode 3-fix in a few seconds.
I am currently simulating bad conditions by placing receiver NEO 8M next to the flowers on the windowsill. The cold start time is 90 seconds. It's a lot! i need a few secondsr. I'm looking for a way.
Do I need to use any other receiver or several? I need help!
 
Back
Top