-
-
I went for a nice run this morning and the area of the run had good GPS horizons and 5-6 satellites were used during the run. Subsequent viewing of the recorded track revealed position errors that were certainly greater than a few meters.
I really did not think SBAS was working and so I wanted to try using the CAS command ($PCAS15,4,FFFF*31) that I had originally used and had great results with on my 2km test area.
So, I reverted back to that command and ran the 2km test where I went up the hill on one side of the road and back down on the other side (always facing traffic).There were 8 satellites used in this test. The distances measured were good and the plotted positions showed a significant improvement over the last run along this track (using my revised CAS command) and almost as good as the initial SBAS test. The CASIC spec uses this command ($PCAS15,4,FFFF*31) as an example, so maybe my modified command to accommodate more satellites is invalid even though there are more satellites actually in use.
There are various reasons that could explain the differences and as Gordon noted, a head-to-head test is really needed. For what it's worth, I'll continue using this iteration for the next few runs to see how things go. When plotting a run on Google maps, it is easy to see the errors.
-
I really don't understand the conditions under which the PCAS commands are effective. I have spent many hours in trial and error experimentation. For example turning NMEA message on and off only works under certain conditions. Also, using D29 vs setGPSPower makes a difference. I found that when D29 is used to turn on GPS, GPS still runs after exiting the app. isGPSon() does not report correctly in that case, either.
I did another 2km test yesterday over the same course and I found the position errors were larger than from two days ago. The distance measured was still fairly accurate. Looking at the satellites used, yesterday there were 5, while two days ago, there were 9 - 12 satellites used, with 9 satellites used only for a few seconds.
-
I have looked into the problem that uname had with this app; I think that it is caused by the GPS not being on. It works fine with my Bangle 2 with 2v12.92 but I don't know if that is the difference.
In order to make the CAS commands to the GPS to work, I was writing to D29 to turn GPS off and on. I had found that turning D29 off was necessary to get the CAS commands to work. Now, I have found that setGPSPower(1) works for turning GPS on and keeping the changes. So, I have made a new revision, 0.70. Hopefully, it solves uname's problem.
On the whole, I have found that a lot of trial and error was required, even after much research to customize the GPS system. It's been quite the experience. Now, I hope I haven't broken something else. I will run a quick test tomorrow (today now, actually) to see if the GPS will still produce the nice results.
-
I have used my GPS app twice now since I added the command to turn on the use of SBAS satellites and I think AT6558 may be actually using them. This is my impression after looking the results of two sessions with the changed app. I also tried logging NMEA messages and checking for the presence of the SBAS satellites but I can't find any sign of them. I use GPS and Beidou satellites and those are present in the NMEA messages.
The NMEA message logs shows that the AT6558 software version is SW=URANUS5,V5.3.0.0. A CASIC spec that I have says:
CAS15 Satellite system control commands, you can configure whether to receive any satellite in the system Subsequent versions of V5200 support this command
An example of this command from the spec:
$PCAS15,4,FFFF*31, turn on satellites 1-16 of SBAS, that is, PRN=120-135
So, it would appear that the AT6558 in the Bangle.js 2 supports SBAS corrections. Since WAAS (SBAS) can be used for aircraft landing systems, the typical position error of 2m horizontally would be quite an improvement. But, as I could not find any evidence that the Bangle can actually use SBAS, I decided to try it out and see what happens.
Unfortunately, I did not do this test in a controlled manner, but for me the results show much fewer and smaller position errors than what I had experienced before. So far, I have recorded a short 2km walk going up a hill on the left hand side of the road, and then turning around at the 1km mark and returning to the start point on the opposite side of the road (always on the left facing traffic). The recorded tracks show no crossovers, although there is one small section where there was convergence. I then mapped this walk online on the gmap-pedometer site. The distances compare favourably.
Since I added the PCAS15 command to the app, I discovered that there are more than 16 SBAS satellites in service. I have changed the PCAS15 command to:
$PCAS15,4,7FFFF*06
so 19 satellites (up to PRN 138) can be used. With this new version, I ran just over 10km this morning in hilly terrain with varied tree cover. The horizons were variable so all in all, not great GPS environment. Viewing the track up close on a computer screen shows no gross errors. This is definitely a noticeable change from previous runs in this area. I am very impressed with the Bangle.js 2 GPS now.
Once again, this was not a controlled test, but there is a definite improvement over my previous uses of this app. It may be coincidental with my software changes, but I just want to let people know that this Bangle.js 2 watch is capable of good positioning. Also, maybe others will be encouraged to try this PCAS15 command. It would be good to know if it actually works.
-
-
-
I made a couple to changes to the app today.
Race uses GGA NMEA messages so I turn off all other NMEA messages. The app now turns all the NMEA messages back on when exiting.
I noticed that the GPS chip has potential for using SBAS satellites for improved position accuracy. I don't know if the Bangle has the capability or not but the app now issues a $PCAS15,4,FFFF*31 command to turn these satellites on.
-
-
I have uploaded my Bangle.js 2 GPS run app to my fork of the App loader for those who are interested in trying it out. See the readme file for how it works.
I initially developed this for the Bangle.js 1 and ported it over to the 2 when I received my new Bangle in February. I encountered some problems with the GPS positions at first on the Bangle 2, but I have sorted that out, I think.
New features include altitudes derived from the barometer using an initial GPS average altitude as the start point. Also, a TCX file of your run is saved for viewing with an appropriate app.
I'm an avid runner and wrote this for my own use, so it is tailored for my preferences. One of my big concerns is being able to easily read the information when I'm running hard, especially in a race. So the user interface design was driven by that.
I will try to answer any questions and discussion is welcomed.
-
-
In terms of horizontal GPS accuracy, using raw position fixes is going to produce a zig-zagging line between two points so the measured distance is always going to be greater than the actual straight line distance.
I wrote my own running app and I use a rolling average of 6 points (1 Hz rate) and then also apply a minimum distance of 7m between distance calculations. This filtering produces fairly good results. My running buddies mostly have Apple watches and my distances agree with their distances well.
In terms of elevations, I use the barometer to measure elevation differences. I use the average GPS elevation from the first few minutes before my run as the start elevation. I also use a rolling average on the barometric readings.
In terms of the net elevation changes, for a typical run in very hilly terrain over about an hour and a half, I have recorded up to 300m or so of up and 300m or so of down. So far, the net difference between ups and downs have been around 5m or less. This is much better than what my buddies' Apple watches show for elevation changes. For my measurement of +/- 300m, the Apple watch was in the range of +300m, -150m.
Given the good elevation results, it appears that the atmospheric conditions are fairly stable over a period of couple of hours. If the weather conditions are changing rapidly, things will probably be not so good.
-
The charge level reflects the voltage measured by the Bangle. This voltage will vary according to the current drawn by the Bangle.
The voltage of the battery, measured by the Bangle, will vary according to load on the battery. Batteries have internal resistance so the voltage seen by the Bangle will decrease as the current drawn increases, according to Ohm's Law. So, the voltage will go up and down as you turn on and off various things such as GPS.
-
GPS accuracy depends on how many satellites are visible and where they are in the sky. The more satellites, the better it is. Also, where they are in the sky is important. It is best if they are not grouped together in one part of the sky and also if they are not too low to the horizon.
As an example, I tracked my run this morning and there were times when GPS lock was lost. Note some of the distances between points were huge. Typically, they would be about 10m or so.
The satellite skyplot that I generated from the Trimble website show where the satellites were in the sky at the beginning of my run and the projected paths for the next 6 hours. There were 7 satellites visible but two were low in the sky and were setting. Four satellites are required for a 3D fix.
I ran a 9km circuit this morning and I am quite happy with the recorded track. There were between 6 and 7 satellites used during the run. The attached plot shows a detail of part of the run. If I can get similar results on all my runs, I would be very happy.
One thing to note: my run started on a downtown street (two traffic lanes with parallel parking on each side) with two to three storey buildings on each side and the GPS altitude was around -90m at the start. This resolved itself after a few blocks out of the "canyon", but the start elevation for the run was set at -90m.
I added a mode to the app to be able to switch SBAS on and off (at least, issue the commands) during a run. I tested it this afternoon when 8 satellites were used. The tracks after the SBAS on command qualitatively look better than the tracks after issuing the SBAS off command, but the differences are not huge. Having 8 satellites will generate good results.
In my log file, though, I did notice that after sending a SBAS command to the GPS, it undergoes an initialization and sends out the usual startup $GPTXT messages. So, the $PCAS15,4 command is doing something.