Why there is continued interest in navigation system design? Navigation systems are designed to take sensor inputs like:

  • Accelerometers
  • Gyroscopes
  • Magnetometers
  • GNSS receivers
  • Barometric altimeters
  • Wheel encoders
  • Cameras
  • Information from the operator
  • Others...

and provide regularly estimates of vehicle state like orientation, position, and velocity. Sure, the cost and quality of sensors have evolved, but the core sensor suite has largely stayed the same for the past several decades. Why isn't this a solved problem?

Why isn't navigation system design a solved problem?

I'm not advocating for the ultimate Kalman filter. In fact, at the end of this article I'll shift focus to empowering design tools. But first, let's consider two reasons why there continues to be interest navigation system design:

  1. One size rarely fits all
  2. Changing an old design is hard

One size rarely fits all

Prototype UAV with electronics developed at University of Minnesota
Prototype aircraft developed at University of Minnesota PAAW Project. Guidance, navigation, and control (GNC) hardware and software are often customized for a specific airframe or application.

Navigation systems are complex and it is difficult to provide a "one size fits all" solution. There are companies trying to do that. They are basically trying to design a box that can navigate anything, anywhere. I'll call that an all purpose navigation system (APNS, because everyone loves an acronym).

All Purpose Navigation System: box that can navigate anything, anywhere.

But a big part of navigation system design is taking advantage of vehicle constraints or knowledge of the environment as part of the design. An automotive vehicle should stick to the road, fixed-wing aircraft don't (or shouldn't) fly backwards, and people can't walk at 50 mph.

So system designers of APNS (ha, the acronym is catching on!) put in all kinds of knobs and switches so that users can tune things for their application. The complex panel of options are often overlooked, or worse, misunderstood by users and this leads to sub-optimal or even erroneous results.

Though systems are generally getting smarter, it is surprisingly easy to mess this up.

Changing an old design is hard

There is a series of steps taken during navigation system design, leading to a tool chain of sorts, enabling you to evaluate and iterate on the design. The tools are used to characterize and test different sensor qualities and see the impact of adding and removing states from the estimator. Software readability and flexibility is king during this stage, not optimized code.

But ultimately a design is chosen and implemented in a lower-level language like C/C++. Efficient linear algebra routines are picked and matrices are sized. Trade-offs between sub-optimal design and processing power are considered and implemented, all usually at the cost of readability and flexibility.

Test, test, test... and the system works. Done.

Five years later, after the original designer has moved on, new sensors become available, and the design needs to change. Extending things directly on the optimized embedded system software is hard, so that takes you back to the higher-level system. If done well, the tool chain used the first time around will help jump start the new design. But it is also possible the engineers will start over, feeling that enough has changed that the system will need to be redesigned.

Ultimately, this means new systems are designed every few years and there is little time for a system to further mature and gain decades of maturity.

No one has done it, but ...

This last point challenges the first two. There are plenty of more complex systems from which a winner (albeit for the time being) has evolved. I'm mostly referring to complex open-source software:

The winners in this list will eventually change. But in the meantime, plenty of people will be able to jump start their work by relying on the steady improvements and maturity of these applications or tools.

Perhaps the best example is OpenCV. OpenCV is a standard for computer vision applications. It has both basic image manipulation functions and calibration routines, as well as provides access to complex image processing algorithms. All of this is available to anyone willing to take the time to install and learn it.

Will there be a similar standard set of tools for navigation system design? I think there will. And if navigation systems are designed to do good, then there is reason to be excited about this!