# sensorStates

## Description

## Examples

### Customize Sensor Model Used with `insEKF`

Customize a sensor model used with the `insEKF`

object. The sensor measures the velocity state, including a bias affected by random noise.

Customize the sensor model by inheriting from the `positioning.INSSensorModel`

interface class and implementing its methods. Note that only the `measurement`

method is required for implementation in the `positioning.INSSensorModel`

interface class. These sections provide an overview of how the `BiasSensor`

class implements the `positioning.INSSensorModel`

methods, but for details on their implementation, see the details of the implementation are in the attached `BiasSensor.m`

file.

**Implement sensorStates method**

To model bias, the `sensorStates`

method needs to return a state, `Bias`

, as a structure. When you add a `BiasSensor`

object to an `insEKF`

filter object, the filter adds the bias component to the state vector of the filter.

**Implement measurement method**

The measurement is the velocity component of the filter state, including the bias. Therefore, return the summation of the velocity component from the filter and the bias.

**Implement measurementJacobian method**

The `measurementJacobian`

method returns the partial derivative of the `measurement`

method with respect to the state vector of the filter as a structure. All the partial derivatives are `0`

, except the partial derivatives of the measurement with respect to the velocity and bias state components.

**Implement stateTransition method**

The `stateTransiton`

method returns the derivative of the sensor state defined in the `sensorStates`

method. Assume the derivative of the bias is affected by a white noise with a standard deviation of `0.01`

. Return the derivative as a structure. Note that this only showcases how to set up the method, and does not correspond to any practical application.

**Implement stateTransitionJacobian method**

Since the `stateTransiton`

function does not depend on the state of the filter, the Jacobian matrix is 0.

**Create and add inherited object**

Create a `BiasSensor`

object.

biSensor = BiasSensor

biSensor = BiasSensor with no properties.

Create an `insEKF`

object with the `biSensor`

object.

filter = insEKF(biSensor,insMotionPose)

filter = insEKF with properties: State: [17x1 double] StateCovariance: [17x17 double] AdditiveProcessNoise: [17x17 double] MotionModel: [1x1 insMotionPose] Sensors: {[1x1 BiasSensor]} SensorNames: {'BiasSensor'} ReferenceFrame: 'NED'

The filter state contains the bias component.

stateinfo(filter)

`ans = `*struct with fields:*
Orientation: [1 2 3 4]
AngularVelocity: [5 6 7]
Position: [8 9 10]
Velocity: [11 12 13]
Acceleration: [14 15 16]
BiasSensor_Bias: 17

**Show customized BiasSensor class**

`type BiasSensor.m`

classdef BiasSensor < positioning.INSSensorModel %BIASSENSOR Sensor measuring velocity with bias % Copyright 2021 The MathWorks, Inc. methods function s = sensorstates(~,~) % Assume the sensor has a bias. Define a Bias state to enable % the filter to estimate the bias. s = struct('Bias',0); end function z = measurement(sensor,filter) % Measurement is the summation of the velocity measurement and % the bias. velocity = stateparts(filter,'Velocity'); bias = stateparts(filter,sensor,'Bias'); z = velocity + bias; end function dzdx = measurementJacobian(sensor,filter) % Compute the Jacobian, which is the partial derivative of the % measurement (velocity plus bias) with respect to the filter % state vector. % Obtain the dimension of the filter state. N = numel(filter.State); % The partial derviative of the Bias with respect to all the % states is zero, except the Bias state itself. dzdx = zeros(1,N); % Obtain the index for the Bias state component in the filter. bidx = stateinfo(filter,sensor,'Bias'); dzdx(:,bidx) = 1; % The partial derivative of the Velocity with respect to all the % states is zero, except the Velocity state itself. vidx = stateinfo(filter,'Velocity'); dzdx(:,vidx) = 1; end function dBias = stateTransition(~,~,dt,~) % Assume the derivative of the bias is affected by a zero-mean % white noise with a standard deviation of 0.01. noise = 0.01*randn*dt; dBias = struct('Bias',noise); end function dBiasdx = stateTransitonJacobian(~,filter,~,~) % Since the stateTransiton function does not depend on the % state of the filter, the Jacobian is all zero. N = numel(filter.State); dBiasdx = zeros(1,N); end end end

## Input Arguments

`filter`

— INS filter

`insEKF`

object

INS filter, specified as an `insEKF`

object.

`options`

— Options for INS filter

`insOptions`

object

Options for the INS filter, specified as an `insOptions`

object.

## Output Arguments

`s`

— State structure

structure

State structure, returned as a structure. The field names of the structure are the names of the states that you want estimate. The filter uses the value of each field as the default value of the corresponding state component, and uses the size of the value as the size of the corresponding state component.

**Tip**

You can use the `stateparts`

object
function of the `insEKF`

filter object to access the states saved in
the filter.

## Version History

**Introduced in R2022a**

## See Also

`measurement`

| `measurementJacobian`

| `stateTransition`

| `stateTransitionJacobian`

## Open Example

You have a modified version of this example. Do you want to open this example with your edits?

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

# Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)