# Patent

## Title
Electronic compass calibration based on visual code

## Abstract

In a disclosed embodiment, a system includes a digital imaging device, an electronic compass (e-compass), and a processor coupled to the digital imaging device and the e-compass. The processor is operable to execute instructions that cause the image device to scan a visual code, read a yaw angle from the visual code, cause the e-compass to obtain magnetic field measurements, estimate a yaw angle based on the magnetic field measurements, compare the yaw angle read from the visual code and the estimated yaw angle to determine a quality factor; and determine whether the e-compass is calibrated based at least partially upon the quality factor.

## Background
CROSS-REFERENCE TO RELATED APPLICATIONS
This application is a Continuation of and claims priority to U.S. patent application Ser. No. 15/054,281, filed Feb. 26, 2016, which is a Divisional of and claims priority to U.S. patent application Ser. No. 13/571,501, filed on Aug. 10, 2012, which claims priority to U.S. Provisional Patent Application No. 61/522,112 filed on Aug. 10, 2011, all of which are incorporated herein by reference in their entireties.


BACKGROUND
Many applications for smartphones use location information. Many smartphones include a global navigation satellite system (GNSS) such as the global positioning system (GPS). In an indoor environment, GNSS solutions do not always function accurately due to heavy attenuation of the satellite signals. Alternatives are available to GNSS such as sensor-based navigation and WiFi-based positioning.
Sensor-based solutions may include a micro-electrical-mechanical system (MEMS) sensor such as an accelerometer, an electronic compass (e-compass), gyroscope, etc. An issue in sensor-based solutions is sensor calibration. Sensors provide only user-displacement information, not absolute location. Thus, an initial position is required. The sensor can be used to determine position from that point forward as the smartphone becomes mobile. Measurement errors, however, eventually render the position determined from a sensor inaccurate.
SUMMARY
In some embodiments, a system includes an imaging device, a barometric pressure sensor, and a processor coupled to the imaging device and the pressure sensor. The processor causes the imaging device to scan a visual code. Based on scanning the visual code, the processor obtains a first value indicative of height of the visual code from the visual code and obtains a first barometric pressure reading from the pressure sensor. After scanning the visual code, the processor uses the first value indicative of height of the visual code and the first barometric pressure reading to determine a height of the system.
A corresponding method includes initiating scanning of a visual code and obtaining a first value indicative of height of the visual code from the visual code. The method further includes obtaining a first barometric pressure reading from a barometric pressure sensor. From a second height, a second barometric pressure reading is obtained from the barometric pressure sensor. The method includes computing a second value indicative of height based on the second barometric pressure reading, the first value indicative of the height of the visual code, and a rate of change of pressure with respect to height.
In other embodiments, a system includes an imaging device, an e-compass, an accelerometer, and a processor coupled to the imaging device, the e-compass, and the accelerometer. The processor causes the imaging device to scan a visual code, read a yaw angle from the QR code, and compute an estimate of a yaw angle based on magnetic field measurements taken by the e-compass and scale factors and biases determined by the e-compass. Based on scanning the visual code, the processor computes a quality factor based on the yaw angle read from the visual code and the estimate of the yaw angle. The processor determines whether the e-compass is satisfactorily calibrated based on the quality factor.
A corresponding method of calibrating an e-compass includes scanning a visual code, reading yaw angle from visual code, and computing an estimate of yaw angle based on magnetic field measurements, scale factors, and biases from the e-compass. The method further includes computing a quality factor based on the yaw angle read from the visual code the estimate of the yaw angle and determining whether calibration of the e-compass is acceptable based on the quality factor.
Other embodiments are directed to a system including an imaging device, a gyroscope, and a processor coupled to the imaging device and the gyroscope. The processor causes the imaging device to scan a visual code and, based on scanning the visual code, the processor causes the gyroscope to be calibrated.
A corresponding method includes initiating scanning using a digital image device, detecting the presence of a visual code, and based on detecting the visual code, calibrating a gyroscope.



BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 shows a system in accordance with various implementations;
FIG. 2 shows a method of calibrating a gyroscope based on scanning a visual code such as a Quick Response (QR) code in accordance with various implementations;
FIG. 3 shows a method of calibrating an e-compass based on scanning a visual code in accordance with various implementations;
FIG. 4 shows a more specific implementation of a method of calibrating an e-compass based on scanning a visual code;
FIG. 5 illustrates the relationship between barometric pressure and height; and
FIG. 6 shows a method of calibrating a barometric pressure sensor based on scanning a visual code in accordance with various implementations.



DETAILED DESCRIPTION
The following discussion is directed to various embodiments of the invention. Although one or more of these embodiments may be preferred, the embodiments disclosed should not be interpreted, or otherwise used, as limiting the scope of the disclosure, including the claims. In addition, one skilled in the art will understand that the following description has broad application, and the discussion of any embodiment is meant only to be exemplary of that embodiment, and not intended to intimate that the scope of the disclosure, including the claims, is limited to that embodiment.
The term “visual code” refers to any type of graphic depiction that encodes information such as the information described herein. An example of a visual code is a Quick Response (QR). A QR code is a specific matrix barcode (or two-dimensional code) that is readable by QR barcode readers and camera telephones. The code includes black modules arranged in a square pattern on a white background. These and other visual features enable the code to be detected by a digital camera during as scan. The information encoded may be text, a uniform resource locator (URL), or other data such as the data described below for navigation assistance. Micro codes and Microsoft tags can also be used.
If the visual code is encoded with the coordinates of the code's location, then the sensor solution can provide displacement from that point. Coordinates could be in latitude, longitude, and altitude or in any other coordinate system. Coordinates on a specific map are possible. Coordinates could contain the level or floor in the building or altitude where the QR code is located.
FIG. 1 shows an example of a system 100 which provides navigation assistance. The system 100 may include a GNSS module (e.g., GPS) 118 for which the system provides navigation assistance when, for example, the GNSS module 118 is not adequate (e.g., inside a building). The illustrative system 100 as shown includes a processor 102 coupled to a non-transitory storage device 104, an e-compass 108, a gyroscope (“gyro” for short) 110, a barometric pressure sensor 112, a digital imaging device 114, a wireless transceiver 116, an accelerometer 117, and the GNSS module 118. Other implementations of system 100 may have additional or different components to that shown in FIG. 1. In some implementations, not all of the components shown in Figure are included.
The e-compass 108 is any suitable type of magnetic field sensors. Examples include tri-axis anisotropic magnetoresistive (AMR) sensors. The gyro 110 also may be a multi-axis (e.g., 3-axis) device in some embodiments. The barometric pressure sensor 112 is a sensor that generates a signal based on the sensed barometric pressure.
The digital imaging device 114 may include a charge-coupled device (CCD) to acquire digital images, and provide such images to the processor 102 for further processing in accordance with software 106. The digital imaging device 114 may be a digital camera. The digital imaging device 114 may be used to scan visual codes as explained below for navigation assistance.
The accelerometer 117 preferably is a three-axis accelerometer.
The non-transitory storage device 104 is any suitable type of volatile storage (e.g., random access memory), non-volatile storage (e.g., hard disk, solid state storage, optical storage, read-only memory, etc.), or combinations thereof. The storage device 104 contains software 106 which is executable by processor 102 to impart the system 100 with some or all of the functionality described herein.
The system 100 may be a portable device such as a smartphone or any other type of mobile device.
The quality of a navigation solution which uses sensors depends on the type of sensors used. Low cost MEMS sensors, such as those found in PND and smart-phones, may drift over-time and hence continuous re-calibration of the sensor outputs is helpful. Calibration of such sensors may be performed based on comparison of the sensor outputs with positional information derived from an external reference e.g. imaging of a visual code or detection of an external event (e.g. stationarity detection).
As explained below, the system 100 of claim 1 may be used to calibrate the gyro 110, calibrate the e-compass 108, and calibrate the barometric pressure sensor 112.
Gyro Calibration
Gyroscope calibration is optimal when the user holds the system 100 stationary for a period of time. Because the user necessarily must hold the system 100 relatively stationary to scan the visual image, in accordance with preferred embodiments, scanning and detecting a visual code triggers the processor 102 to cause the gyro to begin a calibration process. The user preferably holds the system (and the digital imaging device 114 in particular) to the visual code for some time to enable the system to read the image. When the digital imaging device 114 and processor 102 recognize the presence of a visual code, the processor 102 preferably initiates gyro calibration as there will be a short moment in which the system is stationary. As such, the recognition of the visual code triggers gyro calibration. Even if the visual code does not contain location information, at least the gyro 110 nevertheless is calibrated. Once the gyro 110 is calibrated it can reliably track relative movements of the phone for a period of time.
Calibrating the gyro 110 may include averaging the output of the gyro corresponding to each axis of the gyro during an interval when the phone is stationary (e.g., during scanning of a visual code). The computed averages represent the gyro biases. Subsequently, new gyro measurements can be calibrated by subtracting these biases from such new measurements. The biases may be dependent on the temperature of the gyro 110. A temperature sensor 111 may be provided on or near the gyro to record the gyro's temperature when requested by the processor. The processor 102 may store the biases determined at various gyro temperatures in the non-volatile storage device 104.
In some embodiments, the visual code is encoded with position and heading values that are read by the system 100 via the digital imaging device 114. The position value indicates the location of the visual code. Examples of a position value include longitude and latitude, coordinates on a map, etc. Heading values indicate the direction that the system 100 is necessarily pointing upon scanning the visual code. An example of a heading value is “due east” and the like. If the visual code encodes the heading that the system 100 is pointing in addition to the position (i.e., location) of the system, then the gyro 114 can accurately track changes in the system's position and heading for some time afterwards depending on the quality of the gyro.
FIG. 2 illustrates a method 120 pertaining to gyro calibration. The various operations may be performed or caused to be performed by the processor 102 executing software 106 in combination with the gyro 110. At 122, the method includes initiating a scan using the digital imaging device 114. At 124, the processor 102 may detect the presence of a visual code in the digital images acquired by the digital imaging device 114. Based on detecting the presence of a visual code, the processor 102 initiates a gyro calibration process to occur (126).
E-Compass Calibration
When the user holds the smart phone camera towards the visual code, the phone will necessarily be pointing in a specific direction. If the visual code is encoded with the direction, the direction information may be used to assist with calibration of the e-compass.
By way of background, the equations that describe e-compass calibration may be as follows:




  
    
      
        
          [
          
            
              
                
                  
                    V
                    x
                  
                  ⁡
                  
                    (
                    t
                    )
                  
                
              
            
            
              
                
                  
                    V
                    y
                  
                  ⁡
                  
                    (
                    t
                    )
                  
                
              
            
            
              
                
                  
                    V
                    z
                  
                  ⁡
                  
                    (
                    t
                    )
                  
                
              
            
          
          ]
        
        =
        
          
            
              [
              
                
                  
                    
                      α
                      x
                    
                  
                  
                    
                      s
                      
                        x
                        ⁢
                        
                          
                        
                        ⁢
                        y
                      
                    
                  
                  
                    
                      s
                      
                        x
                        ⁢
                        
                          
                        
                        ⁢
                        z
                      
                    
                  
                
                
                  
                    
                      s
                      
                        x
                        ⁢
                        
                          
                        
                        ⁢
                        y
                      
                    
                  
                  
                    
                      α
                      y
                    
                  
                  
                    
                      s
                      
                        y
                        ⁢
                        
                          
                        
                        ⁢
                        z
                      
                    
                  
                
                
                  
                    
                      s
                      
                        x
                        ⁢
                        
                          
                        
                        ⁢
                        z
                      
                    
                  
                  
                    
                      s
                      
                        y
                        ⁢
                        
                          
                        
                        ⁢
                        z
                      
                    
                  
                  
                    
                      α
                      z
                    
                  
                
              
              ]
            
            ⁡
            
              [
              
                
                  
                    
                      
                        h
                        x
                      
                      ⁡
                      
                        (
                        t
                        )
                      
                    
                  
                
                
                  
                    
                      
                        h
                        y
                      
                      ⁡
                      
                        (
                        t
                        )
                      
                    
                  
                
                
                  
                    
                      
                        h
                        z
                      
                      ⁡
                      
                        (
                        t
                        )
                      
                    
                  
                
              
              ]
            
          
          +
          
            [
            
              
                
                  
                    β
                    x
                  
                
              
              
                
                  
                    β
                    y
                  
                
              
              
                
                  
                    β
                    z
                  
                
              
            
            ]
          
          +
          
            [
            
              
                
                  
                    ɛ
                    x
                  
                
              
              
                
                  
                    ɛ
                    y
                  
                
              
              
                
                  
                    ɛ
                    z
                  
                
              
            
            ]
          
        
      
    
    
      
        (
        1
        )
      
    
  




Using vector notation:

{right arrow over (V)}(t)=A·{right arrow over (h)}(t)+{right arrow over (β)}+{right arrow over (ε)}  (2)

where {right arrow over (V)}(t) is the sensor outputs at time t, A is the matrix of scale factors, {right arrow over (h)}(t) is the vector of the magnetic field that is being measured at time t, {right arrow over (β)} is the vector of biases, and {right arrow over (ε)} is the vector of residual errors.

The norm of the magnetic field in a given location without magnetic interference is constant. This fact is exploited to calibrate the e-compass. In other words, it is known that for all times:

H2=hx2(t)+hy2(t)+hz2(t)  (3)

The e-compass calibration should solve for the 9 parameters in A and {right arrow over (β)}. In some cases it can be assumed that the off-diagonal elements of A are zero so that there are only 6 parameters to be computed.
Once calibration is complete the estimate of the magnetic field is given by:




  
    
      
        
          
            h
            ^
          
          ⁡
          
            (
            t
            )
          
        
        =
        
          
            [
            
              
                
                  
                    
                      
                        h
                        ^
                      
                      x
                    
                    ⁡
                    
                      (
                      t
                      )
                    
                  
                
              
              
                
                  
                    
                      
                        h
                        ^
                      
                      y
                    
                    ⁡
                    
                      (
                      t
                      )
                    
                  
                
              
              
                
                  
                    
                      
                        h
                        ^
                      
                      z
                    
                    ⁡
                    
                      (
                      t
                      )
                    
                  
                
              
            
            ]
          
          =
          
            
              
                (
                
                  
                    A
                    T
                  
                  ⁢
                  A
                
                )
              
              
                -
                1
              
            
            ⁢
            
              (
              
                
                  
                    V
                    →
                  
                  ⁡
                  
                    (
                    t
                    )
                  
                
                -
                
                  β
                  →
                
              
              )
            
          
        
      
    
    
      
        (
        4
        )
      
    
  




Without loss of generality (because a rotation matrix can always be applied), assume that the system 100 is oriented so that, for example, its x-axis is pointed towards the visual code, the z-axis is pointing up, and the y-axis is pointing left. While the system 100 is stationary (e.g., scanning a visual code), the processor obtains accelerometer readings from the accelerometer 117 to determine two of the three orientation angles (e.g., pitch and roll). The third angle (yaw) is known because the camera is facing the visual code being scanned. In addition, the digital imaging device 114 may measure the orientation of the visual code relative to the imaging device 114 to more accurately estimate these angles. Once pitch, roll, and yaw are known, a rotation matrix preferably is applied such that the system 100 has an assumed orientation, in this case the yaw angle φ(t) and the residual rotation angle θ(t) should have known values:




  
    
      
        
          
            φ
            ^
          
          ⁡
          
            (
            t
            )
          
        
        =
        
          
            arctan
            ⁡
            
              (
              
                
                  
                    
                      h
                      ^
                    
                    y
                  
                  ⁡
                  
                    (
                    t
                    )
                  
                
                
                  
                    
                      h
                      ^
                    
                    x
                  
                  ⁡
                  
                    (
                    t
                    )
                  
                
              
              )
            
          
          =
          φ
        
      
    
    
      
        (
        5
        )
      
    
  
  
    
      
        
          θ
          ⁡
          
            (
            t
            )
          
        
        =
        
          
            arctan
            (
            
              
                
                  
                    
                      
                        h
                        ^
                      
                      x
                      2
                    
                    ⁡
                    
                      (
                      t
                      )
                    
                  
                  +
                  
                    
                      
                        h
                        ^
                      
                      y
                      2
                    
                    ⁡
                    
                      (
                      t
                      )
                    
                  
                
              
              
                
                  
                    h
                    ^
                  
                  z
                
                ⁡
                
                  (
                  t
                  )
                
              
            
            )
          
          =
          0
        
      
    
    
      
        (
        6
        )
      
    
  




where these angles are defined as spherical coordinates, and where the yaw angle co is the angle in the horizontal plane between the x-axis and magnetic North. There are two possible ways to use these angles, as will be explained below in greater detail:

    
    
        1. Use |θ(t)| and |φ(t)−φ| to determine the quality of the e-compass calibration.
        2. Perform a grid search to find the calibration parameters that minimize |θ(t)| and |φ(t)−φ| to thereby to correct the calibration of the e-compass. A global search can be performed for the calibration parameters in some embodiments, but in other embodiments, the search is performed around the calibration parameters already computed using a technique such as the one above.
    
    


The image code may also be encoded with the true magnetic field measurements at its location. In other words, the image code can provide the true value of {right arrow over (h)}={right arrow over (h)}(t) when the system 100 is at a certain orientation relative to the image code. This provides three additional equations that can be used during the calibration by equating ĥ(t) and {right arrow over (h)} for the time t when the phone was held in front of the image code.
Generally, e-compass calibration requires that the system 100 be rotated in all directions in order to solve the system of equations given above. Knowing {right arrow over (h)}={right arrow over (h)}(t) at a given point can help relax this requirement, but measurements from multiple orientations are still required. After holding the system 100 up to the image code for scanning purposes, the user will typically bring it back down—this motion rotates the system 100. During this rotation the e-compass 108 may collect data for calibration. Recognizing an image code therefore preferably triggers an e-compass calibration. To further improve the calibration, the recognition of the image code preferably triggers the system to inform the user to perform a calibration maneuver such as spinning the system.
Furthermore, after reading the image code and calibrating the gyro 110, the gyro can provide accurate estimates of the rotations of the phone for some time. This means at a given instant the tilt, pitch and roll angles are known by integrating the angular rate measurements from the gyro and adding them to the initial angles from when the system 100 was in front of the image code. This effectively provides the true values of φ(t) and θ(t) at different times, which makes the e-compass calibration easier. The yaw, pitch, and roll can be defined respectively as:




  
    
      
        
          
            tan
            ⁡
            
              (
              
                φ
                ⁡
                
                  (
                  t
                  )
                
              
              )
            
          
          =
          
            
              
                h
                y
              
              ⁡
              
                (
                t
                )
              
            
            
              
                h
                x
              
              ⁡
              
                (
                t
                )
              
            
          
        
        ,
      
    
    
      
        (
        7
        )
      
    
  
  
    
      
        
          
            tan
            ⁡
            
              (
              
                φ
                ⁡
                
                  (
                  t
                  )
                
              
              )
            
          
          =
          
            
              
                h
                z
              
              ⁡
              
                (
                t
                )
              
            
            
              
                h
                z
              
              ⁡
              
                (
                t
                )
              
            
          
        
        ,
      
    
    
      
        (
        8
        )
      
    
  
  
    
      
        
          tan
          ⁡
          
            (
            
              γ
              ⁡
              
                (
                t
                )
              
            
            )
          
        
        =
        
          
            
              
                h
                x
              
              ⁡
              
                (
                t
                )
              
            
            
              
                h
                z
              
              ⁡
              
                (
                t
                )
              
            
          
          .
        
      
    
    
      
        (
        9
        )
      
    
  




Assuming that while the digital imaging device 114 is held in front of the image code at time zero, the angles are φ(0)=φ, φ(0)=0, and γ(0)=0. Then the estimated angles at a future time t are:





  
    
      φ
      ⁡
      
        (
        t
        )
      
    
    =
    
      
        ∫
        0
        t
      
      ⁢
      
        
          
            φ
            .
          
          ⁡
          
            (
            λ
            )
          
        
        ⁢
        δλ
      
    
  
  ,
  
    
      φ
      ⁡
      
        (
        t
        )
      
    
    =
    
      
        ∫
        0
        t
      
      ⁢
      
        
          
            φ
            .
          
          ⁡
          
            (
            λ
            )
          
        
        ⁢
        δλ
      
    
  
  ,
  
    
      and
      ⁢
      
        
      
      ⁢
      
        γ
        ⁡
        
          (
          t
          )
        
      
    
    =
    
      
        ∫
        0
        t
      
      ⁢
      
        
          
            γ
            .
          
          ⁡
          
            (
            λ
            )
          
        
        ⁢
        δλ
      
    
  
  ,




where the angular rates come from the calibrated gyro 110. Knowing the values of these angles provides further constraints for the system of equations used for e-compass calibration. One way to use these constraints is to do a grid search for e-compass and/or gyro calibration parameters to minimize the difference between the yaw, pitch and roll angles estimated based on the gyro 110 and the e-compass 108 during the same time interval.

FIG. 3 shows a method 130 of calibrating the e-compass 108 in accordance with some implementations. The various operations may be performed or caused to be performed by the processor 102 executing software 106 in combination with the e-compass 108, gyro 110, and accelerometer 117. The operations may be performed in the order shown, or in a different order. Further, two or more of the operations may be performed in parallel rather than sequentially.
At 132, the method includes initiating a scan of a visual code by a user of the system 100 (and thereby detecting the presence of the visual code itself). While scanning the code, the system 100 also reads a yaw angle from the visual code. The yaw angle read from the visual code indicates the angle of yaw of the system 100 assuming the system is facing the visual code, which would be the case during the visual code scan operation.
At 134, the method includes the processor 102 computing an estimate of yaw angle based on magnetic field measurements, scale factors, and biases from the e-compass 108. At 136, the method includes computing a quality factor based on the yaw angle read from the visual code and the computed estimate of the yaw angle. The two yaw angles ought to be identical or relatively close to the same if the e-compass is properly calibrated. At 138, the processor 102 determines whether the calibration of the e-compass 108 is acceptable based on the computed quality factor.
The visual code may also encode the magnetic declination (i.e., the angle between magnetic north and true north). The e-compass 108 calibration may also include adjusting the determination of magnetic north by the magnetic declination encoded in the visual code. For example, the magnetic declination may be added to, or subtracted from, the determination of magnetic north
FIG. 4 shows a more specific implementation of method 130 of FIG. 3. The various operations may be performed or caused to be performed by the processor 102 executing software 106 in combination with the e-compass 108, gyro 110, and accelerometer 117. The operations may be performed in the order shown, or in a different order. Further, two or more of the operations may be performed in parallel rather than sequentially.
At 140, the method includes initiating a scan of a visual code by a user of the system 100 (and thereby detecting the presence of the visual code itself). At that time, the system 100 also reads a yaw angle from the visual code. The yaw angle read from the visual code indicates the angle of yaw of the system 100 assuming the system is facing the visual code, which would be the case during the visual code scan operation.
At 142, the processor 102 obtains measurements from the e-compass 108 and buffers those measurements in, for example, the non-volatile storage device 104. The buffered e-compass measurements are {right arrow over (V)}(t) as described above. The scanning of the visual code also causes the processor to calibrate the gyro 110 (144). Because the system 100 presumably is held stationary to image the visual code, visual code scanning is an excellent time to calibrate the gyro 110. Gyro calibration reduces or eliminates offset in the readings from the gyro. Gyro calibration averages out the gyro biases.
At 146, pitch and roll are estimated based on readings from the accelerometer 117. The processor 102 computes the average of the values from each axis of the multi-axis (preferably three-axis) accelerometer 117. The average is computed of samples from a window in time when the system 100 is approximately stationary, such as during visual code scanning. The average, for example, of the accelerometer's x-axis readings is computed as:




  
    
      
        
          
            a
            _
          
          x
        
        =
        
          
            1
            N
          
          ⁢
          
            
              ∑
              i
            
            ⁢
            
              
            
            ⁢
            
              
                a
                x
              
              ⁡
              
                (
                i
                )
              
            
          
        
      
    
    
      
        (
        10
        )
      
    
  




where i is the i-th sample in time, and N is the number of samples in the average. Similar computations are made for the y and z axes of the accelerometer as well. This creates the vector ā=└āx āy āz ┘. The processor then computes a unit vector:





  
    
      
        
          a
          ~
        
        =
        
          
            
              a
              _
            
            
              
              
                a
                _
              
              
            
          
          .
        
      
    
    
      
        (
        11
        )
      
    
  




The processor 102 computes pitch as p=−sin−1(ãx) and roll as r=atan 2(ãy,ãz). Roll and pitch matrices are then determined to be:




  
    
      
        R
        =
        
          
            [
            
              
                
                  1
                
                
                  0
                
                
                  0
                
              
              
                
                  0
                
                
                  
                    cos
                    ⁡
                    
                      (
                      r
                      )
                    
                  
                
                
                  
                    sin
                    ⁡
                    
                      (
                      r
                      )
                    
                  
                
              
              
                
                  0
                
                
                  
                    -
                    
                      sin
                      ⁡
                      
                        (
                        r
                        )
                      
                    
                  
                
                
                  
                    cos
                    ⁡
                    
                      (
                      r
                      )
                    
                  
                
              
            
            ]
          
          .
        
      
    
    
      
        (
        12
        )
      
    
  
  
    
      
        P
        =
        
          
            [
            
              
                
                  
                    cos
                    ⁡
                    
                      (
                      p
                      )
                    
                  
                
                
                  0
                
                
                  
                    -
                    
                      sin
                      ⁡
                      
                        (
                        p
                        )
                      
                    
                  
                
              
              
                
                  0
                
                
                  1
                
                
                  0
                
              
              
                
                  
                    sin
                    ⁡
                    
                      (
                      p
                      )
                    
                  
                
                
                  0
                
                
                  
                    cos
                    ⁡
                    
                      (
                      p
                      )
                    
                  
                
              
            
            ]
          
          .
        
      
    
    
      
        (
        13
        )
      
    
  




At 148 in FIG. 4, if A and {right arrow over (β)} are available from a prior e-compass calibration, then at 150, the processor computes ĥ(t) based on {right arrow over (β)}, A and {right arrow over (V)}(t). The computation of ĥ(t) may be made using equation (4) above.
Detilting is performed in operation 152. Detilting maps the orientation of the system 100 from its current orientation during visual image scanning to a predetermined orientation. A technique for performing detilting includes computing {tilde over (h)}(t)=PTRTĥ(t), where the R and P matrices are provided above at (12) and (13), respectively. The values {tilde over (h)}(t) represents the detilted estimate of the magnetic field.
At 154, the processor computes an estimate of the yaw angle ({circumflex over (φ)}(t)) based on {tilde over (h)}(t). Specifically, {circumflex over (φ)}(t) may be computed as:




  
    
      
        
          
            φ
            ^
          
          ⁡
          
            (
            t
            )
          
        
        =
        
          arctan
          ⁡
          
            (
            
              
                
                  
                    h
                    ~
                  
                  y
                
                ⁡
                
                  (
                  t
                  )
                
              
              
                
                  
                    h
                    ~
                  
                  x
                
                ⁡
                
                  (
                  t
                  )
                
              
            
            )
          
        
      
    
    
      
        (
        14
        )
      
    
  




At this point, an estimate of the yaw angle of the system 100 has been computed based on equation (14) and a yaw angle has been read from the visual code. If the e-compass 108 is in proper calibration, the two yaw angles should be approximately identical.
At 156, a residual rotation angle (θ(t)) is computed based on {tilde over (h)}(t). The residual rotation angle θ(t) may be computed as:




  
    
      
        
          θ
          ⁡
          
            (
            t
            )
          
        
        =
        
          arctan
          (
          
            
              
                
                  
                    
                      h
                      ~
                    
                    x
                    2
                  
                  ⁡
                  
                    (
                    t
                    )
                  
                
                +
                
                  
                    
                      h
                      ~
                    
                    y
                    2
                  
                  ⁡
                  
                    (
                    t
                    )
                  
                
              
            
            
              
                
                  h
                  ~
                
                z
              
              ⁡
              
                (
                t
                )
              
            
          
          )
        
      
    
    
      
        (
        15
        )
      
    
  




For an e-compass in proper calibration, the residual rotation angle θ(t) should be approximately 0.

In accordance with the various embodiments, a quality factor is computed by the processor (operation 158). In some embodiments, the quality factor (Q(t)) is computed as Q(t)=|{circumflex over (φ)}(t)−φ|, while in other embodiments, the quality factor is computed as Q(t)=√{square root over (|{circumflex over (φ)}(t)−φ|2+θ2(t))}. The former quality factor is the absolute value of the difference between the computed estimate of the yaw angle and the yaw angle read from the visual code. The latter quality factor is the square root of the sum of the square of two values. The first value is the square of the absolute value of the difference between the computed estimate of the yaw angle and the yaw angle read from the visual code. The second value is the square of the residual rotation angle θ(t).
For either quality factor, the quality factor should be approximately zero for an e-compass that is in proper calibration. At 160, the processor 102 compares the quality factor to a predetermined (preferably low) threshold to determine if the quality factor is below the threshold, thereby indicating proper calibration (162).
If the quality factor θ(t) is above the threshold (indicating improper e-compass calibration), then operations 164 and 166 may be performed to correct the calibration of the e-compass. Operations 164 and 166 are also performed if neither A nor {right arrow over (β)} were available as determined at operation 148. At 164, the processor re-computes the quality factor using other values of A and {right arrow over (β)}, and at 166, the values of A and {right arrow over (β)} that resulted in the best (e.g., lowest) quality factor are chosen for use by the e-compass from that point on. In some implementations and as explained above, a global search can be performed for new values of A and {right arrow over (β)} to use but performing a search around the values of A and {right arrow over (β)} already computed by the e-compass is more efficient.
Barometer Calibration
The system 100 of FIG. 1 also can be used to calibrate a barometric pressure sensor 112 if the system includes such a sensor. Barometric pressure sensors can be used to determine altitude or the floor of a building at which the system containing the sensor is located. FIG. 5 illustrates the relationship 170 between barometric pressure and height—lower pressure at higher elevations (floors) and higher pressure at lower elevations (floors).
In some embodiments, a visual code is encoded with an altitude or floor number at which the code is located. For example, if the visual code is located at height HVC (the subscript VC indicating the height of the visual code), the height HVC of the visual code is encoded into the visual code. The system 100 uses the digital imaging device 114 to scan the code and read the height HVC. During the scanning operation, the processor 102 also may acquire a barometric pressure reading from the system's barometric pressure sensor 112 (PVC).
The system 100 (e.g., the software 106) may be programmed with a mathematical relationship between pressure and height such as the following:




  
    
      
        
          H
          NEW
        
        =
        
          
            H
            VC
          
          -
          
            (
            
              
                
                  P
                  NEW
                
                -
                
                  P
                  VC
                
              
              
                Δ
                ⁢
                
                  
                
                ⁢
                
                  P
                  /
                  FLOOR
                
              
            
            )
          
        
      
    
    
      
        (
        16
        )
      
    
  




where HNEW is the system's new height to be determined, PNEW is the barometric pressure reading taken from the system's barometric pressure sensor 112 at the new height, and ΔP/FLOOR indicates the change in pressure for each floor of a building. For this computation, it may be assumed that each floor of a building is approximately the same height (e.g., 10 feet per floor). The new height presumable is different than the height HVC of the visual code but it could be the same. The change in pressure per floor of a building may be encoded into the visual code itself and read by the digital imaging device 114 of the system 100 or may be pre-programmed into the system. Further, the relationship between pressure and floors of a building may instead indicate the relationship between pressure altitude measured in, for example, feet above/below sea level.

Referring to equation (16), the values of HVC, PVC, and ΔP/FLOOR are known. To determine the floor number (or altitude) of the system, the processor causes the barometric pressure sensor 112 to report a barometric pressure reading which the processor 102 inserts into equation (16) as PNEW to compute HNEW (the system's current floor/altitude).
FIG. 6 shows a method of calibrating the barometric pressure sensor 112. The various operations may be performed or caused to be performed by the processor 102 executing software 106 in combination with the barometric pressure sensor 112. The operations may be performed in the order shown, or in a different order. Further, two or more of the operations may be performed in parallel rather than sequentially.
At 182, the method includes initiating a scan of a visual code by a user of the system 100. At 184, the method includes obtaining a first value indicative of the height (e.g., floor number, altitude, etc.) of the visual code from the visual code.
At 186, the method further includes obtaining a first barometric pressure reading from the barometric pressure sensor 112 while scanning the visual code. Thus, scanning the visual code causes the processor to obtain a pressure reading. At that point, the system has values of the height of the visual code and the barometric pressure at that height, which the system can use in equation (16) as explained above.
At 188, the system has been moved to a different height. For example, the user of the system may have moved to a different floor in a building. The method includes the processor obtaining a second barometric pressure reading at the new height. The values are all used in equation (16) and the system computes (at 190) a second value indicative of height based on the second barometric pressure reading, the first value indicative of the height of the visual code, and the rate of change of pressure with respect to height (e.g., floor).
Many modifications and other embodiments of the invention will come to mind to one skilled in the art to which this invention pertains having the benefit of the teachings presented in the foregoing descriptions, and the associated drawings. Therefore, it is to be understood that the invention is not to be limited to the specific embodiments disclosed. Although specific terms are employed herein, they are used in a generic and descriptive sense only and not for purposes of limitation.

## Claims

1. A system comprising:
a digital imaging device;
an electronic compass (e-compass); and
a processor coupled to the digital imaging device and the e-compass, wherein the processor executes instructions to:
cause the image device to scan a visual code;
read a yaw angle from the visual code;
cause the e-compass to obtain magnetic field measurements;
estimate a yaw angle based on the magnetic field measurements;
compare the yaw angle read from the visual code and the estimated yaw angle to determine a quality factor; and
determine whether the e-compass is calibrated based at least partially upon the quality factor.

2. The system of claim 1, wherein the processor executes instructions to estimate a magnetic field based upon the magnetic field measurements, and the estimated yaw angle is determined based upon the estimated magnetic field.

3. The system of claim 2, wherein the processor executes instructions to determine scale factors and biases based upon the magnetic field measurements, and wherein the estimated magnetic field is further based upon the scale factors and biases.

4. The system of claim 2, comprising an accelerometer, wherein the processor executes instructions to determine pitch values and roll values based upon accelerometer measurements.

5. The system of claim 4, wherein the processor executes instructions to detilt the estimated magnetic field based upon the pitch values and the roll values to obtain a detilted estimated magnetic field.

6. The system of claim 5, wherein the estimated yaw angle is determined based on the detilted estimated magnetic field.

7. The system of claim 6, wherein the estimated yaw angle is determined based on the detilted estimated magnetic field by computing an arctangent of the ratio of one coordinate component of the detilted estimated magnetic field to another coordinate component of the detilted estimated magnetic field.

8. The system of claim 6, wherein the processor executes instructions determine a residual rotation angle based on the detilted estimated magnetic field.

9. The system of claim 8, wherein the residual rotation angle is determined by computing an arctangent of a ratio of the square root of the sum of the squares of first and second coordinate components of the detilted estimated magnetic field to a third coordinate component of the detilted estimated magnetic field.

10. The system of claim 9, wherein the quality factor is determined as the square root of the sum of the square of the absolute difference between the yaw angle read from the visual code and the estimated yaw angle and the square of the residual rotation angle, and wherein the processor executes instructions that compare the quality factor to a threshold to determine whether the e-compass is calibrated.

11. The system of claim 1, wherein the quality factor is determined as an absolute value of the difference between the yaw angle read from the visual code and the estimated yaw angle, and wherein the processor executes instructions that compare the quality factor to a threshold to determine whether the e-compass is calibrated.

12. The system of claim 1, wherein the visual code encodes a value indicative of magnetic declination, and the processor executes instructions to read the value of magnetic declination from the visual code and adjust a calibration of the e-compass based on the value of the magnetic declination.

13. The system of claim 1, wherein the system is a mobile telephone.

14. The system of claim 1, wherein the visual code is a QR code.

15. A system comprising:
an imaging device;
an electronic compass (e-compass); and
a processor coupled to the imaging device and the e-compass, wherein the processor causes the imaging device to scan a visual code, read a yaw angle from the visual code, and compute an estimate of a yaw angle based on magnetic field measurements taken using the e-compass and scale factors and biases determined from the magnetic field measurements, wherein the processor computes a quality factor based on the yaw angle read from the visual code and the estimated yaw angle.

16. The system of claim 15, wherein the processor determines an estimated magnetic field based on the magnetic field measurements, the scale factors, and the biases.

17. The system of claim 16, comprising an accelerometer, wherein the processor determines pitch and roll values based on accelerometer measurements and detilts the estimated magnetic field based on the pitch and roll values to obtain a detilted estimated magnetic field, wherein the estimated yaw angle is determined based on the detilted estimated magnetic field.

18. The system of claim 17, wherein, when the processor determines the e-compass is not calibrated based on the quality factor, processor re-computes the quality factor based on different scale factors and different biases.

19. A system comprising:
a digital imaging device;
an electronic compass (e-compass); and
a processor coupled to the digital imaging device and the e-compass, wherein the processor executes instructions to:
cause the image device to scan a visual code at a location;
read from the visual code a yaw angle and true magnetic field measurements correspond to the location;
obtain magnetic field measurements using the e-compass;
estimate a yaw angle based on the magnetic field measurements and the true magnetic field measurements read from the visual code;
compare the yaw angle read from the visual code and the estimated yaw angle to determine a quality factor; and
determine whether the e-compass is calibrated based at least partially upon the quality factor.

20. The system of claim 19, comprising an accelerometer that determines pitch and roll values, wherein the estimated yaw angle is determined based on an estimated magnetic field, the estimated magnetic field being determined based on the magnetic field measurements, the true magnetic field measurements read from the visual code, and the pitch and roll values.