# US 8,543,227 B1 · Sensor fusion algorithm

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 8,543,227 B1
- Document ID: US8543227B1
- Status: Granted
- Kind: B1
- Application number: 13/651,272
- Filed: 2012-10-12
- Published: 2013-09-05
- Granted: 2013-09-24
- Earliest claimed: 2012-03-02
- Assignees: Microsoft Corporation
- Applicants: Microsoft Corporation
- Inventors: David R. Perek; Michael A. Schwager; Sharon Drasnin; Mark J. Seilstad
- Web page: https://patentgrep.com/patent/US8543227B1

## CPC

- G06F 3/0414: {using force sensing means to determine a position}
- E05D 11/1064: {with a coil spring perpendicular to the pivot axis}
- E05F 5/08: with springs
- F16M 11/38: by folding {, e.g. pivoting or scissors tong mechanisms}
- G05B 11/01: electric
- G06F 1/1616: {with folding flat displays, e.g. laptop computers or notebooks having a clamshell configuration, with body parts pivoting to an open position around an axis parallel to the plane they define in closed position}
- G06F 1/1618: {the display being foldable up to the back of the other housing with a single degree of freedom, e.g. by 360° rotation over the axis defined by the rear edge of the base enclosure}
- G06F 1/1637: {Details related to the display arrangement, including those related to the mounting of the display in the housing}
- G06F 1/1654: {the display being detachable, e.g. for remote use}
- G06F 1/1656: {Details related to functional adaptations of the enclosure, e.g. to provide protection against EMI, shock, water, or to host detachable peripherals like a mouse or removable expansions units like PCMCIA cards, or to provide access to internal components for maintenance or to removable storage supports like CDs or DVDs, or to mechanically mount accessories (mounting of accessories to a computer display G06F1/1607; display hoods G06F1/1603; cooling arrangements for portable computers G06F1/203)}
- G06F 1/166: {related to integrated arrangements for adjusting the position of the main body with respect to the supporting surface, e.g. legs for adjusting the tilt angle}
- G06F 1/1662: {Details related to the integrated keyboard}
- G06F 1/1669: {Detachable keyboards}
- G06F 1/1681: {Details related solely to hinges (hinge details related to the transmission of signals or power are classified in G06F1/1683)}
- G06F 1/1683: {for the transmission of signal or power between the different housings, e.g. details of wired or wireless communication, passage of cabling}
- G06F 1/1684: {Constructional details or arrangements related to integrated I/O peripherals not covered by groups G06F1/1635 - G06F1/1675}
- G06F 1/1686: {the I/O peripheral being an integrated camera}
- G06F 3/002: {Specific input/output arrangements not covered by G06F3/01 - G06F3/16 (other optical apparatus G02B27/00)}
- G06F 3/01: Input arrangements or combined input and output arrangements for interaction between user and computer (G06F3/16 takes precedence)
- G06F 3/02: Input arrangements using manually operated switches, e.g. using keyboards or dials
- G06F 3/0202: {Constructional details or processes of manufacture of the input device}
- G06F 3/0219: {Special purpose keyboards}
- G06F 3/023: Arrangements for converting discrete items of information into a coded form, e.g. arrangements for interpreting keyboard generated codes as alphanumeric codes, operand codes or instruction codes
- G06F 3/0233: {Character input methods}
- G06F 3/0416: {Control or interface arrangements specially adapted for digitisers}
- G06F 3/0487: using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser
- G06F 3/0488: using a touch-screen or digitiser, e.g. input of commands through traced gestures
- G06F 3/04886: by partitioning the display area of the touch-screen or the surface of the digitising tablet into independently controllable areas, e.g. virtual keyboards or menus
- G06F 9/541: {via adapters, e.g. between incompatible applications}
- G06F 11/3089: {Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents (software debugging using additional hardware using a specific debug interface G06F11/3656; performance evaluation by tracing or monitoring G06F11/3466)}
- G06F 13/102: {where the program performs an interfacing function, e.g. device driver (G06F13/105 takes precedence; contention policies within device drivers G06F9/4881; scheduling within device drivers G06F9/52)}
- H01H 11/00: Apparatus or processes specially adapted for the manufacture of electric switches (processes specially adapted for manufacture of rectilinearly movable switches having a plurality of operating members associated with different sets of contacts, e.g. keyboards, H01H13/88)
- H01H 13/14: Operating parts, e.g. push-button
- H01H 13/702: with contacts carried by or formed from layers in a multilayer structure, e.g. membrane switches
- H01H 13/703: characterised by spacers between contact carrying layers
- H01H 13/704: characterised by the layers, e.g. by their material or structure (H01H13/703 takes precedence)
- H01H 13/78: characterised by the contacts or the contact sites
- H01H 13/785: characterised by the material of the contacts, e.g. conductive polymers
- H01H 13/79: characterised by the form of the contacts, e.g. interspersed fingers or helical networks
- H01H 13/807: characterised by the spatial arrangement of the contact sites, e.g. superimposed sites
- H01H 13/82: characterised by contact space venting means
- H04M 1/0216: {Foldable in one direction, i.e. using a one degree of freedom hinge}
- H04M 1/0254: {comprising one or a plurality of mechanically detachable modules}
- H04M 1/72409: by interfacing with external accessories (hands-free H04M1/60)
- H05K 5/0226: {Hinges}
- H05K 5/0234: {Feet; Stands; Pedestals, e.g. wheels for moving casing on floor}
- E05Y 2201/46: Magnets
- H01H 9/26: for interlocking two or more switches ({H01H13/568 takes precedence;} by a detachable member H01H9/28 {; for electromagnetic relays H01H50/323})
- H01H 2201/036: Variable resistance
- H01H 2203/02: Interspersed fingers
- H01H 2203/036: to solve particular problems
- H01H 2203/058: Contact area function of position on layered keyboard
- H01H 2205/006: mounted on spacer
- H01H 2211/004: Adhesive
- H01H 2211/006: Individual areas
- H01H 2213/016: in adhesive layer
- H01H 2217/004: Larger or different actuating area
- H01H 2217/006: Different feeling for different switch sites
- H01H 2217/01: Off centre actuation
- H01H 2227/032: Operating force
- H04M 1/0245: {using open/close detection}
- Y02D 10/00: Energy efficient computing, e.g. low power processors, power management or thermal management
- Y10T 29/49826: Assembling or joining
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- E05D: HINGES OR SUSPENSION DEVICES FOR DOORS, WINDOWS OR WINGS (pivotal connections in general F16C11/00)
- E05F: DEVICES FOR MOVING WINGS INTO OPEN OR CLOSED POSITION; CHECKS FOR WINGS; WING FITTINGS NOT OTHERWISE PROVIDED FOR, CONCERNED WITH THE FUNCTIONING OF THE WING
- F16M: FRAMES, CASINGS OR BEDS OF ENGINES, MACHINES OR APPARATUS, NOT SPECIFIC TO ENGINES, MACHINES OR APPARATUS PROVIDED FOR ELSEWHERE; STANDS; SUPPORTS
- G05B: CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS (systems for controlling or regulating non-electric variables G05D; systems for regulating electric or magnetic variables G05F; control devices or systems insofar as characterised by mechanical features only G05G)
- H01H: ELECTRIC SWITCHES; RELAYS; SELECTORS; EMERGENCY PROTECTIVE DEVICES (contact cables H01B7/10; electrolytic self-interrupters H01G9/18; emergency protective circuit arrangements H02H; switching by electronic means without contact-making H03K17/00)
- H04M: TELEPHONIC COMMUNICATION (circuits for controlling other apparatus via a telephone cable and not involving telephone switching apparatus G08)
- H05K: PRINTED CIRCUITS; CASINGS OR CONSTRUCTIONAL DETAILS OF ELECTRIC APPARATUS; MANUFACTURE OF ASSEMBLAGES OF ELECTRICAL COMPONENTS
- E05Y: INDEXING SCHEME ASSOCIATED WITH SUBCLASSES E05D AND E05F, RELATING TO CONSTRUCTION ELEMENTS, ELECTRIC CONTROL, POWER SUPPLY, POWER SIGNAL OR TRANSMISSION, USER INTERFACES, MOUNTING OR COUPLING, DETAILS, ACCESSORIES, AUXILIARY OPERATIONS NOT OTHERWISE PROVIDED FOR, APPLICATION THEREOF
- Y02D: CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y10T: TECHNICAL SUBJECTS COVERED BY FORMER US CLASSIFICATION

## Abstract

Sensor fusion algorithm techniques are described. In one or more embodiments, behaviors of a host device and accessory devices are controlled based upon an orientation of the host device and accessory devices, relative to one another. A combined spatial position and/or orientation for the host device may be obtained based on raw measurements that are obtained from at least two different types of sensors. In addition, a spatial position and/or orientation for an accessory device is ascertained using one or more sensors of the accessory device. An orientation (or position) of the accessory device relative to the host computing device may then be computed based on the combined spatial position/orientation for the host computing device and the ascertained spatial position/orientation for the accessory device. The relative orientation that is computed may then be used in various ways to control behaviors of the host computing device and/or accessory device.

## Claims

### Claim 1

A method implemented by a host computing device comprising:
calculating multiple raw spatial positions for the host computing device independently using at least two different types of sensors of the host computing device;
processing the multiple raw spatial positions to obtain a combined spatial position for the host computing device;
ascertaining a spatial position for an accessory device connected to the host computing device using one or more sensors of the accessory device; and
computing an orientation of the accessory device relative to the host computing device based on the combined spatial position for the host computing device and the ascertained spatial position for the accessory device.

### Claim 2 (depends on 1)

A method as described in claim 1, further comprising exposing the computed orientation for use by one or more applications of the host computing device via an application programming interface (API).

### Claim 3 (depends on 1)

A method as described in claim 1, wherein calculating the multiple raw spatial positions for the host computing device comprises using a gyroscope to compute one of the multiple raw spatial positions.

### Claim 4 (depends on 1)

A method as described in claim 1, wherein calculating the multiple raw spatial positions for the host computing device comprises using an accelerometer and a magnetometer in combination to compute one of the multiple raw spatial positions.

### Claim 5 (depends on 1)

A method as described in claim 1, wherein the spatial position for the accessory device is ascertained via an accelerometer of the accessory device.

### Claim 6 (depends on 1)

A method as described in claim 1, wherein the different types of sensors include a gyroscope, an accelerometer, and a magnetometer of the host computing device.

### Claim 7 (depends on 1)

A method as described in claim 1, wherein processing the multiple raw spatial positions to obtain the combined spatial position comprises interpolating between the multiple raw spatial positions to reduce inaccuracy of the combined spatial position.

### Claim 8 (depends on 1)

A method as described in claim 1, wherein the calculating, processing ascertaining, and computing are performed via one or more microcontrollers of the host computing device configured to implement a sensor fusion module at least partially in hardware.

### Claim 9 (depends on 1)

A method as described in claim 1, further comprising controlling one or more behaviors of the host computing device based on the orientation that is computed.

### Claim 10 (depends on 9)

A method as described in claim 9, wherein controlling the one or more behaviors of the host computing device comprises selectively adjusting sensitivity of one or more sensors based on the orientation that is computed.

### Claim 11 (depends on 9)

A method as described in claim 9, wherein controlling the one or more behaviors of the host computing device comprises selectively activating or deactivating one or more applications based on the orientation that is computed.

### Claim 12 (depends on 1)

A method as described in claim 1, further comprising controlling one or more behaviors of the accessory device based on the orientation that is computed.

### Claim 13 (depends on 12)

A method as described in claim 12, wherein controlling the one or more behaviors of the accessory device comprises modifying functionality that is activated for the accessory device based on the orientation that is computed.

### Claim 14 (depends on 12)

A method as described in claim 12, wherein controlling the one or more behaviors of the accessory device comprises selectively enabling or disabling one or more sensors of the accessory device based on the orientation that is computed.

### Claim 15

A host computing device comprising:
one or more hardware elements;
a sensor fusion module implemented at least partially via the hardware elements and configured to perform operations including:
computing an orientation of an accessory device relative to the host computing device to which the accessory device is connected based upon:
a combined spatial position for the host computing device obtained by interpolation of at least two independent raw spatial positions for the host computing device calculated using multiple sensors of the host computing device; and
a spatial position for the accessory device ascertained using one or more sensors of the accessory device; and
controlling one or more behaviors of the host computing device and the accessory device based upon the orientation that is computed.

### Claim 16 (depends on 15)

The host computing device as described in claim 15, wherein the multiple sensors of the host computing device comprise at least two different types of sensors.

### Claim 17 (depends on 15)

The host computing device as described in claim 15, wherein the sensor fusion module is further configured to perform operations including:
calculating one of the multiple raw spatial positions using a gyroscope of the host computing device;
calculating another one of the multiple raw spatial positions using an accelerometer and magnetometer of the host computing device in combination; and
ascertaining the spatial position for the accessory device using an accelerometer of the accessory device.

### Claim 18 (depends on 15)

The host computing device as described in claim 15, wherein controlling the one or more behaviors comprises performing power management operations to switch power states of the host computing device and the accessory device based on the orientation that is computed.

### Claim 19

A method implemented by a host computing device comprising:
computing an orientation of an accessory device relative to a host computing device to which the accessory device is attached based on at least two independent computations of a spatial position for the host computing device that are calculated using an array of sensors for the host computing device and an ascertained spatial position for the accessory device ascertained using one or more sensors of the accessory device;
exposing an application programming interface (API) operable by one or more applications to obtain the computed orientation; and
supplying the computed orientation to an application in response to receiving a request from the application via the API.

### Claim 20 (depends on 19)

The method as described in claim 19, wherein the application programming interface (API) is further operable by the one or more applications to register with a notification system to receive notification messages regarding updates to the computed orientation that are sent by the notification system to registered applications.
