I have a BU-353, and I am using it in a car. I want to use it to get a more accurate speed reading than RPM/wheel diameter calculation can give me. I am wondering how the incline of a slope, that the car might be going up would impact the GPS reading (specifically NMEA VTG and RMC data). In other words, would the speed out put from the GPS be inaccurate if the altitude of the car is changing, and if so how could I account for that in the software?

The device can also use the following NEMA Protocols: GGA, GKK, GSA, GSV, RMC, VTG, MSS, ZDA


Next to longitude and latitude data GPS gives also altitude information. It's up to the receiver's software designer to decide if she uses that information. She should, and then the speed is determined by

\$ Speed = \dfrac{\sqrt{(\delta \mbox{ } longitude)^2 + (\delta \mbox{ } latitude)^2 + (\delta \mbox{ } altitude)^2}}{\delta \mbox{ } time} \$

Note that distance as a difference in latitude is constant (111.1 km per degree), while for longitude it's function of latitude: 111.1 km per degree at the equator, 71.4 km per degree at 50 degrees north or south, for instance.

The BU-353 supports NMEA's GGA sentence, which gives you essential fix information including longitude, latitude and altitude.

| improve this answer | |
  • \$\begingroup\$ I thought gps calculated its speed using the frequency compression of the incoming signal? Is this wrong? If it's correct would that be significantly affected by the slope incline? \$\endgroup\$ – retorquere Jul 3 '17 at 18:28

A GPS receiver isn't going to give you good speed values in the short term relative to what tire rotation can tell you. There is some jitter on each GPS fix, so subtracting the positions from two fixes will have a significant distance error for the purpose of computing speed of a car.

I would look into using the GPS over a long and flat stretch of road to calibrate the travel length of a tire rotation, then use that for immediate speed measurements, which your speedometer does already. You could even have the GPS system working the background to make small adjustments to the tire rotation calibration based on longer distance and time averages when the car is going reasonably straight without much speed variation. If it did this automatically whenever a good circumstance arose, the tire rotation speed measurement should be quite accurate.

If you need more, then you probably have to look into a fifth wheel just for the purpose.

It's hard to say how much accuracy a GPS system might loose due to elevation change. GPS is much better at measuring lat/lon position than altitude, particularly in the short term. However, keep in mind that something that appears steep to a car still has a rather mild slope mathematically. The cosine of even a "steep" road is still close to 1.

| improve this answer | |
  • \$\begingroup\$ Right: to be accurate, on a 20% slope the error between "real" and "horizontal" distance will be around 2% \$\endgroup\$ – clabacchio Apr 27 '12 at 12:47

It may complicate the system, but an IMU (Inertial Measurement Unit) can greatly improve the performance of your speedometer, if added to the GPS receiver. That applies also for slopes.

An IMU consists in a set of accelerometers, gyroscopes and magnetometers (they work well together, but you don't necessarily need them all), which allow an accurate calculation of the heading of your system (the car in this case). The way in which this is calculated is often referred as AHRS (Attitude and Heading Reference System).

The benefit is immediately clear: knowing your heading helps greatly a GPS-based system in determining your movement direction and speed, which can be used to estimate your position over different points. The GPS receiver by itself is very noisy and inaccurate, and this results in your measured position to bounce around the real one in a radius of 1 to 20+ meters.

About the inclination

Using an accelerometer to determine the inclination of your car is far more accurate than calculating the difference in altitude, because it's just a variation in the direction of the G-force.

The downside of this is that you require a computating unit, which needs to make some heavy calculations. But I've made an experiment with an STM32 (Cortex M3) and we've (with other people) been able to calculate the heading every about 20 ms, without great optimization. So it's something that you can easily achieve with a comparable microcontroller.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.