My name is Yuriy, I am a surveyor. I started to develop my own gps receiver because of this post, which I encountered accidentally on a surveyors message board. As you will see this post inspired me a lot :). Partly because I got sick and tired of winter surveying in Alberta, partly because it seemed like easy to built your own gps at low cost and it looked like a good hobby.

This has been my hobby for last 7 years, and it turned out not to be so easy to develop the system and not cheap either. Every summer, during system development, I was dreaming about fall to come, the time I was moving to Canada for work. Now walking in deep snow, cutting trees down the boundary lines was a good thing because I did not have to torture myself with the system development.

Eventually I build 14 receivers and the only thing left do to is to certify the units and register a company or become a sole proprietor.

It is strange that for some reason I do not care if this hobby materializes as business. The only thing that brings me peace of mind is that I am done with it. After all surveying is more enjoyable lifestyle than sitting at home soldering wires, casting plastic enclosures, staring at the pc screen all the time.

Bellow is the entire story from the very beginning:




I purchased an oem gps module, voltage regulator, signal level converter, as it was specified in the message and started to experiment. I had no knowledge in electronics so I started from scratch. Most of the information about how electronics components work I took from data sheets, wikipedia and google. Eventually I connected the module to a pc and when I saw first several lines of binary messages on terminal screen I thought I achieved something extraordinary :), for me that was quite a step.
picture1 picture2
oem board (left) transceiver with caps and DB9 connector (right) All in a metallic box




My next step was to write a program that would control gps, show info about tracked satellites, and write data to hard disk. After that I had to write a program that would generate RINEX files from the data stored on disk. After I spent entire summer learning C++ programming and serial communications I developed a data collection program and RINEX converter. Parsing binary files and forming RINEX files turned out to be a very laborious task. I spent a lot of time studying GPS interface manual before I decoded ephemeris. Eventually a had a system that I could survey with:

picture3 picture4
data collection program




In order to get rid of a laptop, which was part of my system, I had to build a compact circuit that would control gps, write data to a memory card, signal system status with LEDs, monitor batteries charge level etc. I found out about microcontrollers, purchased a development kit and a compiler and started to learn this new world. I added to my system a chip that monitors batteries charge level, checks power button, signal level converter, signal lines switch chip etc. When I build my first prototype on a card board and it worked that was quite a feeling:)

Turning a cardboard into a pcb was not easy either. Found program called eagle, learned how to use it, designed PCBs, eventually generated gerber files, sent them the to the factory and in a few weeks received my PCBs with components soldered. Because of my numerous errors each version did not work properly. Every year I was developing a new version. Only third version works fine.
picture5 picture6
1. Development kit 2. First cardboard prototype, no laptop is needed

picture7 picture8
3. First pcb version, (top two boards) 4. Second version

picture33.JPG
5. Third version, all on one board




Now I wanted to make a nice plastic enclosure. So first I had to design it. I learned 3d commands and drafted pcbs then 6 batteries underneath, and than wrapped everything with ellipsoid shaped surface. It took me 1.5 month.

Now I had to materialize this enclosure in real world. I was going to cut the model in thin layers, print each layer on a plastic sheet, cut each sheet along printed lines and clue cutouts together building up real enclosure - that was my crazy idea. But I was lucky to find out that 3d printers exist :). That was quite a discovery for me. I found several vendors, sent them my files and received a few quotes. Ordered and in a few weeks I received my materialized parts. That was cool to hold in your hands what was only in you dream a short time ago.

Now I had to make a mold and cast copies of my parts. For this I build a vacuum and pressure chambers, purchased liquid plastic and rubber from smooth-on and started. It took 6 month to learn mold maling and casting and cast 35 enclosures
picture9 picture10
1. Learningthread fundamentals and drafting took 2 weeks 2. CAD model sent to the vendor
picture11 picture12
3. Parts received from the vendor, cost me 800$ 4. The company sanded off more plastic than was needed while finishing. I was fixing this by myself for like 20 days. Was not very happy
picture13 picture13a
5. Same story with these edges 6. Attaching holders for battery clips
picture14.jpg picture15.jpg
7. Converted paint pot into pressure chamber  8. Home made vacuum chamber 
picture16.jpg picture17.JPG
9. Making mold for a part. 10. External wall shifts up, clay is removed and second half of the mold  is poured
picture18.JPG picture19.jpg
11. Making vents 12. Plastic injection
picture20 picture21
13.Removing the part 14. Almost ready
picture22.JPG picture23.JPG
15. I tried this bugger 12 times before I got it fault free 16. The end of six month story




I did not want to depend on the antenna manufacturer so decided to build it by myself, just one more crazy idea :). Started from here www.antenna-theory.com since I did not know anything about antennas. Decided to build a patch antenna because they are made in similar way the PCBs are made, so I could order them at the same factory.

Tried 4 probe patch antenna but realized that the EM field of the antenna was affecting a hybrids bellow it, a device that makes 90 degrees delay in phase, which I was designing by myself as well. To keep hybrids intact I needed 14mm spacing bellow the antenna. Did not have enough room in the enclosure to place hybrids this way so build a single probe gps antenna. Right Hand Circular Polarization in such antennas is achieved by adding a slot in the radiator located at 45 egrees to the probe.

The best horizontal phase center stability is achieved by using 4 probes (Trimble zephyr) or a spiral array (Novatel Pinwheel). Antenna took me 5 month to learn design and build.
picture24.JPG picture35.JPG
Isolagranted me 2 sheets of high frequency  laminate Modeling the antenna, added second slot and that improved axial ration of the antenna a lot
picture36.JPG picture37.JPG
Materialized antennas Soldered coax cables




Seems like easy but not at all, again spent lots of time designing the switch and lots of money for making it.

When a vendor sent me switches the layers did not stick together bellow LEDs because my design did not leave enough room. Manufacturer agreed to fix it by cluing but the clue spoiled the graphic layer on 20 switches so only 30 look relatively good. These 50 switches cost me 1500 US$ (which is a good price though, 30$ per switch). Design is very important stage, the design errors can not be always fixed !, I learned that hard way - from my errors.
picture25.jpg picture26.jpg
My schematic and explanations sent to the manufacturer
My artwork
picture27.JPG picture28.JPG
Materialized switches Lemo granted me this socket, water-pressure -dust prof



After wires soldered to battery clips, bluetooth modules and lemo sockets it takes 2 days to assemble 1 receiver.

picture60.JPG picture61.JPG
battery clips and wires cut for soldering

picture62.JPG
picture48.JPG
programming bootloader into my processor, after that my firmware can be updated via serial cable, no programmer will be needed
left to right: main board + mem card board, bluetooth, lemo socket, battery termnals, antenna, memory card cable, enclosure

picture49.JPG picture51.JPG
shrinkwrapping wires
picture52.JPG picture53.JPG

soldering bluetooth and lemo socket wires to my pbc
picture54.JPG picture55.JPG
checking if bootloader works before closing the enclosure
picture56.JPG picture57.JPG
antenna positioned in place, antennas in all receiver are positioned in the same direction
final power check



As there is no better flashlight than maglight, there is no better case than pelican :). So I took the appropriate one, than I built a device for foam cuttingsimilar to this oneand in three days finished

picture38.JPG picture39.JPG
Sells like this Template attached

picture40.JPG picture41.JPG



For software developnet I use NetBeans IDE + g++(compiller)  + Qt (graphical user interface), all open source. Uncomparable to Micforoft Visual Studio. NetBeans also supports JavaScripts, of course Java itself, and even CSS stylings. I like this idea of one IDE for many programming languages



.... It has been a while since I wrote here, have not been able to find any time for this yet. I just wanted to update this page before I start developing my own RTK program. In last 1.5 years I have had my antenna calibrated, wrote a datacollection app for java phones and also spent about seven month learning math necessary for RTK program development....

so I will start with antenna calibration:
Any GNSS antenna is not geodetic if it does not have calibration -  a table which has horizontal and vertical electrical phase center offsets in relation to some reference point, (center of bottom of ant mount), same table also has vertical variations of the phase center as a function of satellite elevation, from 10� to 90�, with 5� step.

One of the organizations that does antenna calibration isNGS. Even dreaming about your home brew antenna being calibrated by such company is already naive :). I wrote them a letter describing my gps story and to my biggest surprise the organization agreed to calibrate my antenna and they also did it for free!. I would like to mention names of the people who did the calibration but I do not know if it is appropriate. I really appreciate the wonderful job they have done and this is the best gift I have ever had during the system development. I can not imagine something like that happen in my country.

So I have chosen 4 receivers, got the antenna RF cables out of them and shipped the receivers to USA and sometime in February 2012 I got the results.
picture69.JPG picture70.JPG
On the background the receiver has lemo connector installed, which I had to remove in order to get the antenna RF cable out of the receiver I built special adapter cable between MCX connector type and N type
picture71.JPG picture72.JPG
Now the antenna inside my receiver can be connected to an external GNSS receiver used by NGS Everything is ready for shipment for calibration, shipped by the cheapest and lowest priority mail option by Ukrposhta

Bellow is the relative calibration for my receiver. The first part contains average values of phase center variations from three antennas. In the second part of the table there are errors calculated from the average for each variation value. The NGS tolerance is 1.0mm. Unfortunately for my antenna the errors are 1.4mm (marked in red). Because of this my antenna is not published on NGS website. It is sad, but what can you do..., 0.4 mm out of tolerance. I should have centered the antenna better inside the receiver and should have positioned it vertically better as well, but I was not fussy enough. In the next version of antenna and plastic enclosure I will design better antenna holding system, if I ever get to that point.

MRAN1+NONE              
      -1.2       0.0      75.3
   0.0   0.4   1.2   2.3   3.4   4.4   5.1   5.5   5.5   4.9
   3.9   2.3   0.3  -2.1  -4.8  -7.7 -10.6   0.0   0.0
       0.0       0.0       0.0
   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0
   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0


rms -  3  measurements
       0.8       1.4       0.7
   0.0   0.1   0.2   0.1   0.1   0.1   0.2   0.2   0.2   0.1
   0.1   0.2   0.2   0.3   0.5   0.8   1.4   0.0   0.0
       0.0       0.0       0.0
   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0
   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0




This story is more sad than the previous one, because it does not have that big good part in it as the previous one :).

In spring 2012 I spent about two month for developing and testing the MiraField program, this year I spent a few weeks modifying it. Last year I did not do enough tests and I thought there is no problems with kinematic methods in open areas. This year I tested it on a real project and realized the the kinematic is a total disaster. The problem is not with MiraField program, there must be a problem with the raw data, I think it is with the overflow of cycle counter which jumps by 1575420 every 15 minutes, similar happens to preudoranges - the counter jumps by one light millisecond. But, on the other hand, this is not a big problem since there is no cycle slips, this is just counting that starts from a new number - it is easy to fix.

I tried to fix those jumps in my Mirаpract Tools program but I did not have any positive results yet, and it might be that I will not have solution ever. I processed data in Trimble Business Center and GNSS Solutions, and in both cases the results are bad. I hope to find the problem when I develop my own RTK program, this is described bellow in new section.

If you have nothing to do and want to play with my kinematic data in some other program - the raw data are bellow, and if you could share your results with me that would be great :)

kinematicRawData.zip (3.7Mb) 

Unlike Kinematic, Static method works perfect.




Last summer I was learning math the RTK is based on. After I finish this page I start developing my own RTK program for Android OS. I plan Network RTK version. I think RTN networks give a big second chance for life for L1 receivers again, since networks know all of the delays to GNSS signal.

If the rover is standing still than it is relatively easy to resolve ambiguities, because ambiguities in double differences do not change (theoretically) - satellites move, ambiquities do not change - this is a beautiful property. I know the equations, so I hope I eventually will make it to the floating ambiguities, then using LAMBDA method I hope to find fixed ambiguities and than by Kalman filtering I will be trying to find vector components. But this is not really RTK. When the receiver is not moving, even if the solution takes place in real time, and even if initialization happens in, say 20s, this is more static in real time to me than RTK, because initialization is not valid when the receiver starts moving, initialization has to begin from scratch at new point. The book I am learning from describes only this type of RTK.

I have no idea how to maintain cycle counting when rover is moving from one point to another, or how to get initialization itself on the move. On-the-fly ambiguity resolution is my very far goal... and this is the essence of RTK. How many month or years will it take me to the goal I do not know and I do not want to think about sad things at the beginning of this new adventure.....







If you want to drop me a few lines this is my address: rtnfriend@gmail.com