I have been busy hacking the tracker. Now it can connect to a server on the internet, it can function as an igate or digipeater and it tracks positions nicely.
Tracking is quite like the Polaric Tracker. Every 10 second it checks the position (from the GPS module) and depending on the speed, distance between previous position, etc. (smart beaconing) it decides if it should transmit the position on APRS. Now we want to try it: Putting it in a (Sparkfun) cardboard box, with antenna, battery and GPS (see the picture) allows it to be tested “in the field”.
As an experiment, we allow adding a compressed version of the the “previous” position report to the current packet (in the comment field). This adds some redundancy that can increase the chance that a position report isn’t lost. This is useful when we want to see a trail on the map to visualise where the tracker has moved in the past minutes. In addition, we can add an extra position report to packets when direction changes. I.e. when a turn is detected and a packet is transmitted, the position 10 seconds ago is added, allowing trail more precisely follow the actual path. The format of these extra reports is simple: A compressed timestamp and a compressed position, along with a proper prefix. The Polaric Server was updated to support this format in received packets. Note that with this scheme, timestamping of APRS reports is essential (I guess the Mic-E format is not an option).
The result is promising. Sometimes the improvement of the trails can be quite amazing. Other times there is little difference. It depends on the coverage in the area, moving speed, etc.. The picture below shows a test drive. The pink squares mark the positions that was received as redundant reports (11 of 35 positions).
Now, can get the tracker to connect to the internet and use this to improve things more? The ESP-12 with NodeMCU can easily open connections to servers on the internet. Typically APRS/IS servers which can be used to push APRS packets.
It was a bit tricky to implement functions on the Teensy to connect to the internet since the ESP-12 is a separate unit and we need to use a serial port to connect the modules. In addition the ESP-12 is very memory limited, but after some tweaking it works and we can easily open internet connections. A telnet like command was made to test it.
The next step is to implement an igate. This is done as a thread that opens a connection to an APRS/IS server and logs into it. It then it starts another thread that listens for incoming APRS packets. Incoming packets are checked and if certain criteria are met, passed on to the APRS/IS server with proper modifications to headers. In addition to subscribing to packets from the receiver, the igate module also subscribes to packets from the tracker. Why? The idea is that, tracking packets can be sent directly to APRS/IS: Packets that are transmitted on radio are passed to APRS/IS as if they were igated from radio. In addition the tracker can send packets more often, typically every 10th second, but only to APRS/IS. This allows a more detailed track to be collected when the tracker has access to the internet and still use the radio when not.
The picture below shows a test walk around the block. I activated the WIFI hotspot on my smartphone so I could keep the internet connection. The position packets that were actually sent on radio are distinguishable by looking at the APRS paths, and marked on the map with blue dots. We can see that the improvement is quite significant.
A later step will be to store the trail log in the tracker when moving and when it is in range of a WIFI access point it can connect to the internet and upload the positions automatically.
The source code is available on GitHub, for the main MCU firmware and the ESP-module.