Sensor Fusion

What is Sensor Fusion?

Sensor fusion is software that intelligently combines data from several sensors for the purpose of improving application or system performance. Combining data from multiple sensors corrects for the deficiencies of the individual sensors to calculate accurate position and orientation information.

MEMS sensors have become critical building blocks within electronic systems over the past several years.  A common suite of MEMS sensors is now supported across all types of mobile devices to enable such applications as screen rotation, gesture recognition, gaming, step-counting, and personal navigation.  As the mobile market continues to drive the focus on sensor integration, the process of adding value to products through such means as sensor fusion is central to Kionix's success as a sensor supplier.

Kionix Sensor Fusion Solution

The Kionix sensor fusion solution is extremely flexible, offering both a hardware configuration, meaning the software runs on an embedded microcontroller, and a software configuration, meaning it runs on the Applications processor. This provides unparalleled scalability across the full range of multi-sensor implementations. In addition, Kionix sensor fusion supports multiple combinations of sensor types, (accelerometer-magnetometer, accelerometer-gyroscope, and accelerometer-magnetometer-gyroscope), supports customers tiered product line strategy requirements, and even supports parts made by other manufacturers.

Kionix Hardware Solution Kionix Software Solution
Kionix hardware and software sensor fusion configurations.

 

Kionix sensor fusion is also scalable across operating systems, from embedded, fixed-point microcontroller RTOS systems to floating-point, 32-bit mobile-phone OSs such as Android and Windows 8.  It includes sophisticated power-management techniques that help designers manage sensor interaction and data processing with minimal overhead, resulting in unparalleled power and performance.

Kionix sensor fusion even supports third-party or custom-developed software for enhanced motion processing and application-specific functions, and Kionix provides full source code to qualified customers, as well as direct support and BSPs (board support packages) for leading applications processors and, in the future, RF ICs. Designers using Kionix sensor fusion will be able to calibrate, compensate, and correct for biases and anomalies; manage sensor power-draw to increase battery life; and prevent interference among different types of sensors.  Kionix sensor fusion provides customers with the flexibility and performance they've been looking for, making it the most powerful combination on the market.

Kionix Software Library offers:

Accelerometer

  • Minimal configuration with lowest MIPS
  • Device orientation (screen, 6 sides of box)
  • Pedometer
  • Motion wake-up "ON Switch"

Accelerometer/Magnetometer

  • Primary configuration for majority of smartphones
  • Gravity-compensated magnetometer
  • High algorithm complexity for hard/soft magnetic field rejection
  • IP to eliminate "Figure 8" end-user calibration
  • ~600uA power for sensors with 3MIPS computation

Accelerometer/Magnetometer/Gyroscope

  • Configuration for high-end smartphones, tablets, Win8 slates
  • High sample rate for improved response & accuracy
  • Gyro not affected by external environmental effects
  • IP for power mgmt, zero calibration, and LBS
  • <6mA power for sensors with 8-10MIPS computation

Kionix Software Solution / Android Sensor HAL Architecture

Kionix's Android sensor library provides a concrete implementation of the sensors hardware abstraction layer (HAL) specified by Google for Android systems.  It forms the middle layer between the low-level kernel drivers and the high-level android java framework.  The Kionix sensor library implements sensor fusion, combining inputs from accelerometer, magnetometer, and gyroscope into a composite 3D orientation output.  Power-state optimization is included in the library; sensors that are not needed are placed in a low-power mode to conserve device battery power.  The library's internal state-management module also performs data-rate arbitration when 3D orientation output is enabled.

Solution Architecture

The Kionix software solution consists of a C++ library and the associated header files.  Full source for the library and instructions for rebuilding the library are also included.  The library includes a working sensor HAL implementation with support for the physical devices accelerometer, magnetometer, and gyroscope.  It can be used out-of-the-box to provide 3D orientation output on an Android device. 

Additionally, the library interface exports an object-oriented API for accessing both the physical sensors (gyro, compass, accelerometer) and the synthetic sensors generated via the Kionix sensor fusion implementation.  Synthetic, software-generated sensor types include orientation (see Android documentation), rotation vector, linear acceleration, and gravity.  This interface allows Android device vendors to integrate the Kionix solution with existing sensor-management software (e.g. existing HAL with support for light, temperature, and pressure sensors).

The Kionix software solution is fully compliant with the Android event specification and with the current CCD "Android 4.0 Compatibility Definition."  Specific points of compliance include the following:

  • Supported sensor types include:
    • SENSOR.TYPE_ACCELEROMETER (physical, units of m/s^2)
    • SENSOR.TYPE_MAGNETIC_FIELD (physical, units of micro-Tesla)
    • SENSOR.TYPE_GYROSCOPE (physical, units of rad/s)
    • SENSOR.TYPE_GRAVITY (synthetic, units of m/s^2)
    • SENSOR.TYPE_LINEAR_ACCELERATION (synthetic, units of m/s^2)
    • SENSOR.TYPE_ROTATION_VECTOR (synthetic, dimensionless)
      • Implemented per Android specification – X, Y and Z fields map to X, Y and Z fields of a normalized quaternion with positive W component value.
    • SENSOR.TYPE_ORIENTATION (synthetic, units of degrees)
      • Implemented per Android specification as Azimuth, pitch and roll angles (units of degrees).
  • Ouptuts for all supported sensors match the coordinate system defined by the SensorEvent API.
  • All sensors types (physical and synthetic) support the Accuracy event field. 
  • All devices types (physical and synthetic) support the Timestamp field. 
    • The preferred Kionix implementation uses the data-ready interrupt for each physical sensor, enabling a very precise time-stamp to be generated in response to the interrupt. 
    • The accelerometer and gyroscope sensors support periodic data streaming, which provides additional information for validating timestamp accuracy.
  • Per section 7.3 of "Android 4.0 Compatibility Definition",
    • The software implementation provides a list of supported sensors
    • The software implementation behaves reasonably for all other sensor APIs.  Specifically,
      • the implementation will return TRUE or FALSE in response to applications attempting to register listeners,
      • sensor listeners are not called if the corresponding sensors are not present, and
      • power management is supported – the implementation can be configured to power down or put to sleep any sensors that have no active sensor listeners.

Kernel Interface

Kionix's sensor library must interface with a kernel driver for the accelerometer, gyroscope, and magnetometer.  The preferred type of kernel driver is an input event driver with sysfs attributes for control (e.g. enable, data rate, bias).  This type of driver is the de-facto standard for sensor drivers in the Linux kernel.  Advantages of using this type of driver include lower complexity, high reliability, and increased transparency.  If an input event driver is not available for a particular sensor chip, the Kionix library can be extended to interface with any type of driver.

Kionix HAL Architecture
Kionix HAL Architecture

Supported Integration Models

  • AP based: Raw streaming sensor data (processing performed entirely on Application Processor.
  • HUB based: Self-contained sensor fusion on dedicated small Hub microprocessor.