Lew Payne's Technical Blog

Welcome to my technical blog. I created this blog to facilitate my ongoing research, by giving me a place to store useful research data. It also allows me to comment on various items as I work through their various implementations and determine suitability for my particular projects. Initially, my research was into Kalman filters; hence that is where the bulk of my commentary is located.

This blog is updated regularly, each time I run into something that is useful or substantive. While its format might not be ideal (since it grew to be more than anticipated), keep in mind that its main purpose is to allow me easy access to information that would otherwise be a pain to retrieve (not to mention difficult to integrate my comments into).

Major Categories

Flight Theory & Modeling

"Allows you to send FlightGear a control vector and outputs the state vector."


FoxCar UAV:
  • Aircraft grade laminated plywood fuselage
  • Thermoplastic hatch covers and nose
  • Composite flying surfaces
  • Servo-actuated brakes
  • NACA-2411 airfoil
  • 71" wingspan
Javelin UAS:

Project Andromeda (Outback UAV Challenge)

PixHawk UAS Electronics

CAD/CAM Design:

Environmental Sensing

Optical Flow:
  • Optical Flow Sensors by Centeye
  • Learning Optical Flow (pdf)
  • Modeling of Visual Motion Perception (pdf)
  • Kestrel Real-Time Target Detection/Tracking
  • OpenCV (Open Computer Vision) library

Ground Control System

Mapping & Synthetic Environment:
  • Use or adapt MAVLink (excellent variable length protocol)
  • Possibly replace SAE AS-4/ITU X.25 hash with AUTODIN
  • JAUS++ Joint Architecture for Unmanned Systems in C++
  • OpenJAUS Joint Architecture for Unmanned Systems in C
  • Introduction to the Joint Architecture for Unmanned Systems
  • MIL-STD-2525B Tactical View Symbology Library
  • Borland C++ Builder 6.0 (older but rock-solid)
  • RX Library for C++ Builder (user interfaces)
  • Overbyte ICS UDP components
  • Abakus VCL graphical components (C++/Delphi)
  • TinyXML for parsing Google Earth KML files
  • Cairo 2D graphics library (X, Win, more)

      Physical Hardware

      RF Transceivers:
      RF Amplifiers:
      Video (Analog) Transmitters:
      • VTI SCP-1000 pressure transducers
      • MicroChip MCP9701 linear active thermistor
      • FreeScale MPXH6115A manifold absolute pressure sensor
      Power Regulators:
      Bearings / Position:
      On-Screen Displays (OSD):
      • Molex PicoBlade (1.25mm spacing, 125V, 1A, 28-32AWG)
      • U.FL (Hirose) ultra-small 6GHz coax connectors
      • RP-SMA (reverse-polarity) connectors
      • Deans Ultra Plug and Micro Plug (power)

      Other MARG/AHRS/IMU/INS Open Code Projects



      Sensor Miscellaneous:
      Controls Theory:
      • PID control MatLab tutorial
      • HIFOO H-Infinity Fixed Order Optimization (Matlab)
      Training Courses:
      Rules and Regulations:
      • FAA Model Aircraft Operating Standards (AC91-57)
      "No person may operate a UAS in the National Airspace System without specific authority. For UAS operating as public aircraft the authority is the COA, for UAS operating as civil aircaft the authority is Special Airworthiness Certificates, and for model aircraft the authority is AC 91-57."

      Search and Rescue:

      Firmware Development

      General  uController Libraries:
      Simulation and Modeling:
        STM32/TMS320F Libraries:
        User Forums (for help):
        Noteworthy Development Boards:

        GPS Latency & Integration

        Regarding the subject of GPS Latency (due to filtering internal to the GPS - necessary for a weighted output of multi-satellite estimation):

        "The simplest to implement, but also the most inaccurate, solution is to simply ignore the fact that the sensor measurement is lagged. A normal Kalman measurement update is then performed to fuse the delayed sensor measurement with the current state estimate. This is the option that was used for the GPS sensor fusion in MIT’s EKF based UAV state estimator. Their rationale was that the 50ms latency of the Ashtech G12 GPS receiver was short enough to not cause significant errors if ignored. Even though this assumption is probably reasonable for the specific time-delay at hand, we felt that valuable information in the measurements were still being discarded using this approach and that compensating for the latency will in fact result in a significant increase in estimation performance. This was experimentally confirmed earlier in the Experimental Results section."

        "Latency in various GPS receivers' NMEA navigation strings has proven to be less than "real time."  In fact, one of the early differentially corrected GPS systems widely integrated into the leading yield monitor had as much as a 6-8 second latency.  The receiver's latency in this case was directly tied to the differential correction of the raw pseudoranges." Lew: Unfortunately, this and several other papers fail to acknowledge the fact that GPS output is, by it's very nature, lagged due to the filtering employed. In order to determine a vector, the GPS must employ some form of averaging or smoothing. The same holds true for stationary position fix, which requires the integration of several measurements, each exhibiting hysteresis due to the innacuracies associated with pseudo-range and carrier-phase observations along with multipath errors. What's really needed is an algorithm that models GPS latency (which likely varies from GPS model to model).

        Raw-Data Update GPS Hardware:

        Kalman Filters

        Sigma-Point Kalman Filter & Stabilization Research:
        • Introduction to the Kalman filter (Greg Welch & Gary Bishop)
        • Unscented Kalman filter for Nonlinear Estimation (van der Merwe & Wan)
        • Comparison of the Extended and Sigma-Point Kalman Filters on Inertial Sensor Bias Estimation through Tight Integration of GPS and INS (Wang & Rios)
        • Sigma-point Kalman Filtering for Integrated Navigation (van der Merwe & Wan)
        • Sigma-point Kalman Filters for Nonlinear Estimation & Sensor Fusion - Applications to Integrated Navigation (van der Merwe & Wan)
        • Sigma-point Kalman Filters for Probabilistic Inference in Dynamic State-Space Models (van der Merwe & Wan)
        • Sigma-point Kalman Filtering for Integrated GPS & Inertial Navigation (Crassidis)
        • Sigma-point Gaussian Sum Filter Design Using Square Root Unscented Filters (Simandl & Dunik)
        • Unscented Kalman Filter Tutorial (Terejanu)
        • Sigma-point Kalman Filters for GPS Navigation with Integrity in Aviation (Greer, et-al)
        • Sigma-point Kalman Filtering for Tightly Coupled GPS/INS Integration (Li, Rizos, et-al)
        • Comparison of Kalman Filter Estimation Approaches for State-Space Models with Nonlinear Measurements (Orderud)
        • Highly Efficient Sigma Point Filter for Spacecraft Attitude & Rate Estimation (Fan & You, html)
        "Incorporates the Geometric Simplex sigma point set into the Marginal SPKF framework, thus producing a nonlinear SPKF estimator for attitude estimation, aka the Marginal Geometric Sigma Point Kalman Filter (MGSPKF)."

        "The Kalman filter is really precise in steady conditions; but reacts strongly to inertial forces. The integration model drifts in steady conditions, but does not react strongly to inertial forces. Thus, I had the idea to combine both models, depending on motion conditions: steady-state or not.  But then I blew it by writing this paper as if I were writing a screenplay for another reality show - and Lew Payne hates reality shows.  Also a continuous-time (blended) model would be better, rather than an 'or' model as you've done.  In fact, I believe I've seen such a model out there somewhere, in another research paper."

        "The UKF has a faster convergence with respect to the EKF, but after a settling time the performance becomes identical" ... "If initial estimation error is very large, and the initial covariance is inappropriate, the EKF diverges while the UKF converges.  The divergence at attitude angle brings with it the divergence of all other state variables."
        "Square-root unscented Kalman filter with code in C++ and step-by-step explanation of math. Uses rank-one updates to the filter covariance so as to reduce the matrix math down to a scalar division, aka U-D decomposition."
        "Three-state state estimation scheme; pitch and roll, estimated heading, and position estimate which includes wind speed and direction." 

        Kalman Filter Code:

        Other Stabilization Methods:
        "This paper proposes a coupled nonlinear attitude estimation and control design... Attitude estimation is based on a nonlinear complementary filter expressed on the rotation group.  The attitude control algorithm is based on a nonlinear Lyapunov function analysis derived directly in terms of the rigid-body attitude dynamics.  The interaction terms are bounded in terms of estimation and control errors and the full coupled system is show to be almost globally stable."
        "In connection with an extended Kalman filter attitude estimation scheme, a novel method for dealing with latency in real-time is presented using a distributed-in-time architecture."  Lew: This also uses an interesting cascaded INS concept.

        Control Theory:

        Coding Style & Formatting

        • PiOS (flight software architecture)
        Coding Style:

        astyle --indent=spaces=4 --brackets=linux \
        --indent-labels --pad-oper --unpad-paren \
        --one-line=keep-statements --convert-tabs \

        Layout Software:

        • Eagle (Schematic Capture & Board Layout)
        • Eagle 3D (3D Board Rendering)