Course over ground is not heading, and the difference shows up when you slow down
A single-antenna GNSS receiver does not measure which way the robot is pointing. It measures which way the robot is moving, and reports that as heading. At standstill there is no direction of travel, so heading is undefined; at low speed the velocity vector is dominated by noise; and whenever the robot moves in a direction other than the one it faces — crabbing across a slope, skid-steering, reversing — course over ground and true heading are simply different quantities.
Where this bites
The symptom is usually reported as heading that “wanders” or “flips” when the robot is docking, turning in place, starting from rest or working slowly. Common cases:
- Standing still. Heading is undefined and the reported value drifts with velocity noise.
- Starting from rest. Until the platform is moving fast enough for the velocity estimate to be meaningful, the initial heading is poor — exactly when the robot is committing to a path.
- Reversing. Course over ground is 180° from heading. Some systems handle this; many do not.
- Slopes and slippery ground. A robot that crabs downhill is pointing one way and moving another. The error is systematic, not noise.
- Skid-steer turns. During a turn on the spot there is little translation to derive heading from at all.
The alternatives, and their real limits
| Method | Gives true heading? | Fails when |
|---|---|---|
| Course over ground (single antenna) | No — direction of travel only | Stationary, slow, crabbing, reversing |
| Magnetometer | Yes, in principle | Near motors, batteries, steel chassis, rebar, vehicles — i.e. on a robot |
| Dual-antenna GNSS | Yes | Both antennas need sky view; accuracy depends on baseline length; fails in the same canyon that broke your position |
| Gyro integration | Relative only | Drifts without an absolute reference; needs initialising from something else |
| Vision-inertial fusion | Yes, observable at low speed and standstill | Featureless scenes, poor lighting |
Two points are worth dwelling on. Magnetometers are attractive on paper and disappointing in practice on any electrically active steel platform — the distortion is not random noise but a bias that changes with the robot's own state, such as motor current. And dual-antenna GNSS, which genuinely does measure true heading, depends on the same satellite visibility that failed you in the first place: in the environments where heading matters most, it is degraded too.
Why vision solves this specifically
A camera observes the scene's geometry directly, so orientation is observable whether or not the robot is translating. Combined with inertial measurements, that gives a heading that is valid at standstill, valid at 0.1 m/s, and unaffected by whether the robot happens to be sliding sideways.
Vision-RTK 2 outputs global position, orientation and velocity together from a single fused engine, rather than deriving heading from motion after the fact. Orientation arrives as a quaternion in the Earth-centred frame; rotating it into a local East-North-Up or North-East-Down frame gives a compass heading directly. Fixposition publishes the transformation, and its GNSS transformation library includes a function that performs it, so this is a documented step rather than an integration problem you have to solve yourself.
Frequently asked
Can I fix this by tuning my filter?
No amount of tuning creates information that was never measured. If heading is derived from course over ground, a stationary robot has no heading measurement to filter.
Will a dual-antenna receiver solve it?
For true heading in open sky, yes — it is a well-established solution. It does not help under canopy or between buildings, where both antennas are obstructed.
How much heading accuracy do I actually need?
Work backwards from your application: a heading error of one degree becomes a lateral error of roughly 17 cm at 10 m of travel. For row following or boundary work, that arithmetic usually sets a tighter requirement than people expect.
Heading that works at zero speed. See how Vision-RTK 2 outputs fused position, orientation and velocity.
