Embedded Firmware Library VN100 Manual
User Manual: Pdf
Open the PDF directly: View PDF
.
Page Count: 121
| Download | |
| Open PDF In Browser | View PDF |
Embedded Navigation Solutions
VectorNav Technologies
10501 Markison Road
Dallas, Texas 75238
United States of America
Embedded Firmware Library
Contact Info
Phone
+1 512 772 3615
Email
support@vectornav.com
Website www.vectornav.com
Embedded Firmware Library
UM003
Document Information
Title
Subtitle
Document Type
Document Number
Document Status
Embedded Firmware Library
User Manual for Embedded Firmware Library
User Manual
UM003
Released
Embedded Firmware Library
2/121
Embedded Firmware Library
UM003
VectorNav Technical Documentation
In addition to our product-specific technical data sheets, the following manuals are available to assist
VectorNav customers in product design and development.
VN-100 User Manual: The user manual provides a high-level overview of product specific
information for each of our inertial sensors. Further detailed information regarding hardware
integration and application specific use can be found in the separate documentation listed
below.
Hardware Integration Manual: This manual provides hardware design instructions and
recommendations on how to integrate our inertial sensors into your product.
Application Notes: This set of documents provides a more detailed overview of how to utilize
many different features and capabilities offered by our products, designed to enhance
performance and usability in a wide range of application-specific scenarios.
Document Symbols
The following symbols are used to highlight important information within the manual:
The information symbol points to important information within the manual.
The warning symbol points to crucial information or actions that should be followed to avoid
reduced performance or damage to the navigation module.
Technical Support
Our website provides a large repository of technical information regarding our navigation sensors. A list
of the available documents can be found at the following address:
http://www.vectornav.com/support
If you have technical problems or cannot find the information that you need in the provided documents,
please contact our support team by email or phone. Our engineering team is committed to providing
the required support necessary to ensure that you are successful with the design, integration, and
operation of our embedded navigation sensors.
Technical Support Contact Info
Email: support@vectornav.com
Phone: +1.512.772.3615
Embedded Firmware Library
3/121
Embedded Firmware Library
UM003
Table of Contents
1 Introduction
8
2 Document and Library Rules
9
ACRONYMS
9
NAMING CONVENTIONS
10
3 Firmware Library
11
PACKAGE DESCRIPTION
11
Examples folder
11
Library folder
11
Project folder
12
Description of firmware library files
12
LIBRARY INITIALIZATION AND CONFIGURATION
15
4 Device firmware overview
16
5 User Configuration Files
17
DEVICE SELECTION
17
USER FUNCTIONS
17
VN_SPI_SetSS
18
VN_SPI_SendReceive
19
VN_Delay
20
6 VN-100 Orientation Sensor
21
DATA STRUCTURES
21
Registers
21
Command IDs
21
Error IDs
22
ADOR Type
22
ADOF Type
23
Baud Type
23
AccelGainType
23
SPI Response Packet
24
VN-100 LIBRARY FUNCTIONS
25
VN100_SPI_ReadRegister
28
VN100_SPI_WriteRegister
29
VN100_SPI_GetModel
30
Embedded Firmware Library
4/121
Embedded Firmware Library
UM003
VN100_SPI_GetHWRev
31
VN100_SPI_GetSerial
32
VN100_SPI_GetFWVer
33
VN100_SPI_GetBaudRate
34
VN100_SPI_SetBaudRate
35
VN100_SPI_GetADOR
36
VN100_SPI_SetADOR
37
VN100_SPI_GetADOF
38
VN100_SPI_SetADOF
39
VN100_SPI_GetYPR
40
VN100_SPI_GetQuat
41
VN100_SPI_GetQuatMag
42
VN100_SPI_GetQuatAcc
43
VN100_SPI_GetQuatRates
44
VN100_SPI_GetQuatMagAcc
45
VN100_SPI_GetQuatAccRates
46
VN100_SPI_GetQuatMagAccRates
47
VN100_SPI_GetYPRMagAccRates
48
VN100_SPI_GetDCM
49
VN100_SPI_GetMag
50
VN100_SPI_GetAcc
51
VN100_SPI_GetRates
52
VN100_SPI_GetMagAccRates
53
VN100_SPI_GetMagAccRef
54
VN100_SPI_SetMagAccRef
55
VN100_SPI_GetFiltMeasVar
56
VN100_SPI_SetFiltMeasVar
57
VN100_SPI_GetHardSoftIronComp
58
VN100_SPI_SetHardSoftIronComp
59
VN100_SPI_GetFiltActTuning
60
VN100_SPI_SetFiltActTuning
61
VN100_SPI_GetAccComp
62
VN100_SPI_SetAccComp
63
VN100_SPI_GetRefFrameRot
64
Embedded Firmware Library
5/121
Embedded Firmware Library
UM003
VN100_SPI_SetRefFrameRot
65
VN100_SPI_GetAccGain
66
VN100_SPI_SetAccGain
67
VN100_SPI_RestoreFactorySettings
68
VN100_SPI_Tare
69
VN100_SPI_Reset
70
VN100_SPI_GetAccInertial
71
VN100_SPI_GetMagInertial
72
7 Math Library
73
DATA STRUCTURES
73
MATH LIBRARY FUNCTIONS
73
VN_DotP
76
VN_CrossP
77
VN_VecAdd
78
VN_VecSub
79
VN_VecMultT
80
VN_Diagonal
81
VN_MatAdd
82
VN_MatSub
83
VN_MatMult
84
VN_MatMultMMT
85
VN_MatMultMTM
86
VN_MatScalarMult
87
VN_MatVecMult
88
VN_MatTVecMult
89
VN_MatCopy
90
VN_MatInv
91
VN_SkewMatrix
92
VN_Transpose
93
VN_Norm
94
VN_Normalize
95
VN_Quat2DCM
96
VN_YPR2DCM
97
VN_MatZeros
98
Embedded Firmware Library
6/121
Embedded Firmware Library
UM003
VN_Quat2Euler121
99
VN_Quat2Euler123
100
VN_Quat2Euler131
101
VN_Quat2Euler132
102
VN_Quat2Euler212
103
VN_Quat2Euler213
104
VN_Quat2Euler231
105
VN_Quat2Euler232
106
VN_Quat2Euler312
107
VN_Quat2Euler313
108
VN_Quat2Euler321
109
VN_Quat2Euler323
110
VN_Quat2Gibbs
111
VN_Quat2MRP
112
VN_Quat2PRV
113
VN_AddQuat
114
VN_SubQuat
115
VN_QuatKinematicDiffEq
116
VN_YPRKinematicDiffEq
117
VN_Body2Inertial
118
VN_Inertial2Body
119
8 Revision history
120
Embedded Firmware Library
7/121
Embedded Firmware Library
1
UM003
Introduction
This document describes the VectorNav embedded firmware library.
The firmware library consists of a collection of routines, data structures, and macros that provide the
user with high level control over the functionality of the entire line of VectorNav embedded sensors.
This library effectively serves two purposes. The first and foremost purpose is to create a set of device
drivers for each of the VectorNav embedded sensors that help developers spend more time focusing on
utilizing the rich features and capabilities of the sensors, and less time worrying about the low-level
details of the communication protocols. The second purpose is to provide a rich embedded software
library that will assists users in capturing the full capabilities provided by the line of VectorNav products.
There are some applications that only require the measurements taken directly from the sensor. For
these applications, the firmware library will help you get up and running with the data you need,
without having to deal with the inter-workings of the device. When working with inertial and
orientation sensors in particular, most users require some form of data post-processing in order to fulfill
their project requirements. This post-processing may be in the form of mathematical coordinate
transformations, or possibly selecting a different form of attitude representation. Performing many of
these mathematical transformations in an embedded environment is not a trivial task to say the least.
In order to help developers overcome this potential hurdle, VectorNav provides an extensive set of math
routines integrated into the firmware library. This library consists of a wide variety of attitude and
inertial guidance related functions that will assist developers in making use of the rich set of
measurements provided by the VectorNav line of inertial sensors.
The driver source code is developed in ‘Strict ANSI-C’. Providing the library in ‘Strict ANSI-C’ makes it
independent from the software toolchain.
Note that since the firmware is generic and covers all device functionalities, the size and/or execution
speed of the application code will not likely be optimized for your application. For many task, the library
may be used as is. However for applications that have very strict requirements on code size or
execution speed, the library should be used as a reference on how to interface with the sensors. In this
case, the code may need to be tailored to meet your specific application requirements.
The firmware library user manual is structured as follows:
Definitions, document conventions, and firmware library rules.
Overview of the firmware library, and examples on how to make use of the library.
Detailed description of the firmware library including all data structures and software functions for each
of the VectorNav embedded sensors, and related peripheral library files.
Embedded Firmware Library
8/121
Embedded Firmware Library
2
UM003
Document and Library Rules
Acronyms
Table 1 describes the acronyms used in the firmware and documentation.
Table 1. List of abbreviations
Acronym
Definition
ACC
Accelerometer
ADOF
Asynchronous Data Output Frequency
ADOR
Asynchronous Data Output Register
DCM
Directional Cosine Matrix
GYR
Gyro (angular rates)
HSI
Hard / Soft Iron
MAG
Magnetometer
MAT
Matrix
QUAT
Quaternion
REG
Register
SPI
Serial peripheral interface
SS
Slave select
VEC
Vector
VN
VectorNav
YPR
Yaw, pitch, roll
Embedded Firmware Library
9/121
Embedded Firmware Library
UM003
Naming conventions
The firmware library uses the following naming conventions:
All functions, constants, variables, and macros start with VN_.
System and source/header file names are preceded by ‘VN_’, for example VN_lib.h.
Registers for individual products are considered as constants. Their names are in upper case.
The name of the registers is preceded by the product name followed by the register name. The
register name is the same as in the product user manual. For example the ADOR register on the
VN100 has the name VN100_ADOR.
The name for all functions, constants, and variables that are specific to a given product are
preceded by the product name. The first letter in each word is in upper case. For example
VN100_SPI_WriteRegister.
Embedded Firmware Library
10/121
Embedded Firmware Library
3
UM003
Firmware Library
Package description
The firmware library is provided in one single zip file. After extracting this zip file you should have one
folder VN_FWLib that contains the following subfolders:
Table 2.
Firmware library folder structure
Examples folder
This Examples folder contains, for each product, examples for how to use each of the provided
interfaces. Each example will contain the minimum number of files required to run a typical example
listed below:
Readme.txt – brief text file describing the example and how to make it work
VN_user.h – header file allowing the user to configure which products should be included in the
library.
VN_user.c – source file containing the platform specific routines that need to be modified by the
user for the example to work.
main.c – main example code
All of the examples provided are independent of the software toolchain.
Library folder
The Library folder contains all the subdirectories and files that make up the core of the library:
inc sub-folder contains the firmware library header files. They do not need to be modified by
the user:
VN_type.h: common data types and enumeration used in all other files,
VN_lib.h: main header file that includes all other header files,
VN_math.h: math library header file,
VN100.h: header file for the VN-100 specific code.
src sub-folder contains the firmware library source files. They do not need to be modified by
the user:
Embedded Firmware Library
11/121
Embedded Firmware Library
UM003
VN_lib.c: main library source file. Includes routines that are shared between all
VectorNav products,
VN_math.c: math library source file,
VN100.c: source file for the VN-100 specific code.
All library files are coded in Strict ANSI-C and are independent from the software toolchain.
Project folder
The Project folder contains a standard template project program that compiles all library files plus all the
user-modifiable files that are necessary to create a new project:
VN_user.h: header file for user-modifiable code and settings. Use this file to set which
code will compile,
VN_user.c: source file for the user-modifiable code. This file needs to be modified by
the user to handle platform specific features,
main.c: main program body.
Description of firmware library files
Table 2 lists and describes the different files used by the firmware library.
The firmware library layout design and file relationships are shown in Figure 2. Each product has both a
source and header file.
The header file VN_lib.h includes all the product header files. This is the only file that needs to be
included in the user application to interface with the library.
VN_user.h and VN_user.c are the only files that need to be modified by the user. The VN_user.h file is
used to determine which products will be included in the compiled version of the library.
Embedded Firmware Library
12/121
Embedded Firmware Library
UM003
Table 3.
Firmware library files
Filename
Description
VN_lib.h
Header file including all other header files.
VN_lib.c
Source file that includes all code that is shared in
between all of the VectorNav products.
VN_type.h
Header file that includes all data types that are
shared by all other files in the library
VN_math.h
Header file for the VectorNav math library
VN_math.c
Source file for the VectorNav math library.
This library is included to assist the user in
performing attitude transformations and other
matrix/vector mathematics.
VN_user.h
Header file for the user configuration file.
This file is used to set which products in the library
are included when compiled. For instance if you
want to include the code necessary to interface
with the VN100 then you need to uncomment the
following line in this file:
#define _VN100
VN_user.c
Source file for the user-modifiable code
VN100.h
Header file for the VN100.
This file is compiled if the _VN100 is define in the
VN_user.h file.
VN100.c
Source file for VN-100 specific functions.
This file is compiled if the _VN100 is defined in the
VN_user.h file. All functions specific to the VN-100
product are contained in this file.
main.c
Main example program body.
Embedded Firmware Library
13/121
Embedded Firmware Library
UM003
Figure 1.
Application Layer
application.c
VN_user.h
API Layer
Hardware Layer
Firmware library file architecture
VN_lib.h
VN_lib.c
VN_type.h
VN_math.h
VN_math.c
VN100.h
VN100.c
VN_user.c
Embedded Firmware Library
14/121
Embedded Firmware Library
UM003
Library initialization and configuration
This section describes how to initialize and setup the VectorNav embedded library.
1. In the main application file, include the VN_lib.h, for example:
#include “VN_lib.h”
2. In the VN_user.h header file uncomment the lines necessary to include the functions for the
product(s) that you are interested in. For example, if you want to interface with the VN-100
then you will need to uncomment the following line:
#define _VN100
3. If you are using the SPI interface then you will need to modify the following functions found in
the VN_config.c file:
a. VN_SPI_SetSS: Place your hardware specific code here that is required to set/reset the
SPI slave slect lines for the given sensor.
b. VN_SPI_SendReceive: Place your hardware specific code here that is required to send
and receive 4 bytes over the SPI bus.
c. VN_Delay: Place your hardware specific code here that is required to delay the
processor by the given number of microseconds.
Embedded Firmware Library
15/121
Embedded Firmware Library
4
UM003
Device firmware overview
This section describes in detail the firmware library provided for each device. The related functions are
fully described, along with an example of how to use them.
The functions are described in the following format:
Table 4.
Function description format
Function Name
The name of the device function
Function prototype
Prototype declaration
Behavior description
Brief explanation of how the function is executed
Input parameter {x}
Description of the input parameters
Output parameter {x}
Description of the output parameters
Return value
Value returned by the function
Required preconditions
Requirements before calling the function
Called functions
Other library functions called
Embedded Firmware Library
16/121
Embedded Firmware Library
5
UM003
User Configuration Files
The VectorNav embedded firmware library is platform independent. In order for this library to be used
on a specific hardware platform, the user will need to modify two files to enable hardware specific
functionality. All of the necessary user configurable parameters and functions are located in the
VN_user.h and VN_user.c source files.
Device Selection
The user needs to select which devices they want to control using the embedded firmware library. In
the VN_user.h file you will find a set of constants, one for each device provided by VectorNav. The code
for each device provided by the embedded library is conditionally compiled if the corresponding name
of the device is defined as a constant in the VN_user.h header file.
For instance if you are working on a project using the VN-100 orientation sensor, then in the VN_user.h
file you will want to make sure that the following line is NOT commented out.
/********************************* VN-100 *********************************/
#define _VN100
If the _VN100 constant is defined during compilation, then the code in the VN100.c file will be compiled
in the user’s program. If for instance you wanted to provide your own functions for the control of the
VN-100 and you only wanted to use the math library provided by the firmware library then you could
comment out the _VN100 line in order to keep the VN-100 drivers from being included in the final code.
/********************************* VN-100 *********************************/
/* #define _VN100 */
User Functions
There are three functions that need to be implemented by the user for the correct operation of the
VectorNav embedded firmware library. These functions are found in the VN_user.c source file.
Embedded Firmware Library
17/121
Embedded Firmware Library
UM003
VN_SPI_SetSS
Table 5 describes the VN_SPI_SetSS function.
Table 5.
_SPI_SetSS
Function Name
VN_SPI_SetSS
Function prototype
VN100_SPI_Packet* _SPI_SetSS (unsigned char sensorID, unsigned char
regID, unsigned char regWidth);
Behavior description
This is a generic function that will set the SPI slave select line for the given
sensor. This function needs to be added by the user with the logic specific
to their hardware to perform the necessary actions to either raise or lower
the slave select line for the given sensor. If a multiplexer is used then the
logic/communications necessary to perform the actions should be placed
here.
Input parameter 1
sensorID -> The sensor to set the slave select line for. This parameter
allows the user to communicate with multiple orientation sensors.
Input parameter 2
state - -> The state to set the slave select to. Two possibilities are
allowed, either VN_PIN_LOW or VN_PIN_HIGH.
Output parameter
None
Return value
None
Required preconditions
None
Called functions
Determined by user code.
Example:
/* Example code for an STM32F103 ARM7 MCU */
void VN_SPI_SetSS(unsigned char sensorID, VN_PinState state){
/* User code to set SPI SS lines goes here. */
switch(sensorID){
case 0:
if(state == VN_PIN_LOW){
/* Start SPI Transaction - Pull SPI CS line low */
GPIO_ResetBits(GPIOA, GPIO_Pin_0);
}else{
/* End SPI transaction - Pull SPI CS line high */
GPIO_SetBits(GPIOA, GPIO_Pin_0);
}
break;
}
}
Embedded Firmware Library
18/121
Embedded Firmware Library
UM003
VN_SPI_SendReceive
Table 6 describes the VN_SPI_SendReceive function.
Table 6.
VN_SPI_SendReceive
Function Name
VN_SPI_SendReceive
Function prototype
VN_SPI_SendReceive(unsigned long data);
Behavior description
Transmits the given 32-bit word on the SPI bus. The user needs to place
their hardware specific logic here to send 4 bytes out the SPI bus. The
slave select line is controlled by the function VN_SPI_SetSS given above, so
the user only needs to deal with sending the data out the SPI bus with this
function.
Input parameter 1
data -> The 32-bit data to send over the SPI bus
Output parameter
None
Return value
None
Required preconditions
None
Called functions
Determined by user code.
Example:
/* Example code for an STM32F103 ARM7 MCU */
unsigned long VN_SPI_SendReceive(unsigned long data){
/* User code to send out 4 bytes over SPI goes here */
unsigned long i;
unsigned long ret = 0;
for(i=0;i<4;i++){
/* Wait for SPI1 Tx buffer empty */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
/* Send SPI1 requests */
SPI_I2S_SendData(SPI1, VN_BYTE(data, i));
/* Wait for response from VN-100 */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
/* Save received data in buffer */
ret |= ((unsigned long)SPI_I2S_ReceiveData(SPI1) << (8*i));
}
return ret;
}
Embedded Firmware Library
19/121
Embedded Firmware Library
UM003
VN_Delay
Table 7 describes the VN_Delay function.
Table 7.
VN_Delay
Function Name
VN_Delay
Function prototype
VN_SPI_Delay(unsigned long delay_uS);
Behavior description
Delay the processor for deltaT time in microseconds. The user needs to
place the hardware specific code here necessary to delay the processor for
the time span given by delay_uS measured in micro seconds. This function
doesn't need to be ultra precise. The only requirement on this function is
that the processor is delayed a time NO LESS THAN 90% of the time given
by the variable delay_uS in microseconds. The minimum time span that is
used by the VectorNav library code is 100uS so the function call shouldn't
affect the timing accuracy much. If you decide to modify this library or
wish to have more precision on this delay function then you can comment
out this function and replace it with an optimized macro instead. Many
compilers have their own delay routines or macros so make sure you check
your compiler documentation before attempting to write your own.
Input parameter 1
delay_uS -> Time to delay the processor in microseconds
Output parameter
None
Return value
None
Required preconditions
None
Called functions
Determined by user code.
Example:
/* Example code for an STM32F103 ARM7 MCU */
void VN_Delay(unsigned long delay_uS){
unsigned long i;
for(i=delay_uS*10; i--; );
}
Embedded Firmware Library
20/121
Embedded Firmware Library
6
UM003
VN-100 Orientation Sensor
The data structures used in the VN-100 firmware library are described in Section 6.1, while Section 6.2
describes the firmware library functions.
Data Structures
The data structures used by the VN-100 firmware library are defined here. More information on the
registers can be found in the VN-100 User Manual.
Registers
The registers present on the VN-100 are represented by as constants in the firmware as shown below:
/* VN-100 Registers */
#define
VN100_REG_MODEL
#define
VN100_REG_HWREV
#define
VN100_REG_SN
#define
VN100_REG_FWVER
#define
VN100_REG_SBAUD
#define
VN100_REG_ADOR
#define
VN100_REG_ADOF
#define
VN100_REG_YPR
#define
VN100_REG_QTN
#define
VN100_REG_QTM
#define
VN100_REG_QTA
#define
VN100_REG_QTR
#define
VN100_REG_QMA
#define
VN100_REG_QAR
#define
VN100_REG_QMR
#define
VN100_REG_DCM
#define
VN100_REG_MAG
#define
VN100_REG_ACC
#define
VN100_REG_GYR
#define
VN100_REG_MAR
#define
VN100_REG_REF
#define
VN100_REG_SIG
#define
VN100_REG_HSI
#define
VN100_REG_ATP
#define
VN100_REG_ACT
#define
VN100_REG_RFR
#define
VN100_REG_YMR
#define
VN100_REG_ACG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
More information on each of these register can be found in Section 6 of the VN-100 User Manual.
Command IDs
The available commands for the VN-100 are presented by the following data structure:
/* Command IDs */
typedef enum VN100_CmdID
{
VN100_CmdID_ReadRegister
= 0x01,
Embedded Firmware Library
21/121
Embedded Firmware Library
UM003
VN100_CmdID_WriteRegister
VN100_CmdID_WriteSettings
VN100_CmdID_RestoreFactorySettings
VN100_CmdID_Tare
VN100_CmdID_Reset
} VN100_CmdID;
=
=
=
=
=
0x02,
0x03,
0x04,
0x05,
0x06,
The commands are described in more detail in Section 5.2 of the VN-100 User Manual.
Error IDs
The error codes for the VN-100 are represented by the following data structure:
/* System Error */
typedef enum VN100_Error
{
VN100_Error_None
VN100_Error_ErrorListOverflow
VN100_Error_HardFaultException
VN100_Error_InputBufferOverflow
VN100_Error_InvalidChecksum
VN100_Error_InvalidCommand
VN100_Error_NotEnoughParameters
VN100_Error_TooManyParameters
VN100_Error_InvalidParameter
VN100_Error_InvalidRegister
VN100_Error_UnauthorizedAccess
VN100_Error_WatchdogReset
VN100_Error_OutputBufferOverflow
VN100_Error_InsufficientBandwidth
VN100_Error_ErrorListOverflow
} VN100_Error;
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
0,
255,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
255
The error codes are described in more detail in Section 5.3 of the VN-100 User Manual.
ADOR Type
The ADOR register values are represented by the following data structure:
/* Asynchronous Data Output Register */
typedef enum VN100_ADORType
{
VN100_ADOR_OFF
= 0,
VN100_ADOR_YPR
= 1,
VN100_ADOR_QTN
= 2,
VN100_ADOR_QTM
= 3,
VN100_ADOR_QTA
= 4,
VN100_ADOR_QTR
= 5,
VN100_ADOR_QMA
= 6,
VN100_ADOR_QAR
= 7,
VN100_ADOR_QMR
= 8,
VN100_ADOR_DCM
= 9,
VN100_ADOR_MAG
= 10,
VN100_ADOR_ACC
= 11,
Embedded Firmware Library
22/121
Embedded Firmware Library
VN100_ADOR_GYR
VN100_ADOR_MAR
VN100_ADOR_YMR
} VN100_ADORType;
UM003
= 12,
= 13,
= 14,
The ADOR register is described in more detail in Section 6.6 of the VN-100 User Manual.
ADOF Type
The ADOF register values are represented by the following data structure:
/* Asynchronous Data Ouput Rate
typedef enum VN100_ADOFType {
VN100_ADOF_1HZ
=
VN100_ADOF_2HZ
=
VN100_ADOF_4HZ
=
VN100_ADOF_5HZ
=
VN100_ADOF_10HZ
=
VN100_ADOF_20HZ
=
VN100_ADOF_25HZ
=
VN100_ADOF_40HZ
=
VN100_ADOF_50HZ
=
VN100_ADOF_100HZ
=
VN100_ADOF_200HZ
=
} VN100_ADOFType;
Register */
1,
2,
4,
5,
10,
20,
25,
40,
50,
100,
200
The ADOF register is described in more detail in Section 6.7 of the VN-100 User Manual.
Baud Type
The baud rate register is represented by the following data structure:
/* Serial Baud Rate Register */
typedef enum VN100_BaudType {
VN100_Baud_9600
= 9600,
VN100_Baud_19200
= 19200,
VN100_Baud_38400
= 38400,
VN100_Baud_57600
= 57600,
VN100_Baud_115200
= 115200,
VN100_Baud_128000
= 128000,
VN100_Baud_230400
= 230400,
VN100_Baud_460800
= 460800,
VN100_Baud_921600
= 921600
} VN100_BaudType;
The baud rate register is described in more detail in Section 6.5 of the VN-100 User Manual.
AccelGainType
The accelerometer gain register is represented by the following data structure:
/* Accelerometer Gain Type */
typedef enum VN100_AccGainType {
Embedded Firmware Library
23/121
Embedded Firmware Library
UM003
VN100_AccGain_2G = 0,
VN100_AccGain_6G = 1
} VN100_AccGainType;
The accelerometer gain register is described in more detail in Section 6.28 of the VN-100 User Manual.
SPI Response Packet
The SPI response packet is a data structure that is used to organize the SPI response data packets. Each
time a command is sent to the VN-100 and a response is received, it is placed in a response packet
structure. This allows for easy access to the various components of the response packet. The data
structure used is given below:
/* 32-bit Parameter Type */
typedef union {
unsigned long
UInt;
float
Float;
} VN100_Param;
/* SPI Response Packet */
typedef struct {
unsigned char
ZeroByte;
unsigned char
CmdID;
unsigned char
RegID;
unsigned char
ErrID;
VN100_Param
Data[VN100_SPI_BUFFER_SIZE];
} VN100_SPI_Packet;
The first four bytes of the packet are accessible via the CmdID, RegID, and ErrID members of the above
structure. The actual data that is passed back to the user from the VN-100 will either take the form of a
32-bit unsigned integer or a 32-bit floating point number.
The following example code shows how the data in the SPI response packet is accessed as a 32-bit
unsigned integer.
VN100_SPI_Packet *ReturnPacket;
VN100_BaudType
baudRate = VN100_Baud_115200;
/* Set the baud rate to 115200 */
ReturnPacket = VN100_SPI_SetBaudRate(0, VN100_Baud_115200);
/* Check to see if the baud rate was set correctly */
if((VN100_BaudType)ReturnPacket->Data[0].UInt == VN100_Baud_115200){
/* The baud rate was set successfully */
}else{
/* Check the error code */
}
The next example shows how you can access the data in the SPI response packet as a floating point
value.
VN100_SPI_Packet *ReturnPacket;
float fp[4] = {1.0, 1.0, 0.99, 0.99};
Embedded Firmware Library
24/121
Embedded Firmware Library
UM003
/* Set the baud rate to 115200 */
ReturnPacket = VN100_SPI_SetFiltActTuning(0,&fp[0],&fp[1],&fp[2],&fp[3]);
/* Check to see if the second tuning parameter was set correctly */
if(fabs(ReturnPacket->Data[1].Float - fp[1]) <= 0.0001f){
/* The parameter was set successfully */
}else{
/* Check the error code */
}
VN-100 library functions
Table 8 lists the various functions of the VN-100 firmware library.
Table 8.
VN-100 library functions
Function Name
Description
VN100_SPI_ReadRegister
Read a register on the sensor using SPI
VN100_SPI_WriteRegister
Write to a register on the sensor using SPI
VN100_SPI_GetModel
Get the model number
VN100_SPI_GetHWRev
Get the hardware revision
VN100_SPI_GetSerial
Get the serial number
VN100_SPI_GetFWVer
Get the firmware version
VN100_SPI_GetBaudRate
Get the serial baud rate
VN100_SPI_SetBaudRate
Set the serial baud rate
VN100_SPI_GetADOR
Get the Async Data Output Register Type
VN100_SPI_SetADOR
Set the Async Data Output Register Type
VN100_SPI_GetADOF
Get the Async Data Output Frequency
VN100_SPI_SetADOF
Set the Async Data Output Frequency
VN100_SPI_GetYPR
Get the yaw, pitch, and roll
VN100_SPI_GetQuat
Get the quaternion attitude
VN100_SPI_GetQuatMag
Get the quaternion and magnetic
VN100_SPI_GetQuatAcc
Get the quaternion and acceleration
Embedded Firmware Library
25/121
Embedded Firmware Library
UM003
VN100_SPI_GetQuatRates
Get the quaternion, magnetic, and acceleration
VN100_SPI_GetQuatMagAccel
Get the quaternion, magnetic, and angular rates
VN100_SPI_GetQuatAccRates
Get the quaternion, acceleration, and angular rates
VN100_SPI_GetQuatMagAccRates
Get the quaternion, magnetic, acceleration, and angular rates
VN100_SPI_GetYPRMagAccRates
Get the yaw, pitch, roll, magnetic, acceleration, and angular
rates
VN100_SPI_GetDCM
Get the directional cosine matrix
VN100_SPI_GetMag
Get the magnetic measurements
VN100_SPI_GetAcc
Get the acceleration measurements
VN100_SPI_GetRates
Get the angular rate measurements
VN100_SPI_GetMagAccRates
Get the magnetic, acceleration, and angular rates
VN100_SPI_GetMagAccRef
Get the magnetic and acceleration reference vectors
VN100_SPI_SetMagAccRef
Set the magnetic and acceleration reference vectors
VN100_SPI_GetFiltMeasVar
Get the filter measurement variance parameters
VN100_SPI_SetFiltMeasVar
Set the filter measurement variance parameters
VN100_SPI_GetHardSoftIronComp
Get the magnetic hard/soft iron compensation parameters
VN100_SPI_SetHardSoftIronComp
Set the magnetic hard/soft iron compensation parameters
VN100_SPI_GetFiltActTuning
Get the filter active tuning parameters
VN100_SPI_SetFiltActTuning
Set the filter active tuning parameters
VN100_SPI_GetAccComp
Get the accelerometer compensation parameters
VN100_SPI_SetAccComp
Set the accelerometer compensation parameters
VN100_SPI_GetRefFrameRot
Get the reference frame rotation
VN100_SPI_SetRefFrameRot
Set the reference frame rotation
VN100_SPI_GetAccGain
Get the accelerometer gain
VN100_SPI_SetAccGain
Set the accelerometer gain
VN100_SPI_RestoreFactorySettings
Restore sensor to factory default settings
Embedded Firmware Library
26/121
Embedded Firmware Library
UM003
VN100_SPI_Tare
Zero out the current attitude
VN100_SPI_Reset
Reset the VN-100 sensor
VN100_SPI_GetAccInertial
Get the measured inertial acceleration
VN100_SPI_GetMagInertial
Get the measured inertial magnetic
Embedded Firmware Library
27/121
Embedded Firmware Library
UM003
VN100_SPI_ReadRegister
Table 9 describes the VN100_SPI_ReadRegister function.
Table 9.
VN100_SPI_ReadRegister
Function Name
VN100_SPI_ReadRegister
Function prototype
VN100_SPI_Packet* VN100_SPI_ReadRegister(
unsigned char sensorID,
unsigned char regID,
unsigned char regWidth);
Behavior description
Read the register with the ID regID on a VN-100 sensor using the SPI
interface.
Input parameter 1
sensorID: The sensor to get the requested data from
Input parameter 2
regID: The requested register ID number
Input parameter 3
regWidth: The width of the requested register in 32-bit words
Output parameter
None
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN_SPI_SetSS()
VN_SPI_SendReceive()
VN_Delay()
Example:
/* Read model number register */
VN100_SPI_Packet
*packet;
packet = VN100_SPI_ReadRegister(0, VN100_REG_MODEL, 3);
Embedded Firmware Library
28/121
Embedded Firmware Library
UM003
VN100_SPI_WriteRegister
Table 10 describes the VN100_SPI_WriteRegister function.
Table 10.
VN100_SPI_WriteRegister
Function Name
VN100_SPI_WriteRegister
Function prototype
VN100_SPI_Packet* VN100_SPI_WriteRegister(
unsigned char sensorID,
unsigned char regID,
unsigned char regWidth,
unsigned long* ptrWriteValues);
Behavior description
Read the register with the ID regID on a VN-100 sensor using the SPI
interface.
Input parameter 1
sensorID: The sensor to write the requested data to
Input parameter 2
regID: The register ID number
Input parameter 3
regWidth: The width of the register in 32-bit words
Output parameter
ptrWriteValues: The data to write to the requested register.
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN_SPI_SetSS()
VN_SPI_SendReceive()
VN_Delay()
Example:
/* Write to baud rate register */
VN100_SPI_Packet
*packet;
unsigned long newBaud = 115200;
packet = VN100_SPI_WriteRegister(0, VN100_REG_SBAUD, 1, &newBaud);
Embedded Firmware Library
29/121
Embedded Firmware Library
UM003
VN100_SPI_GetModel
Table 11 describes the VN100_SPI_GetModel function.
Table 11.
VN100_SPI_GetModel
Function Name
VN100_SPI_GetModel
Function prototype
VN100_SPI_GetModel(
unsigned char sensorID,
char* model);
Behavior description
Read the model number from the sensor.
Input parameter
sensorID: The sensor to get the model number from
Output parameter
model: Pointer to a character array where the requested model number is
placed. This needs to be a character array that is 12 characters in size.
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the sensor model */
VN100_SPI_Packet
*packet;
char model[12];
packet = VN100_SPI_GetModel(0, model);
Embedded Firmware Library
30/121
Embedded Firmware Library
UM003
VN100_SPI_GetHWRev
Table 12 describes the VN100_SPI_GetHWRev function.
Table 12.
VN100_SPI_GetHWRev
Function Name
VN100_SPI_GetHWRev
Function prototype
VN100_SPI_GetHWRev(
unsigned char sensorID,
unsigned long* revision);
Behavior description
Get the hardware revision for the sensor
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
revision: The hardware revision requested
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the hardware revision */
VN100_SPI_Packet
*packet;
unsigned long revision;
packet = VN100_SPI_GetHWRev(0, &revision);
Embedded Firmware Library
31/121
Embedded Firmware Library
UM003
VN100_SPI_GetSerial
Table 13 describes the VN100_SPI_GetSerial function.
Table 13.
VN100_SPI_GetSerial
Function Name
VN100_SPI_GetSerial
Function prototype
VN100_SPI_GetSerial(
unsigned char sensorID,
unsigned long* serialNumber);
Behavior description
Get the serial number from the requested sensor
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
serialNumber: The serial number returned by the sensor
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the serial number */
VN100_SPI_Packet
*packet;
unsigned long SN[3];
packet = VN100_SPI_GetSerial(0, SN);
Embedded Firmware Library
32/121
Embedded Firmware Library
UM003
VN100_SPI_GetFWVer
Table 14 describes the VN100_SPI_GetFWVer function.
Table 14.
VN100_SPI_GetFWVer
Function Name
VN100_SPI_GetFWVer
Function prototype
VN100_SPI_GetFWVer (
unsigned char sensorID,
unsigned long* firmwareVersion);
Behavior description
Get the firmware version from the requested sensor
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
firmwareVersion: The firmware version returned
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the firmware version */
VN100_SPI_Packet
*packet;
unsigned long version;
packet = VN100_SPI_ GetFWVer(0, &version);
Embedded Firmware Library
33/121
Embedded Firmware Library
UM003
VN100_SPI_GetBaudRate
Table 15 describes the VN100_SPI_GetBaudRate function.
Table 15.
VN100_SPI_GetBaudRate
Function Name
VN100_SPI_GetBaudRate
Function prototype
VN100_SPI_GetBaudRate (
unsigned char sensorID,
VN100_BaudType* baudRate);
Behavior description
Get the serial baud rate from the requested sensor
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
baudRate: The baud rate returned by the sensor
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the baud rate */
VN100_SPI_Packet
*packet;
VN100_BaudType baud;
packet = VN100_SPI_ GetBaudRate(0, &baud);
Embedded Firmware Library
34/121
Embedded Firmware Library
UM003
VN100_SPI_SetBaudRate
Table 16 describes the VN100_SPI_SetBaudRate function.
Table 16.
VN100_SPI_SetBaudRate
Function Name
VN100_SPI_SetBaudRate
Function prototype
VN100_SPI_SetBaudRate(
unsigned char sensorID,
VN100_BaudType baudRate);
Behavior description
Set the serial baud rate for the requested sensor
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
baudRate : The baud rate to set on the sensor
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_WriteRegister ()
Example:
/* Set the serial baud rate to 115200 */
VN100_SPI_Packet
*packet;
packet = VN100_SPI_SetBaudRate(0, VN100_Baud_115200);
Embedded Firmware Library
35/121
Embedded Firmware Library
UM003
VN100_SPI_GetADOR
Table 17 describes the VN100_SPI_GetADOR function.
Table 17.
VN100_SPI_GetADOR
Function Name
VN100_SPI_GetADOR
Function prototype
VN100_SPI_GetADOR (
unsigned char sensorID,
VN100_ADORType* ADOR);
Behavior description
Get the ADOR register value from the requested sensor
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
ADOR : The value returned for the ADOR register
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the ADOR */
VN100_SPI_Packet
*packet;
VN100_ADORType
ador;
packet = VN100_SPI_GetADOR(0, &ador);
Embedded Firmware Library
36/121
Embedded Firmware Library
UM003
VN100_SPI_SetADOR
Table 18 describes the VN100_SPI_SetADOR function.
Table 18.
VN100_SPI_SetADOR
Function Name
VN100_SPI_SetADOR
Function prototype
VN100_SPI_SetADOR (
unsigned char sensorID,
VN100_ADORType ADOR);
Behavior description
Set the ADOR register value from the requested sensor
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
ADOR : The value to set the ADOR register to
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_WriteRegister ()
Example:
/* Set the ADOR to output angular rates*/
VN100_SPI_Packet
*packet;
packet = VN100_SPI_SetADOR(0, VN100_ADOR_GYR);
Embedded Firmware Library
37/121
Embedded Firmware Library
UM003
VN100_SPI_GetADOF
Table 19 describes the VN100_SPI_GetADOF function.
Table 19.
VN100_SPI_GetADOF
Function Name
VN100_SPI_GetADOF
Function prototype
VN100_SPI_GetADOF (
unsigned char sensorID,
VN100_ADOFType* ADOF);
Behavior description
Get the async data output frequency
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
ADOR : The frequency returned for the ADOF register
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the ADOF */
VN100_SPI_Packet
*packet;
VN100_ADOFType
adof;
packet = VN100_SPI_GetADOF(0, &adof);
Embedded Firmware Library
38/121
Embedded Firmware Library
UM003
VN100_SPI_SetADOF
Table 20 describes the VN100_SPI_SetADOF function.
Table 20.
VN100_SPI_SetADOF
Function Name
VN100_SPI_SetADOF
Function prototype
VN100_SPI_SetADOF (
unsigned char sensorID,
VN100_ADOFType ADOF);
Behavior description
Set the async data output frequency
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
ADOR : The desired frequency of the async data output
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_WriteRegister ()
Example:
/* Set the ADOF to 200 Hz */
VN100_SPI_Packet
*packet;
packet = VN100_SPI_SetADOF(0, VN100_ADOF_200HZ);
Embedded Firmware Library
39/121
Embedded Firmware Library
UM003
VN100_SPI_GetYPR
Table 21 Table 13describes the VN100_SPI_GetYPR function.
Table 21.
VN100_SPI_GetYPR
Function Name
VN100_SPI_GetYPR
Function prototype
VN100_SPI_GetYPR(
unsigned char sensorID,
float* yaw,
float* pitch,
float* roll);
Behavior description
Get the measured yaw, pitch, roll orientation angles
Input parameter
sensorID: The sensor to get the requested data from
Output parameter 1
yaw : The yaw angle measured in degrees
Output parameter 2
pitch : The pitch angle measured in degrees
Output parameter 3
roll : The roll angle measured in degrees
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the yaw, pitch, and roll*/
VN100_SPI_Packet
*packet;
float yaw, pitch, roll;
packet = VN100_SPI_GetYPR(0, &yaw, &pitch, &roll);
Embedded Firmware Library
40/121
Embedded Firmware Library
UM003
VN100_SPI_GetQuat
Table 22 describes the VN100_SPI_GetQuat function.
Table 22.
VN100_SPI_GetQuat
Function Name
VN100_SPI_GetQuat
Function prototype
VN100_SPI_GetQuat
Behavior description
Get the measured attitude quaternion. The quaternion is a 4x1 vector unit
vector with the fourth term q[3] as the scalar term.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
q : The address of the location to write the returned measured quaternion
(4x1).
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the quaternion */
VN100_SPI_Packet
*packet;
float quat[4];
packet = VN100_SPI_GetQuat(0, quat);
Embedded Firmware Library
41/121
Embedded Firmware Library
UM003
VN100_SPI_GetQuatMag
Table 23 describes the VN100_SPI_GetQuatMag function.
Table 23.
VN100_SPI_GetQuatMag
Function Name
VN100_SPI_GetQuatMag
Function prototype
VN100_SPI_GetQuatMag(
unsigned char sensorID,
float* q,
float* mag);
Behavior description
Get the measured attitude quaternion and magnetic vector. The
quaternion is a 4x1 unit vector with the fourth term q[3] as the scalar term.
The magnetic is a 3x1 vector. The measured magnetic vector does not
have any usable units. The magnetic vector is calibrated at the factory to
have a magnitude of one on the XY plane.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter 1
q : The address of the location to write the returned measured quaternion
(4x1).
Output parameter 2
mag : The magnetic measured vector (3x1)
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the quaternion and magnetic */
VN100_SPI_Packet
*packet;
float quat[4];
float mag[3];
packet = VN100_SPI_GetQuatMag(0, quat, mag);
Embedded Firmware Library
42/121
Embedded Firmware Library
UM003
VN100_SPI_GetQuatAcc
Table 24 describes the VN100_SPI_GetQuatAcc function.
Table 24.
VN100_SPI_GetQuatAcc
Function Name
VN100_SPI_GetQuatAcc
Function prototype
VN100_SPI_GetQuatAcc (
unsigned char sensorID,
float* q,
float* acc);
Behavior description
The quaternion is a 4x1 unit vector with the fourth term q[3] as the scalar
term.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter 1
q : Measured quaternion (4x1)
Output parameter 2
acc : Measured acceleration (3x1) in m/s^2
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the quaternion and acceleration */
VN100_SPI_Packet
*packet;
float quat[4];
float acc[3];
packet = VN100_SPI_GetQuatAcc(0, quat, acc);
Embedded Firmware Library
43/121
Embedded Firmware Library
UM003
VN100_SPI_GetQuatRates
Table 25 describes the VN100_SPI_GetQuatRates function.
Table 25.
Function Name
VN100_SPI_GetQuatRates
VN100_SPI_GetQuatRates(
unsigned char sensorID,
float* q,
float* rates);
Function prototype
VN100_SPI_GetQuatRates
Behavior description
Get the measured attitude quaternion and angular rates
Input parameter
sensorID: The sensor to get the requested data from
Output parameter 1
q : Measured quaternion (4x1)
Output parameter 2
rates : Measured angular rates (3x1) in rad/s
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the quaternion and angular rates*/
VN100_SPI_Packet
*packet;
float quat[4];
float rates[3];
packet = VN100_SPI_GetQuatRates(0, quat, rates);
Embedded Firmware Library
44/121
Embedded Firmware Library
UM003
VN100_SPI_GetQuatMagAcc
Table 26 describes the VN100_SPI_GetQuatMagAcc function.
Table 26.
VN100_SPI_GetQuatMagAcc
Function Name
VN100_SPI_GetQuatMagAcc
Function prototype
VN100_SPI_GetQuatMagAcc(
unsigned char sensorID,
float* q,
float* mag,
float* acc);
Behavior description
Get the measured attitude quaternion, magnetic and acceleration
Input parameter
sensorID: The sensor to get the requested data from
Output parameter 1
q : Measured quaternion (4x1)
Output parameter 2
mag : The magnetic measured vector (3x1)
Output parameter 3
acc : Measured acceleration (3x1) in m/s^2
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the quaternion, magnetic, and acceleration */
VN100_SPI_Packet
*packet;
float quat[4];
float mag[3];
float acc[3];
packet = VN100_SPI_GetQuatMagAcc(0, quat, mag, acc);
Embedded Firmware Library
45/121
Embedded Firmware Library
UM003
VN100_SPI_GetQuatAccRates
Table 27 describes the VN100_SPI_GetQuatAccRates function.
Table 27.
VN100_SPI_GetQuatAccRates
Function Name
VN100_SPI_GetQuatAccRates
Function prototype
VN100_SPI_GetQuatAccRates(
unsigned char sensorID,
float* q,
float* acc,
float* rates);
Behavior description
Get the measured attitude quaternion, acceleration, and angular rates
Input parameter
sensorID: The sensor to get the requested data from
Output parameter 1
q : Measured quaternion (4x1)
Output parameter 2
acc : Measured acceleration (3x1) in m/s^2
Output parameter 3
rates : Measured angular rates (3x1) in rad/s
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the quaternion, acceleration, and angular rates */
VN100_SPI_Packet
*packet;
float quat[4];
float acc[3];
float rates[3];
packet
=
VN100_SPI_GetQuatAccRates(0, quat, acc, rates);
Embedded Firmware Library
46/121
Embedded Firmware Library
UM003
VN100_SPI_GetQuatMagAccRates
Table 28 describes the VN100_SPI_GetQuatMagAccRates function.
Table 28.
VN100_SPI_GetQuatMagAccRates
Function Name
VN100_SPI_GetQuatMagAccRates
Function prototype
VN100_SPI_GetQuatMagAccRates(
unsigned char sensorID,
float* q,
float* mag,
float* acc,
float* rates);
Behavior description
Get the measured attitude quaternion, magnetic, acceleration, and angular
rates
Input parameter
sensorID: The sensor to get the requested data from
Output parameter 1
q : Measured quaternion (4x1)
Output parameter 2
mag : The magnetic measured vector (3x1)
Output parameter 3
acc : Measured acceleration (3x1) in m/s^2
Output parameter 4
rates : Measured angular rates (3x1) in rad/s
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the quaternion, magnetic, acceleration, and angular rates */
VN100_SPI_Packet
*packet;
float quat[4];
float mag[3];
float acc[3];
float rates[3];
packet
=
VN100_SPI_GetQuatMagAccRates(0, quat, mag, acc, rates);
Embedded Firmware Library
47/121
Embedded Firmware Library
UM003
VN100_SPI_GetYPRMagAccRates
Table 29 describes the VN100_SPI_GetYPRMagAccRates function.
Table 29.
VN100_SPI_GetYPRMagAccRates
Function Name
VN100_SPI_GetYPRMagAccRates
Function prototype
VN100_SPI_GetYPRMagAccRates(
unsigned char sensorID,
float* YPR,
float* mag,
float* acc,
float* rates);
Behavior description
Get the yaw, pitch, roll, magnetic, acceleration, and angular rates
Input parameter
sensorID: The sensor to get the requested data from
Output parameter 1
YPR : Euler angles (Yaw, Pitch, Roll) in deg
Output parameter 2
mag : The magnetic measured vector (3x1)
Output parameter 3
acc : Measured acceleration (3x1) in m/s^2
Output parameter 4
rates : Measured angular rates (3x1) in rad/s
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the yaw, pitch, roll, magnetic, acceleration, and angular rates*/
VN100_SPI_Packet
*packet;
float ypr[3];
float mag[3];
float acc[3];
float rates[3];
packet = VN100_SPI_GetYPRMagAccRates(0, ypr, mag, acc, rates);
Embedded Firmware Library
48/121
Embedded Firmware Library
UM003
VN100_SPI_GetDCM
Table 30 describes the VN100_SPI_GetDCM function.
Table 30.
VN100_SPI_GetDCM
Function Name
VN100_SPI_GetDCM
Function prototype
VN100_SPI_GetDCM(
unsigned char sensorID,
float* DCM);
Behavior description
Get the measured attitude as a directional cosine matrix
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
DCM : Directional Cosine Matrix (9x1). The order of the terms in the matrix
is {first row, second row, third row}
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the directional cosine matrix */
VN100_SPI_Packet *packet;
float dcm_data[9] = {0};
float *dcm_ptr = {&dcm_data[0], &dcm_data[3], &dcm_data[6]};
float **dcm = dcm_ptr;
packet = VN100_SPI_GetDCM(0, dcm);
Embedded Firmware Library
49/121
Embedded Firmware Library
UM003
VN100_SPI_GetMag
Table 31 describes the VN100_SPI_GetMag function.
Table 31.
VN100_SPI_GetMag
Function Name
VN100_SPI_GetMag
Function prototype
VN100_SPI_GetMag(
unsigned char sensorID,
float* mag);
Behavior description
Get the measured magnetic field. The measured magnetic field does not
have any usable units. The magnetic vector is calibrated at the factory to
have a magnitude of one on the XY plane.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
mag : The magnetic measured vector (3x1)
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the magnetic measurements */
VN100_SPI_Packet *packet;
float mag[3];
packet = VN100_SPI_GetMag(0, mag);
Embedded Firmware Library
50/121
Embedded Firmware Library
UM003
VN100_SPI_GetAcc
Table 32 describes the VN100_SPI_GetAcc function.
Table 32.
VN100_SPI_GetAcc
Function Name
VN100_SPI_GetAcc
Function prototype
VN100_SPI_GetAcc(
unsigned char sensorID,
float* Acc);
Behavior description
Get the measured acceleration. The measured acceleration has the units
of m/s^2 and its range is dependent upon the gain set by the
VN100_SPI_SetAccGain() function.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
Acc : The measured acceleration (3x1) in m/s^2
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the acceleration measurements */
VN100_SPI_Packet *packet;
float acc[3];
packet = VN100_SPI_GetAcc(0, acc);
Embedded Firmware Library
51/121
Embedded Firmware Library
UM003
VN100_SPI_GetRates
Table 33 describes the VN100_SPI_GetRates function.
Table 33.
VN100_SPI_GetRates
Function Name
VN100_SPI_GetRates
Function prototype
VN100_SPI_GetRates
Behavior description
Get the measured angular rates. The measured angular rates have the
units of rad/s. This is the filtered angular rate and is compensated by the
onboard Kalman filter to account for gyro bias drift.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
rates : The measured angular rates (3x1) in rad/s
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the angular rate measurements */
VN100_SPI_Packet *packet;
float rates[3];
packet = VN100_SPI_GetRates(0, rates);
Embedded Firmware Library
52/121
Embedded Firmware Library
UM003
VN100_SPI_GetMagAccRates
Table 34 describes the VN100_SPI_GetMagAccRates function.
Table 34.
VN100_SPI_GetMagAccRates
Function Name
VN100_SPI_GetMagAccRates
Function prototype
VN100_SPI_GetMagAccRates(
unsigned char sensorID,
float* mag,
float* acc,
float* rates);
Behavior description
Get the measured magnetic, acceleration, and angular rates.
measurements are taken in the body reference frame.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter 1
mag : Measured magnetic field (3x1) [Non-dimensional]
Output parameter 2
Acc : Measured acceleration (3x1) [m/s^2]
Output parameter 3
rates : Measured angular rates (3x1) [rad/s]
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
The
Example:
/* Get the magnetic, acceleration, and angular rate measurements */
VN100_SPI_Packet *packet;
float mag[3];
float acc[3];
float rates[3];
packet = VN100_SPI_GetMagAccRates(0, mag, acc, rates);
Embedded Firmware Library
53/121
Embedded Firmware Library
UM003
VN100_SPI_GetMagAccRef
Table 35 describes the VN100_SPI_GetMagAccRef function.
Table 35.
VN100_SPI_GetMagAccRef
Function Name
VN100_SPI_GetMagAccRef
Function prototype
VN100_SPI_GetMagAccRef(
unsigned char sensorID,
float* refMag,
float* refAcc);
Behavior description
Get the magnetic and acceleration reference vectors. The reference
vectors are the vectors measured by the magnetometer and
accelerometer respectively in the inertial reference frame. The inertial
reference frame is NED (North, East, Down).
Input parameter
sensorID: The sensor to get the requested data from
Output parameter 1
refMag : The reference vector for the magnetic field
Output parameter 2
refAcc : The reference vector for the Accerometer (gravity)
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the magnetic and acceleration reference vectors */
VN100_SPI_Packet *packet;
float magRef[3];
float accRef[3];
packet = VN100_SPI_GetMagAccRef(0, magRef, accRef);
Embedded Firmware Library
54/121
Embedded Firmware Library
UM003
VN100_SPI_SetMagAccRef
Table 36 describes the VN100_SPI_SetMagAccRef function.
Table 36.
VN100_SPI_SetMagAccRef
Function Name
VN100_SPI_SetMagAccRef
Function prototype
VN100_SPI_SetMagAccRef(
unsigned char sensorID,
float* refMag,
float* refAcc)
Behavior description
Set the magnetic and acceleration reference vectors. The reference
vectors are the vectors measured by the magnetometer and
accelerometer respectively in the inertial reference frame. The inertial
reference frame is NED (North, East, Down).
Input parameter
sensorID: The sensor to get the requested data from
Output parameter 1
refMag : The reference vector for the magnetic field
Output parameter 2
refAcc : The reference vector for the Accelerometer (gravity)
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_WriteRegister ()
Example:
/* Set the magnetic and acceleration reference vectors */
VN100_SPI_Packet *packet;
float magRef[3] = {1.0, 0.0, 1.73};
float accRef[3] = {0.0, 0.0, 1.0};
packet = VN100_SPI_GetMagAccRef(0, magRef, accRef);
Embedded Firmware Library
55/121
Embedded Firmware Library
UM003
VN100_SPI_GetFiltMeasVar
Table 37 describes the VN100_SPI_GetFiltMeasVar function.
Table 37.
VN100_SPI_GetFiltMeasVar
Function Name
VN100_SPI_GetFiltMeasVar
Function prototype
VN100_SPI_GetFiltMeasVar(
unsigned char sensorID,
float* measVar);
Behavior description
Get the Kalman filter measurement variance parameters. This is discussed
in the User Manual in Section 6.22. The measurement variance
parameters controls how much weight the Kalman filter will place on each
measurement. See application note A001 for more details on how to set
these values for your specific application.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
measVar : The variance on the measured inputs to the filter. This is a
(10x1) vector.
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the filter measurement variance parameters */
VN100_SPI_Packet *packet;
float measVar[10];
packet = VN100_SPI_GetFiltMeasVar(0, measVar);
Embedded Firmware Library
56/121
Embedded Firmware Library
UM003
VN100_SPI_SetFiltMeasVar
Table 38 describes the VN100_SPI_SetFiltMeasVar function.
Table 38.
VN100_SPI_SetFiltMeasVar
Function Name
VN100_SPI_SetFiltMeasVar
Function prototype
VN100_SPI_SetFiltMeasVar(
unsigned char sensorID,
float* measVar);
Behavior description
Set the Kalman filter measurement variance parameters. This is discussed
in the User Manual in Section 6.22. The measurement variance
parameters controls how much weight the Kalman filter will place on each
measurement. See application note A001 for more details on how to set
these values for your specific application.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
measVar : The variance on the measured inputs to the filter. This is a
(10x1) vector
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_WriteRegister ()
Example:
/* Set the filter measurement variance parameters */
VN100_SPI_Packet *packet;
float measVar[10] = {1e-9,1e-9,1e-9,1e-9,1e-6,1e-6,1e-6,1e-6,1e-6,1e-6};
packet = VN100_SPI_SetFiltMeasVar(0, measVar);
Embedded Firmware Library
57/121
Embedded Firmware Library
UM003
VN100_SPI_GetHardSoftIronComp
Table 39 describes the VN100_SPI_GetHardSoftIronComp function.
Table 39.
VN100_SPI_GetHardSoftIronComp
Function Name
VN100_SPI_GetHardSoftIronComp
Function prototype
VN100_SPI_GetHardSoftIronComp(
unsigned char sensorID,
float* HSI);
Behavior description
Get the magnetic hard/soft iron compensation parameters. These values
allow the magnetometer to compensate for distortions in the local
magnetic field due to ferromagnetic materials in the vicinity of the sensor.
More information on the parameters can be found in the User Manual in
Section 6.23.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
HSI : magnetic hard/soft iron paramteters (12x1)
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the magnetic hard/soft iron compensation parameters */
VN100_SPI_Packet *packet;
float HSI[12];
packet = VN100_SPI_GetHardSoftIronComp(0, HSI);
Embedded Firmware Library
58/121
Embedded Firmware Library
UM003
VN100_SPI_SetHardSoftIronComp
Table 40 describes the VN100_SPI_SetHardSoftIronComp function.
Table 40.
VN100_SPI_SetHardSoftIronComp
Function Name
VN100_SPI_SetHardSoftIronComp
Function prototype
VN100_SPI_SetHardSoftIronComp(
unsigned char sensorID,
float* HSI);
Behavior description
Set the magnetic hard/soft iron compensation parameters. These values
allow the magnetometer to compensate for distortions in the local
magnetic field due to ferromagnetic materials in the vicinity of the sensor.
More information on the parameters can be found in the User Manual in
Section 6.23.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
HSI : magnetic hard/soft iron parameters (12x1)
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_WriteRegister ()
Example:
/* Set the magnetic hard/soft iron compensation parameters */
VN100_SPI_Packet *packet;
float HSI[12] = {1,0,0,0,1,0,0,0,1,0,0,0};
packet = VN100_SPI_SetHardSoftIronComp(0, HSI);
Embedded Firmware Library
59/121
Embedded Firmware Library
UM003
VN100_SPI_GetFiltActTuning
Table 41 describes the VN100_SPI_GetFiltActTuning function.
Table 41.
VN100_SPI_GetFiltActTuning
Function Name
VN100_SPI_GetFiltActTuning
Function prototype
VN100_SPI_GetFiltActTuning(
unsigned char sensorID,
float gainM,
float gainA,
float memM,
float memA);
Behavior description
Get the filter active tuning parameters. The active tuning parameters
control how the filter handles dynamic disturbances in both magnetic and
acceleration. These values are not needed for normal operation. More on
these parameters can be found in the User Manual in Section 6.24.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter 1
gainM : Magnetic Disturbance Gain
Output parameter 2
gainA : Acceleration Disturbance Gain
Output parameter 3
memM : Magnetic Disturbance Memory
Output parameter 4
memA : Acceleration Disturbance Gain
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the filter active tuning parameters */
VN100_SPI_Packet *packet;
float atp1, atp2, atp3, atp4;
packet = VN100_SPI_GetFiltActTuning(0, &atp1, &atp2, &atp3, &atp4);
Embedded Firmware Library
60/121
Embedded Firmware Library
UM003
VN100_SPI_SetFiltActTuning
Table 42 describes the VN100_SPI_SetFiltActTuning function.
Table 42.
VN100_SPI_SetFiltActTuning
Function Name
VN100_SPI_SetFiltActTuning
Function prototype
VN100_SPI_SetFiltActTuning(
unsigned char sensorID,
float gainM,
float gainA,
float memM,
float memA);
Behavior description
Set the filter active tuning parameters. The active tuning parameters
control how the filter handles dynamic disturbances in both magnetic and
acceleration. These values are not needed for normal operation. More on
these parameters can be found in the User Manual in Section 6.24.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
gainM : Magnetic Disturbance Gain
gainA : Acceleration Disturbance Gain
memM : Magnetic Disturbance Memory
memA : Acceleration Disturbance Gain
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_WriteRegister ()
Example:
/* Set the filter active tuning parameters */
VN100_SPI_Packet *packet;
float atp[4] = {1.0, 1.0, 0.99, 0.99};
packet = VN100_SPI_SetFiltActTuning(0, &atp[0], &atp[1], &atp[2], &atp[3]);
Embedded Firmware Library
61/121
Embedded Firmware Library
UM003
VN100_SPI_GetAccComp
Table 43 describes the VN100_SPI_GetAccComp function.
Table 43.
VN100_SPI_GetAccComp
Function Name
VN100_SPI_GetAccComp
Function prototype
VN100_SPI_GetAccComp(
unsigned char sensorID,
float* AccComp);
Behavior description
Get the accelerometer compensation parameters. The purpose of these
parameters is explained in Section 6.25 of the User Manual. These
parameters are not required for normal operation.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
AccComp : Acceleration compensation register values
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the accelerometer compensation parameters */
VN100_SPI_Packet *packet;
float act[12];
packet = VN100_SPI_GetAccComp(0, act);
Embedded Firmware Library
62/121
Embedded Firmware Library
UM003
VN100_SPI_SetAccComp
Table 44 describes the VN100_SPI_SetAccComp function.
Table 44.
VN100_SPI_SetAccComp
Function Name
VN100_SPI_SetAccComp
Function prototype
VN100_SPI_SetAccComp(
unsigned char sensorID,
float* AccComp);
Behavior description
Set the accelerometer compensation parameters. The purpose of these
parameters is explained in Section 6.25 of the User Manual. These
parameters are not required for normal operation.
Input parameter
sensorID: The sensor to get the requested data from
Input parameter
AccComp : Acceleration compensation register values
Output parameter
None
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_WriteRegister ()
Example:
/* Set the accelerometer compensation parameters */
VN100_SPI_Packet *packet;
float act[12] = {1,0,0,0,1,0,0,0,1,0,0,0};
packet = VN100_SPI_SetAccComp(0, act);
Embedded Firmware Library
63/121
Embedded Firmware Library
UM003
VN100_SPI_GetRefFrameRot
Table 45 describes the VN100_SPI_GetRefFrameRot function.
Table 45.
VN100_SPI_GetRefFrameRot
Function Name
VN100_SPI_GetRefFrameRot
Function prototype
VN100_SPI_GetRefFrameRot(
unsigned char sensorID,
float* refFrameRot);
Behavior description
Get the reference frame rotation matrix. This matrix allows the user to
transform all measured vectors from the body reference frame of the VN100, to any other rigidly attached coordinate frame. The effect of this
transformation is that the computed attitude solution and measured
measurement vectors will now be measured in the chosen coordinate
system of the user and not the VN-100 coordinate system. This is further
explained in Section 6.26 of the User Manual.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
refFrameRot : Reference frame rotation matrix (9x1)
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the reference frame rotation parameters */
VN100_SPI_Packet *packet;
float rfr[9];
packet = VN100_SPI_GetRefFrameRot(0, rfr);
Embedded Firmware Library
64/121
Embedded Firmware Library
UM003
VN100_SPI_SetRefFrameRot
Table 46 describes the VN100_SPI_SetRefFrameRot function.
Table 46.
VN100_SPI_SetRefFrameRot
Function Name
VN100_SPI_SetRefFrameRot
Function prototype
VN100_SPI_SetRefFrameRot(
unsigned char sensorID,
float* refFrameRot);
Behavior description
Set the reference frame rotation matrix. This matrix allows the user to
transform all measured vectors from the body reference frame of the VN100, to any other rigidly attached coordinate frame. The effect of this
transformation is that the computed attitude solution and measured
measurement vectors will now be measured in the chosen coordinate
system of the user and not the VN-100 coordinate system. This is further
explained in Section 6.26 of the User Manual.
Input parameter 1
sensorID: The sensor to get the requested data from
Input parameter 2
refFrameRot : Reference frame rotation matrix (9x1)
Output parameter
None
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_WriteRegister ()
Example:
/* Set the reference frame rotation parameters */
VN100_SPI_Packet *packet;
float rfr[9] = {1,0,0,0,1,0,0,0,1};
packet = VN100_SPI_SetRefFrameRot(0, rfr);
Embedded Firmware Library
65/121
Embedded Firmware Library
UM003
VN100_SPI_GetAccGain
Table 47 describes the VN100_SPI_GetAccGain function.
Table 47.
VN100_SPI_GetAccGain
Function Name
VN100_SPI_GetAccGain
Function prototype
VN100_SPI_GetAccGain(
unsigned char sensorID,
VN100_AccGainType gain);
Behavior description
Get the current accelerometer gain setting. The accelerometer on the VN100 can be set to either a +/- 2g or +/- 6g gain setting.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
gain : The current accelerometer gain setting
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the accelerometer gain */
VN100_SPI_Packet *packet;
VN100_AccGainType gain;
packet = VN100_SPI_GetAccGain(0, &gain);
Embedded Firmware Library
66/121
Embedded Firmware Library
UM003
VN100_SPI_SetAccGain
Table 48 describes the VN100_SPI_SetAccGain function.
Table 48.
VN100_SPI_SetAccGain
Function Name
VN100_SPI_SetAccGain
Function prototype
VN100_SPI_SetAccGain(
unsigned char sensorID,
VN100_AccGainType gain);
Behavior description
Set the current accelerometer gain setting. The accelerometer on the VN100 can be set to either a +/- 2g or +/- 6g gain setting.
Input parameter 1
sensorID: The sensor to get the requested data from
Input parameter 2
gain : The current accelerometer gain setting
Output parameter
None
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_WriteRegister ()
Example:
/* Set the accelerometer gain */
VN100_SPI_Packet *packet;
packet = VN100_SPI_SetAccGain(0, VN100_AccGain_6G);
Embedded Firmware Library
67/121
Embedded Firmware Library
UM003
VN100_SPI_RestoreFactorySettings
Table 49 describes the VN100_SPI_RestoreFactorySettings function.
Table 49.
VN100_SPI_RestoreFactorySettings
Function Name
VN100_SPI_RestoreFactorySettings
Function prototype
VN100_SPI_RestoreFactorySettings(
unsigned char sensorID);
Behavior description
Restore the selected sensor to factory default state. The values for factory
default state for each register can be found in Section 7 of the User
Manual.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
None
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Restore sensor to factory default settings */
VN100_SPI_Packet *packet;
packet = VN100_SPI_RestoreFactorySettings(0);
Embedded Firmware Library
68/121
Embedded Firmware Library
UM003
VN100_SPI_Tare
Table 50 describes the VN100_SPI_Tare function.
Table 50.
VN100_SPI_Tare
Function Name
VN100_SPI_Tare
Function prototype
VN100_SPI_Tare(unsigned char sensorID);
Behavior description
Send a tare command to the selected VN-100. The tare command will zero
out the current sensor orientation. The attitude of the sensor will be
measured form this point onwards with respect to the attitude present
when the tare command was issued. It is important with v4 of the
firmware to keep the device still for at least 3 seconds after performing a
tare command. The tare command will also set the reference vectors in
the inertial frame to the vectors currently measured in the body frame.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
None
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Zero out current attitude */
VN100_SPI_Packet *packet;
packet = VN100_SPI_Tare(0);
Embedded Firmware Library
69/121
Embedded Firmware Library
UM003
VN100_SPI_Reset
Table 51 describes the VN100_SPI_Reset function.
Table 51.
Function Name
VN100_SPI_Reset
Function prototype
VN100_SPI_Reset(
VN100_SPI_Reset
unsigned char sensorID);
Behavior description
Command the given sensor to perform a device hardware reset. This is
equivalent to pulling the NRST pin low on the VN-100. Any changes to any
of the registers on the VN-100 that were made since last issuing a Write
Settings commands will be lost.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
None
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Reset the sensor */
VN100_SPI_Packet *packet;
packet = VN100_SPI_Reset(0);
Embedded Firmware Library
70/121
Embedded Firmware Library
UM003
VN100_SPI_GetAccInertial
Table 52 describes the VN100_SPI_GetAccInertial function.
Table 52.
VN100_SPI_GetAccInertial
Function Name
VN100_SPI_GetAccInertial
Function prototype
VN100_SPI_GetAccInertial(
unsigned char sensorID,
float *AccI);
Behavior description
Request the inertial acceleration from the VN-100. This function will
internally request both the measured acceleration and attitude from the
sensor, then compute the inertial acceleration. If you want to integrate
your acceleration to find velocity or position, then this is the acceleration
that you want to measure. It is measured in a fixed NED (North, East,
Down) coordinate frame.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
AccI : The inertial acceleration measured by the device.
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the inertial acceleration measurement */
VN100_SPI_Packet *packet;
float accI[3];
packet = VN100_SPI_AccInertial(0, accI);
Embedded Firmware Library
71/121
Embedded Firmware Library
UM003
VN100_SPI_GetMagInertial
Table 53 describes the VN100_SPI_GetMagInertial function.
Table 53.
VN100_SPI_GetMagInertial
Function Name
VN100_SPI_GetMagInertial
Function prototype
VN100_SPI_GetMagInertial(
unsigned char sensorID,
float *MagI);
Behavior description
Request the inertial magnetic measurement from the VN-100. This
function will internally request both the measured magnetic and attitude
from the sensor, then compute the inertial magnetic measurement. It is
measured in a fixed NED (North, East, Down) coordinate frame.
Input parameter
sensorID: The sensor to get the requested data from
Output parameter
MagI : The inertial magnetic measurement measured by the device.
Return value
Pointer to SPI packet returned by the sensor
Required preconditions
None
Called functions
VN100_SPI_ReadRegister()
Example:
/* Get the inertial magnetic measurement */
VN100_SPI_Packet *packet;
float magI[3];
packet = VN100_SPI_MagInertial(0, magI);
Embedded Firmware Library
72/121
Embedded Firmware Library
7
UM003
Math Library
The data structures used in the math library are described in Section 7.1, while Section 7.2 describes the
firmware library functions.
Data Structures
Math library functions
Table 54 lists the various functions of the math firmware library.
Table 54.
Math library functions
Function Name
Description
VN_DotP
Compute the dot product of vector A with vector B.
VN_CrossP
Compute the cross product of vector A with vector B.
VN_VecAdd
Compute the addition of vector A with vector B.
VN_VecSub
Compute the subtraction of vector A with vector B.
VN_VecMultT
Compute the multiplication of a vector with the transpose of
another vector.
VN_Diagonal
Create a zero matrix with the diagonal elements equal to the
magnitude of a scalar.
VN_MatAdd
Compute the addition of matrix A and B.
VN_MatSub
Compute the subtraction of matrix A and B.
VN_MatMult
Compute the multiplication of matrix A and B.
VN_MatMultMMT
Compute the multiplication of matrix A with the transpose of
matrix B.
VN_MatMultMTM
Compute the multiplication of the transpose of matrix A with
matrix B.
VN_MatScalarMult
Compute the multiplication of a scalar times a matrix.
VN_MatVecMult
Compute the multiplication of matrix A with vector B.
VN_MatTVecMult
Multiply the transpose of the matrix A by the vector B.
VN_MatCopy
Copy the values from one matrix to another.
VN_MatInv
Compute the matrix inverse of A.
Embedded Firmware Library
73/121
Embedded Firmware Library
UM003
VN_SkewMatrix
Compute the matrix cross product of vector V. This operation
converts a vector into a matrix that when multiplied by
another vector would give the result of a cross product
operation between the two vectors.
VN_Transpose
Calculate the transpose of matrix A.
VN_Norm
Compute the length of the given vector with size m x 1.
VN_Normalize
Compute the unit normal vector with the direction given by
vector V1.
VN_Quat2DCM
Convert a quaternion into to a directional cosine matrix.
VN_YPR2DCM
Convert the given yaw, pitch, and roll into a directional cosine
matrix.
VN_MatZeros
Sets all elements of matrix A equal to zero.
VN_Quat2Euler121
Convert a quaternion attitude representation to an Euler
angle 1,2,1 set.
VN_Quat2Euler123
Convert a quaternion attitude representation to an Euler
angle 1,2,3 set.
VN_Quat2Euler131
Convert a quaternion attitude representation to an Euler
angle 1,3,1 set.
VN_Quat2Euler132
Convert a quaternion attitude representation to an Euler
angle 1,3,2 set.
VN_Quat2Euler212
Convert a quaternion attitude representation to an Euler
angle 2,1,2 set.
VN_Quat2Euler213
Convert a quaternion attitude representation to an Euler
angle 2,1,3 set.
VN_Quat2Euler231
Convert a quaternion attitude representation to an Euler
angle 2,3,1 set.
VN_Quat2Euler232
Convert a quaternion attitude representation to an Euler
angle 2,3,2 set.
VN_Quat2Euler312
Convert a quaternion attitude representation to an Euler
angle 3,1,2 set.
VN_Quat2Euler313
Convert a quaternion attitude representation to an Euler
angle 3,1,3 set.
VN_Quat2Euler321
Convert a quaternion attitude representation to an Euler
Embedded Firmware Library
74/121
Embedded Firmware Library
UM003
angle 3,2,1 set.
VN_Quat2Euler323
Convert a quaternion attitude representation to an Euler
angle 3,2,3 set.
VN_Quat2Gibbs
Convert a quaternion attitude representation to the Gibbs
angle representation.
VN_Quat2MRP
Convert a quaternion attitude representation to an Modified
Rodrigues Parameters representation.
VN_Quat2PRV
Convert a quaternion attitude representation to the principal
rotation vector.
VN_AddQuat
VN_AddQuat provides the quaternion which corresponds to
performing two successive rotations from q1 and q2.
VN_SubQuat
VN_SubQuat provides the quaternion which corresponds to
the relative rotation from q2 to q1.
VN_QuatKinematicDiffEq
Computes the time rate of change of the quaternion
parameters as a function of the angular rates.
VN_YPRKinematicDiffEq
Computes the time rate of change of the 321 Euler angles
(yaw, pitch, roll) as a function of the angular rates.
VN_Body2Inertial
Converts a vector measured in the body frame into the
inertial reference frame.
VN_Inertial2Body
Convert a vector measured in the inertial frame into the body
reference frame.
Embedded Firmware Library
75/121
Embedded Firmware Library
UM003
VN_DotP
Table 55 describes the VN_DotP function.
Table 55.
VN_DotP
Function Name
VN_DotP
Function prototype
float VN_DotP(float *A, float *B);
Behavior description
Compute the cross product of vector A with vector B.
Matlab equation
C = dot(A, B)
Input parameter 1
A : 3x1 vector
Input parameter 2
B : 3x1 vector
Output parameter
None
Return value
Result of dot product between two vectors.
Required preconditions
None
Called functions
None
Example:
/* Compute the dot product of A and B */
float A[3];
float B[3];
float C;
C = VN_DotP(A, B);
Embedded Firmware Library
76/121
Embedded Firmware Library
UM003
VN_CrossP
Table 56 describes the VN_CrossP function.
Table 56.
VN_CrossP
Function Name
VN_CrossP
Function prototype
void VN_CrossP(float *A, float *B, float *C);
Behavior description
Compute the cross product of vector A with vector B.
Matlab equation
C = cross(A, B)
Input parameter 1
A : 3x1 vector
Input parameter 2
B : 3x1 vector
Input parameter 3
C : 3x1 vector
Output parameter
None
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Compute the cross product of A and B */
float A[3];
float B[3];
float C[3];
VN_CrossP(A, B, C);
Embedded Firmware Library
77/121
Embedded Firmware Library
UM003
VN_VecAdd
Table 57 describes the VN_VecAdd function.
Table 57.
Function Name
VN_VecAdd
Function prototype
void VN_VecAdd(
VN_VecAdd
float *A,
float *B,
unsigned long rows,
float *C);
Behavior description
Compute the addition of vector A with vector B.
Matlab equation
C=A+B
Input parameter 1
A : vector with length given by rows
Input parameter 2
B : vector with length given by rows
Input parameter 3
rows : length of vector A, B, and C
Output parameter
C : result of vector addition
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Add vector A and B */
float A[3];
float B[3];
float C[3];
VN_VecAdd(A, B, 3, C);
Embedded Firmware Library
78/121
Embedded Firmware Library
UM003
VN_VecSub
Table 58 describes the VN_VecSub function.
Table 58.
Function Name
VN_VecSub
Function prototype
void VN_VecSub(
VN_VecSub
float *A,
float *B,
unsigned long rows,
float *C)
Behavior description
Compute the subtraction of vector A with vector B.
Matlab equation
C=A-B
Input parameter 1
A : vector with length given by rows
Input parameter 2
B : vector with length given by rows
Input parameter 3
rows : length of vector A, B, and C
Output parameter
C : result of vector subtraction
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Subtract vector A and B */
float A[3];
float B[3];
float C[3];
VN_VecSub(A, B, 3, C);
Embedded Firmware Library
79/121
Embedded Firmware Library
UM003
VN_VecMultT
Table 59 describes the VN_VecMultT function.
Table 59.
Function Name
VN_VecMultT
Function prototype
void VN_VecMultT(
VN_VecMultT
float *A,
float *BT,
unsigned long rows,
float **C)
Behavior description
Compute the multiplication of a vector with the transpose of another
vector. The result will be a square matrix with the size of nxn where
n=rows.
Matlab equation
C = A * transpose(B)
Input parameter 1
A : vector with length given by rows
Input parameter 2
BT : vector with length given by rows
Input parameter 3
rows : length of vector A and B
Output parameter
C : result of multiplication of A with the transpose of B
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Multiply vector A with transpose of vector B */
float A[3];
float B[3];
VN_CreateMatrix(C, 3, 3, {0});
VN_VecMultT(A, B, 3, C);
Embedded Firmware Library
80/121
Embedded Firmware Library
UM003
VN_Diagonal
Table 60 describes the VN_Diagonal function.
Table 60.
Function Name
VN_Diagonal
Function prototype
void VN_Diagonal(
VN_Diagonal
float scalar,
unsigned long Arows,
unsigned long Acols,
float *A)
Behavior description
Create a diagonal matrix with the diagonal terms equal to scalar and the
non-diagonal elements equal to zero.
Matlab equation
A = scalar * eye(Arows, Acols)
Input parameter 1
scalar : desired magnitude of diagonal terms
Input parameter 2
Arows : number of rows for the resulting matrix A
Input parameter 3
Acols : number of columns for the resulting matrix A
Output parameter
A : resulting diagonal matrix
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Create 5x5 identity matrix */
VN_CreateMatrix(A, 5, 5, {0});
VN_Diagonal(1.0f, 5, 5, A);
Embedded Firmware Library
81/121
Embedded Firmware Library
UM003
VN_MatAdd
Table 61 describes the VN_MatAdd function.
Table 61.
Function Name
VN_MatAdd
Function prototype
void VN_MatAdd(
VN_MatAdd
float **A,
float **B,
unsigned long Arows,
unsigned long Acols,
float **C)
Behavior description
Compute the addition of matrix A and B.
Matlab equation
C=A+B
Input parameter 1
A : Matrix A with size of Arows x Acols.
Input parameter 2
B : Matrix B with size of Arows x Acols.
Input parameter 3
Arows : Number of rows in matrix A and B.
Input parameter 4
Acols : Number of cols in matrix A and B.
Output parameter
C : Result of matrix addition with size of Arows x Acols.
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Add matrix A and B
VN_CreateMatrix(A, 3,
VN_CreateMatrix(B, 3,
VN_CreateMatrix(C, 3,
to
3,
3,
3,
get C */
{0});
{0});
{0});
VN_MatAdd(A, B, 3, 3, C);
Embedded Firmware Library
82/121
Embedded Firmware Library
UM003
VN_MatSub
Table 62 describes the VN_MatSub function.
Table 62.
Function Name
VN_MatSub
Function prototype
void VN_MatSub(
VN_MatSub
float **A,
float **B,
unsigned long Arows,
unsigned long Acols,
float **C)
Behavior description
Compute the subtraction of matrix A and B.
Matlab equation
C=A-B
Input parameter 1
A : Matrix A with size of Arows x Acols.
Input parameter 2
B : Matrix B with size of Arows x Acols.
Input parameter 3
Arows : Number of rows in matrix A and B.
Input parameter 4
Acols : Number of cols in matrix A and B.
Output parameter
C : Result of matrix subtraction with size of Arows x Acols.
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Subtract matrix
VN_CreateMatrix(A,
VN_CreateMatrix(B,
VN_CreateMatrix(C,
A and
3, 3,
3, 3,
3, 3,
B to get C */
{0});
{0});
{0});
VN_MatSub(A, B, 3, 3, C);
Embedded Firmware Library
83/121
Embedded Firmware Library
UM003
VN_MatMult
Table 63 describes the VN_MatMult function.
Table 63.
Function Name
VN_MatMult
Function prototype
void VN_MatMult(
VN_MatMult
float **A,
float **B,
unsigned long Arows,
unsigned long Acols,
unsigned long Bcols,
float **C)
Behavior description
Compute the multiplication of matrix A and B.
Matlab equation
C=A*B
Input parameter 1
A : Matrix A with size of Arows x Acols
Input parameter 2
B : Matrix B with size of Acols x Bcols
Input parameter 3
Arows : Number of rows in matrix A
Input parameter 4
Acols : Number of columns in matrix A
Input parameter 5
Bcols : Number of columns in matrix B
Output parameter
C : Result of the matrix multiplication with size Arows x Bcols
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Multiply matrix A and B to get C */
VN_CreateMatrix(A, 3, 3, {0});
VN_CreateMatrix(B, 3, 3, {0});
VN_CreateMatrix(C, 3, 3, {0});
VN_MatMult(A, B, 3, 3, 3, C);
Embedded Firmware Library
84/121
Embedded Firmware Library
UM003
VN_MatMultMMT
Table 64 describes the VN_MatMultMMT function.
Table 64.
VN_MatMultMMT
Function Name
VN_MatMultMMT
Function prototype
void VN_MatMultMMT(
float **A,
float **BT,
unsigned long Arows,
unsigned long Acols,
unsigned long Brows,
float **C)
Behavior description
Compute the multiplication of matrix A with the transpose of matrix B.
Matlab equation
C = A * transpose(B)
Input parameter 1
A : Matrix A with size of Arows x Acols
Input parameter 2
B : Matrix B with size of Acols x Bcols
Input parameter 3
Arows : Number of rows in matrix A
Input parameter 4
Acols : Number of columns in matrix A
Input parameter 5
Brows : Number of rows in matrix B
Output parameter
C : Result of the matrix multplication with size Arows x Brows
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Multiply matrix A and transpose of B to get C */
VN_CreateMatrix(A, 5, 3, {0});
VN_CreateMatrix(B, 7, 3, {0});
VN_CreateMatrix(C, 5, 7, {0});
VN_MatMultMMT(A, B, 5, 3, 7, C);
Embedded Firmware Library
85/121
Embedded Firmware Library
UM003
VN_MatMultMTM
Table 65 describes the VN_MatMultMTM function.
Table 65.
VN_MatMultMTM
Function Name
VN_MatMultMTM
Function prototype
void VN_MatMultMTM(
float **A,
float **BT,
unsigned long Arows,
unsigned long Acols,
unsigned long Bcols,
float **C)
Behavior description
Compute the multiplication of matrix A with the transpose of matrix B.
Matlab equation
C = A * transpose(B)
Input parameter 1
A : Matrix A with size of Arows x Acols
Input parameter 2
B : Matrix B with size of Arows x Bcols
Input parameter 3
Arows : Number of rows in matrix A
Input parameter 4
Acols : Number of columns in matrix A
Input parameter 5
Bcols : Number of columns in matrix B
Output parameter
C : Result of the matrix multiplication with size Acols x Bcols
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Multiply the transpose of matrix A and B to get C */
VN_CreateMatrix(A, 3, 5, {0});
VN_CreateMatrix(B, 3, 7, {0});
VN_CreateMatrix(C, 5, 7, {0});
VN_MatMultMTM(A, B, 3, 5, 7, C);
Embedded Firmware Library
86/121
Embedded Firmware Library
UM003
VN_MatScalarMult
Table 66 describes the VN_MatScalarMult function.
Table 66.
VN_MatScalarMult
Function Name
VN_MatScalarMult
Function prototype
void VN_MatScalarMult(
double **A,
double scalar,
unsigned long Arows,
unsigned long Acols,
double **C)
Behavior description
Compute the multiplication of a scalar times a matrix.
Matlab equation
C = scalar * A
Input parameter 1
scalar : The scalar term
Input parameter 2
A : The matrix with the size Arows x Acols
Input parameter 3
Arows : The number of rows in the matrix A
Input parameter 4
Acols : The number of columns in the matrix B
Output parameter
C : The result of the operation scalar * A
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Multiply all the terms in matrix A by 10 */
VN_CreateMatrix(A, 3, 5, {0});
VN_CreateMatrix(B, 3, 5, {0});
VN_MatMultMTM(A, 10.0f, 3, 5, B);
Embedded Firmware Library
87/121
Embedded Firmware Library
UM003
VN_MatVecMult
Table 67 describes the VN_MatVecMult function.
Table 67.
VN_MatVecMult
Function Name
VN_MatVecMult
Function prototype
void VN_MatVecMult(
float **A,
float *B,
unsigned long Arows,
unsigned long Acols,
float *C)
Behavior description
Compute the multiplication of matrix A with vector B.
Matlab equation
C=A*B
Input parameter 1
A : Matrix with size Arows x Acols
Input parameter 2
B : Column vector with size Acols x 1
Input parameter 3
Arows : Number of rows in matrix A
Input parameter 4
Acols : Number of columns in matrix A
Output parameter
C : Matrix result with size Arows x Acols
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Multiply matrix A by vector B */
VN_CreateMatrix(A, 3, 3, {0});
float B[3];
float C[3];
VN_MatVecMult(A, B, 3, 3, C);
Embedded Firmware Library
88/121
Embedded Firmware Library
UM003
VN_MatTVecMult
Table 68 describes the VN_MatTVecMult function.
Table 68.
VN_MatTVecMult
Function Name
VN_MatTVecMult
Function prototype
void VN_MatTVecMult(
float **A,
float *B,
unsigned long Arows,
unsigned long Acols,
float *C)
Behavior description
Multiply the transpose of the matrix A by the vector B.
Matlab equation
C = transpose(A) * B
Input parameter 1
A : Matrix with size Arows x Acols
Input parameter 2
B : Column vector with size Arows x 1
Input parameter 3
Arows : Number of rows in matrix A
Input parameter 4
Acols : Number of columns in matrix A
Output parameter
C : Matrix result with size Acols x Arows
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Multiply transpose of matrix A by vector B */
VN_CreateMatrix(A, 3, 3, {0});
float B[3];
float C[3];
VN_MatTVecMult(A, B, 3, 3, C);
Embedded Firmware Library
89/121
Embedded Firmware Library
UM003
VN_MatCopy
Table 69 describes the VN_MatCopy function.
Table 69.
Function Name
VN_MatCopy
Function prototype
void VN_MatCopy(
VN_MatCopy
float **A,
unsigned long nrows,
unsigned long ncols,
float **B)
Behavior description
Copy the values from one matrix to another.
Matlab equation
B=A
Input parameter 1
A : Matrix with size nrows x ncols
Input parameter 2
nrows : number of rows in matrix A
Input parameter 3
ncols : number of columns in matrix A
Output parameter
B : Resulting matrix with size nrows x ncols
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Copy matrix A into matrix B */
VN_CreateMatrix(A, 3, 3, {1,0,0,0,1,0,0,0,1}); /* Identity matrix */
VN_CreateMatrix(B, 3, 3, {0});
VN_MatCopy(A, 3, 3, B); /* B will now be equal to A */
Embedded Firmware Library
90/121
Embedded Firmware Library
UM003
VN_MatInv
Table 70 describes the VN_MatInv function.
Table 70.
Function Name
VN_MatInv
Function prototype
void VN_MatInv(
VN_MatInv
float **A,
s32 n,
float **B)
Behavior description
Compute the matrix inverse of A.
Matlab equation
B = inv(A)
Input parameter 1
A : Matrix with size n x n
Input parameter 2
n : Number of rows or columns in matrix A
Output parameter
B : Matrix result with size n x n
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Calculate inverse of A */
VN_CreateMatrix(A, 3, 3, {1,0,0,0,1,0,0,0,1}); /* Identity matrix */
VN_CreateMatrix(B, 3, 3, {0});
VN_MatInv(A, 3, B); /* B will now be equal to inverse of A */
Embedded Firmware Library
91/121
Embedded Firmware Library
UM003
VN_SkewMatrix
Table 71 describes the VN_SkewMatrix function.
Table 71.
VN_SkewMatrix
Function Name
VN_SkewMatrix
Function prototype
void VN_SkewMatrix(
float *V,
float **A)
Behavior description
Compute the matrix cross product of vector V. This operation
converts a vector into a matrix that when multiplied by another vector
would give the result of a cross product operation between the two
vectors.
Matlab equation
A = skew(V) where A*b = cross(V,b) if b is a vector same size as V.
Input parameter 1
V : Vector of size 3x1 to perform operation on.
Output parameter
A : Resulting matrix with size 3x3.
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Calculate skew matrix of A */
float A[3] = {1, 0, 0};
float B[3] = {0, 1, 0};
VN_CreateMatrix(C, 3, 3, {0});
float D[3];
VN_SkewMatrix(A, C); /* C will now equal skew matrix of A */
D = VN_MatVecMult(C, B, 3, 3, D); /* D = VN_crossP(A, B) = {0, 0, -1} */
Embedded Firmware Library
92/121
Embedded Firmware Library
UM003
VN_Transpose
Table 72 describes the VN_Transpose function.
Table 72.
Function Name
VN_Transpose
Function prototype
void VN_Transpose(
VN_Transpose
float **A,
unsigned long Arows,
unsigned long Acols,
float **B)
Behavior description
Calculate the transpose of matrix A.
Matlab equation
B = transpose(A)
Input parameter 1
A : Matrix with size Arows x Acols
Input parameter 2
Arows : Number of rows in matrix A
Input parameter 3
Acols : Number of columns in matrix A
Output parameter
B : Resulting matrix with size Acols x Arows
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Calculate transpose of A */
VN_CreateMatrix(A, 3, 3, {1,2,3,4,5,6,7,8,9});
VN_CreateMatrix(B, 3, 3, {0});
VN_Transpose(A, 3, 3, B); /* B = {1,4,7,2,5,8,3,6,9} */
Embedded Firmware Library
93/121
Embedded Firmware Library
UM003
VN_Norm
Table 73 describes the VN_Norm function.
Table 73.
Function Name
VN_Norm
Function prototype
float VN_Norm(
VN_Norm
float *A,
unsigned long m)
Behavior description
Compute the length of the given vector with size m x 1.
Matlab equation
norm(A)
Input parameter 1
A : Vector to compute the length of with size m x 1
Input parameter 2
m : Number of terms in the vector A.
Output parameter
None
Return value
The computed length of the vector.
Required preconditions
None
Called functions
None
Example:
/* Calculate length of vector A */
float A[3] = {1, 2, 3};
float len;
len = VN_Norm(A, 3); /* len = sqrt(1*1 + 2*2 + 3*3) */
Embedded Firmware Library
94/121
Embedded Firmware Library
UM003
VN_Normalize
Table 74 describes the VN_Normalize function.
Table 74.
Function Name
VN_Normalize
Function prototype
void VN_Normalize(
VN_Normalize
float *V1,
unsigned long m,
float *V2)
Behavior description
Compute the unit normal vector with the direction given by vector V1.
Matlab equation
V2 = V1 ./ norm(V1)
Input parameter 1
V1 : Vector with size m x 1
Input parameter 2
m : Number of terms in the vector V1
Output parameter
V2 : Unit vector with the size of m x 1
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Normalize vector A */
float A[3] = {3, 0, 0};
float B[3];
VN_Normalize(A, 3, B); /* B = {1, 0, 0} */
Embedded Firmware Library
95/121
Embedded Firmware Library
UM003
VN_Quat2DCM
Table 75 describes the VN_Quat2DCM function.
Table 75.
Function Name
VN_Quat2DCM
Function prototype
void VN_quat2DCM(
VN_Quat2DCM
float *q,
float **A)
Behavior description
Convert a quaternion into to a directional cosine matrix.
Matlab equation
A = quat2dcm(q)
Input parameter 1
q : Quaternion attitude
Output parameter
A : Directional cosine matrix (3x3)
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a directional cosine matrix */
float q[4];
VN_CreateMatrix(DCM, 3, 3, {0});
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2DCM(q, DCM); /* Compute the DCM */
Embedded Firmware Library
96/121
Embedded Firmware Library
UM003
VN_YPR2DCM
Table 76 describes the VN_YPR2DCM function.
Table 76.
Function Name
VN_YPR2DCM
Function prototype
void VN_YPR2DCM(
VN_YPR2DCM
float *YPR,
float **A)
Behavior description
Convert the given yaw, pitch, and roll into a directional cosine matrix.
Matlab equation
A = ANGLE2DCM(YPR[0], YPR[1], YPR[2], 'ZYX')
Input parameter 1
YPR : Yaw, pitch, roll as a 3x1 vector
Output parameter
A : Directional cosine matrix
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the yaw, pitch, roll into a directional cosine matrix */
float ypr[3];
VN_CreateMatrix(DCM, 3, 3, {0});
VN100_SPI_GetYPR(0, &ypr[0], &ypr[1], &ypr[2]); /* Get YPR from device */
VN100_YPR2DCM(q, DCM); /* Compute the DCM */
Embedded Firmware Library
97/121
Embedded Firmware Library
UM003
VN_MatZeros
Table 77 describes the VN_MatZeros function.
Table 77.
Function Name
VN_MatZeros
Function prototype
void VN_MatZeros(
VN_MatZeros
float **A,
unsigned long Arows,
unsigned long Acols)
Behavior description
Sets all elements of matrix A equal to zero.
Matlab equation
A = zeros(Arows, Acols)
Input parameter 1
A : Matrix with size of Arows x Acols
Input parameter 2
Arows : Number of rows in matrix A
Input parameter 3
Acols : Number of columns in matrix A
Output parameter
Matrix A with all elements set to zero
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Zero out matrix A */
VN_CreateMatrix(A, 3, 3, {1, 0, 0, 0, 1, 0, 0, 0, 0}); /* Identity matrix */
VN_MatZeros(A, 3, 3); /* Zero out matrix A */
Embedded Firmware Library
98/121
Embedded Firmware Library
UM003
VN_Quat2Euler121
Table 78 describes the VN_Quat2Euler121 function.
Table 78.
VN_Quat2Euler121
Function Name
VN_Quat2Euler121
Function prototype
void VN_Quat2Euler121(
float *q,
float *Euler121)
Behavior description
Convert a quaternion attitude representation to an Euler angle 1,2,1 set.
Matlab equation
Euler121 = quat2angle(q, 'XYX')
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
Euler angles
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Euler 121 angles */
float q[4];
float Euler121[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2Euler121(q, Euler121); /* Compute the Euler 121 angles */
Embedded Firmware Library
99/121
Embedded Firmware Library
UM003
VN_Quat2Euler123
Table 79 describes the VN_Quat2Euler123 function.
Table 79.
VN_Quat2Euler123
Function Name
VN_Quat2Euler123
Function prototype
void VN_Quat2Euler123(
float *q,
float *Euler123)
Behavior description
Convert a quaternion attitude representation to an Euler angle 1,2,3 set.
Matlab equation
Euler123 = quat2angle(q, 'XYZ')
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
Euler angles
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Euler 123 angles */
float q[4];
float Euler123[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2Euler123(q, Euler123); /* Compute the Euler 123 angles */
Embedded Firmware Library
100/121
Embedded Firmware Library
UM003
VN_Quat2Euler131
Table 80 describes the VN_Quat2Euler131 function.
Table 80.
VN_Quat2Euler131
Function Name
VN_Quat2Euler131
Function prototype
void VN_Quat2Euler131(
float *q,
float *Euler131)
Behavior description
Convert a quaternion attitude representation to an Euler angle 1,3,1 set.
Matlab equation
Euler131 = quat2angle(q, 'XZX')
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
Euler angles
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Euler 131 angles */
float q[4];
float Euler131[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2Euler131(q, Euler131); /* Compute the Euler 131 angles */
Embedded Firmware Library
101/121
Embedded Firmware Library
UM003
VN_Quat2Euler132
Table 81 describes the VN_Quat2Euler132 function.
Table 81.
VN_Quat2Euler132
Function Name
VN_Quat2Euler132
Function prototype
void VN_Quat2Euler132(
float *q,
float *Euler132)
Behavior description
Convert a quaternion attitude representation to an Euler angle 1,3,2 set.
Matlab equation
Euler132 = quat2angle(q, 'XZY')
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
Euler angles
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Euler 132 angles */
float q[4];
float Euler132[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2Euler132(q, Euler132); /* Compute the Euler 132 angles */
Embedded Firmware Library
102/121
Embedded Firmware Library
UM003
VN_Quat2Euler212
Table 82 describes the VN_Quat2Euler212 function.
Table 82.
VN_Quat2Euler212
Function Name
VN_Quat2Euler212
Function prototype
void VN_Quat2Euler212(float *q, float *Euler212)
Behavior description
Convert a quaternion attitude representation to an Euler angle 2,1,2 set.
Matlab equation
Euler212 = quat2angle(q, 'YXY')
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
Euler angles
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Euler 212 angles */
float q[4];
float Euler212[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2Euler212(q, Euler212); /* Compute the Euler 212 angles */
Embedded Firmware Library
103/121
Embedded Firmware Library
UM003
VN_Quat2Euler213
Table 83 describes the VN_Quat2Euler213 function.
Table 83.
VN_Quat2Euler213
Function Name
VN_Quat2Euler213
Function prototype
void VN_Quat2Euler213(
float *q,
float *Euler213)
Behavior description
Convert a quaternion attitude representation to an Euler angle 2,1,3 set.
Matlab equation
Euler213 = quat2angle(q, 'YXZ')
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
Euler angles
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Euler 213 angles */
float q[4];
float Euler213[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2Euler213(q, Euler213); /* Compute the Euler 213 angles */
Embedded Firmware Library
104/121
Embedded Firmware Library
UM003
VN_Quat2Euler231
Table 84 describes the VN_Quat2Euler231 function.
Table 84.
VN_Quat2Euler231
Function Name
VN_Quat2Euler231
Function prototype
void VN_Quat2Euler231(float *q, float *Euler231)
Behavior description
Convert a quaternion attitude representation to an Euler angle 2,3,1 set.
Matlab equation
Euler231 = quat2angle(q, 'YZX')
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
Euler angles
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Euler 231 angles */
float q[4];
float Euler231[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2Euler231(q, Euler231); /* Compute the Euler 231 angles */
Embedded Firmware Library
105/121
Embedded Firmware Library
UM003
VN_Quat2Euler232
Table 85 describes the VN_Quat2Euler232 function.
Table 85.
VN_Quat2Euler232
Function Name
VN_Quat2Euler232
Function prototype
void VN_Quat2Euler232(
float *q,
float *Euler232)
Behavior description
Convert a quaternion attitude representation to an Euler angle 2,3,2 set.
Matlab equation
Euler232 = quat2angle(q, 'YZY')
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
Euler angles
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Euler 232 angles */
float q[4];
float Euler232[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2Euler232(q, Euler232); /* Compute the Euler 232 angles */
Embedded Firmware Library
106/121
Embedded Firmware Library
UM003
VN_Quat2Euler312
Table 86 describes the VN_Quat2Euler312 function.
Table 86.
VN_Quat2Euler312
Function Name
VN_Quat2Euler312
Function prototype
void VN_Quat2Euler312(
float *q,
float *Euler312)
Behavior description
Convert a quaternion attitude representation to an Euler angle 3,1,2 set.
Matlab equation
Euler312 = quat2angle(q, 'ZXY')
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
Euler angles
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Euler 312 angles */
float q[4];
float Euler312[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2Euler312(q, Euler312); /* Compute the Euler 312 angles */
Embedded Firmware Library
107/121
Embedded Firmware Library
UM003
VN_Quat2Euler313
Table 87 describes the VN_Quat2Euler313 function.
Table 87.
VN_Quat2Euler313
Function Name
VN_Quat2Euler313
Function prototype
void VN_Quat2Euler313(
float *q,
float *Euler313)
Behavior description
Convert a quaternion attitude representation to an Euler angle 3,1,3 set.
Matlab equation
Euler313 = quat2angle(q, 'ZXZ')
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
Euler angles
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Euler 313 angles */
float q[4];
float Euler313[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2Euler313(q, Euler313); /* Compute the Euler 313 angles */
Embedded Firmware Library
108/121
Embedded Firmware Library
UM003
VN_Quat2Euler321
Table 88 describes the VN_Quat2Euler321 function.
Table 88.
VN_Quat2Euler321
Function Name
VN_Quat2Euler321
Function prototype
void VN_Quat2Euler321(
float *q,
float *Euler321)
Behavior description
Convert a quaternion attitude representation to an Euler angle 3,2,1 set.
Matlab equation
Euler321 = quat2angle(q, 'ZYX')
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
Euler angles
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Euler 321 angles */
float q[4];
float Euler321[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2Euler321(q, Euler321); /* Compute the Euler 321 angles */
Embedded Firmware Library
109/121
Embedded Firmware Library
UM003
VN_Quat2Euler323
Table 89 describes the VN_Quat2Euler323 function.
Table 89.
VN_Quat2Euler323
Function Name
VN_Quat2Euler323
Function prototype
void VN_Quat2Euler323(
float *q,
float *Euler323)
Behavior description
Convert a quaternion attitude representation to an Euler angle 3,2,3 set.
Matlab equation
Euler323 = quat2angle(q, 'ZYZ')
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
Euler angles
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Euler 323 angles */
float q[4];
float Euler323[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2Euler323(q, Euler323); /* Compute the Euler 323 angles */
Embedded Firmware Library
110/121
Embedded Firmware Library
UM003
VN_Quat2Gibbs
Table 90 describes the VN_Quat2Gibbs function.
Table 90.
VN_Quat2Gibbs
Function Name
VN_Quat2Gibbs
Function prototype
void VN_Quat2Gibbs(float *q, float *Gibb)
Behavior description
Convert a quaternion attitude representation to the Gibbs angle
representation.
Matlab equation
N/A
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
Gibb : Gibbs vector
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Gibbs vector */
float q[4];
float Gibbs[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2Gibbs(q, Gibbs); /* Compute the Gibbs vector */
Embedded Firmware Library
111/121
Embedded Firmware Library
UM003
VN_Quat2MRP
Table 91 describes the VN_Quat2MRP function.
Table 91.
Function Name
VN_Quat2MRP
Function prototype
void VN_Quat2MRP(
VN_Quat2MRP
float *q,
float *MRP)
Behavior description
Convert a quaternion attitude representation to an Modified Rodrigues
Parameters representation.
Matlab equation
N/A
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
MRP : Modified Rodrigues Parameters
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a Modified Rodrigues Parameters */
float q[4];
float MRP[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2MRP(q, MRP); /* Compute the Modified Rodrigues Parameters */
Embedded Firmware Library
112/121
Embedded Firmware Library
UM003
VN_Quat2PRV
Table 92 describes the VN_Quat2PRV function.
Table 92.
Function Name
VN_Quat2PRV
Function prototype
void VN_Quat2PRV(
VN_Quat2PRV
float *q,
float *PRV)
Behavior description
Convert a quaternion attitude representation to the principal rotation
vector.
Matlab equation
N/A
Input parameter 1
q : Quaternion 4x1 vector
Output parameter
PRV : Principal rotation vector
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Convert the quaternion into a principal rotation vector */
float q[4];
float PRV[3];
VN100_SPI_GetQuat(0, q);
/* Get quaternion from device */
VN100_Quat2PRV(q, PRV); /* Compute the principal rotation vector */
Embedded Firmware Library
113/121
Embedded Firmware Library
UM003
VN_AddQuat
Table 93 describes the VN_AddQuat function.
Table 93.
Function Name
VN_AddQuat
Function prototype
void VN_AddQuat(
VN_AddQuat
float *q1,
float *q2,
float *q3)
Behavior description
VN_AddQuat provides the quaternion which corresponds to performing
two successive rotations from q1 and q2.
Matlab equation
N/A
Input parameter 1
q1 : First quaternion
Input parameter 2
q2 : Second quaternion
Output parameter
q3 : Combined sucessive rotation of q1 and q2
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Create a combined rotation of quaternion 1 and 2 */
float q1[4];
float q2[4];
float q3[4];
VN100_AddQuat(q1, q2, q3);
Embedded Firmware Library
114/121
Embedded Firmware Library
UM003
VN_SubQuat
Table 94 describes the VN_SubQuat function.
Table 94.
Function Name
VN_SubQuat
Function prototype
void VN_SubQuat(
VN_SubQuat
float *q1,
float *q2,
float *q3)
Behavior description
VN_SubQuat provides the quaternion which corresponds to the relative
rotation from q2 to q1.
Matlab equation
N/A
Input parameter 1
q1 : First quaternion
Input parameter 2
q2 : Second quaternion
Output parameter
q3 : Relative rotation from q2 to q1
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Create a relative rotation from q2 to q1 */
float q1[4];
float q2[4];
float q3[4];
VN100_SubQuat(q1, q2, q3);
Embedded Firmware Library
115/121
Embedded Firmware Library
UM003
VN_QuatKinematicDiffEq
Table 95 describes the VN_QuatKinematicDiffEq function.
Table 95.
VN_QuatKinematicDiffEq
Function Name
VN_QuatKinematicDiffEq
Function prototype
void VN_QuatKinematicDiffEq(
float *q,
float *rates,
float *q_dot)
Behavior description
Computes the time rate of change of the quaternion parameters as a
function of the angular rates. You can use this function if you need to
determine how the quaternion parameters are instantaneously changing
as a function of time.
Matlab equation
N/A
Input parameter 1
q : Current attitude quaternion
Input parameter 2
rates : angular rates [rad/s]
Output parameter
q_dot : derivative of q
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Compute the instantaneous time derivative of the quaternion parameters */
float q[4];
float angular_rates[3];
float q_dot[4];
VN100_SPI_GetQuatRates(0, q, angular_rates); /* Get quat and angular rates */
VN_QuatKinematicDiffEq(q,angular_rates,q_dot); /* Derivative of quaternion */
Embedded Firmware Library
116/121
Embedded Firmware Library
UM003
VN_YPRKinematicDiffEq
Table 96 describes the VN_YPRKinematicDiffEq function.
Table 96.
VN_YPRKinematicDiffEq
Function Name
VN_YPRKinematicDiffEq
Function prototype
void VN_YPRKinematicDiffEq(
float *YPR,
float *rates,
float *YPR_dot)
Behavior description
Computes the time rate of change of the 321 Euler angles (yaw, pitch, roll)
as a function of the angular rates. You can use this function if you need to
determine how the Euler angles are instantaneously changing as a function
of time.
Matlab equation
N/A
Input parameter 1
YPR : Yaw, Pitch, Roll angles [rad]
Input parameter 2
rates : angular rates [rad/s]
Output parameter
YPR_dot : rate of change of yaw, pitch, roll [rad/s]
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Compute the instantaneous time derivative of the Euler angles */
float q[4];
float ypr[3];
float angular_rates[3];
float ypr_dot[3];
VN100_SPI_GetQuatRates(0, q, angular_rates); /* Get quat and angular rates */
VN_Quat2Euler321(q, ypr); /* Convert quaternion into yaw, pitch, and roll */
VN_QuatKinematicDiffEq(q,angular_rates,ypr_dot); /* Get ypr_dot */
/* ypr_dot = {yaw_dot, pitch_dot, roll_dot} where dot is derivative */
Embedded Firmware Library
117/121
Embedded Firmware Library
UM003
VN_Body2Inertial
Table 97 describes the VN_Body2Inertial function.
Table 97.
VN_Body2Inertial
Function Name
VN_Body2Inertial
Function prototype
void VN_Body2Inertial(float *v1, float *q, float *v2)
Behavior description
Converts a vector measured in the body frame into the inertial reference
frame.
Matlab equation
N/A
Input parameter 1
V1 : vector measured in the body reference frame.
Input parameter 2
q : quaternion attitude of body with respect to the inertial reference
frame. Input in the quaternion here that you receive from the attitude
sensor.
Output parameter
V2 : vector measured in the inertial reference frame.
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Compute the inertial acceleration */
float accel_body[3];
float accel_inertial[3];
float q[4]; /* quaternion */
VN100_SPI_GetQuatAcc(0, q, accel_body); /* Get body acceleration */
VN_Body2Inertial(accel_body, q, accel_inertial); /* Convert to inertial
measured acceleration */
accel_inertial[2] += VN_G; /* Remove gravity in inertial frame */
/* Now accel_inertial is the actual acceleration measured in the body frame.
It can be integrated once to find inertial velocity, and twice to find
inertial acceleration. */
Embedded Firmware Library
118/121
Embedded Firmware Library
UM003
VN_Inertial2Body
Table 98 describes the VN_Inertial2Body function.
Table 98.
VN_Inertial2Body
Function Name
VN_Inertial2Body
Function prototype
void VN_Inertial2Body(float *v1, float *q, float *v2)
Behavior description
Convert a vector measured in the inertial frame into the body reference
frame.
Matlab equation
N/A
Input parameter 1
V1 : vector measured in the inertial reference frame.
Input parameter 2
q : quaternion attitude of body with respect to the inertial reference
frame. Input in the quaternion here that you receive from the attitude
sensor.
Output parameter
V2 : vector measured in the body reference frame.
Return value
None
Required preconditions
None
Called functions
None
Example:
/* Compute the body acceleration without gravity */
float accel_body[3];
/* Accel in body frame */
float gravityB[3];
/* Gravity in body frame */
float q[4];
/* Quaternion */
float gravityI[3] = {0,0,-VN_G}; /* Gravity acceleration in inertial frame */
VN100_SPI_GetQuatAcc(0, q, accel_body); /* Get quat and measured accel in
body reference frame */
VN_Inertial2Body(gravity, q, gravityB); /* Convert gravity into body frame */
VN_vecSub(accel_body, gravityB, 3, accel_body); /* Remove gravity in body
frame */
/* Now accel_body is the actual acceleration measured in the body reference
frame. The acceleration measured by the accelerometers is the actual
acceleration plus the “measured” acceleration due to gravity. */
Embedded Firmware Library
119/121
Embedded Firmware Library
8
UM003
Revision history
Table 99.
Revision history
Date
Revision
Changes
Oct-06-2009
1
Initial release.
Jun-16-2014
1.1
Updated document formatting.
Embedded Firmware Library
120/121
Embedded Firmware Library
UM003
Please Read Carefully:
Information in this document is provided solely in connection with VectorNav products. VectorNav Technologies
(VN) reserves the right to make changes, corrections, modifications, or improvements to this document, and the
products and services described herein at any time, without notice.
All VN products are sold pursuant of VN’s terms and conditions of sale.
No license to any intellectual property, expressed or implied, is granted under this document. If any part of this
document refers to any third party products or services it shall not be deemed a license grant by VN for the use of
such third party products or services, or any intellectual property contained therein or considered as a warranty
covering the use in any manner whatsoever of such third party products or services or any intellectual property
contained therein.
Information in this document supersedes and replaces all information previously supplied.
The VectorNav logo is a registered trademark of VectorNav Technologies. All other names are the property of their
respective owners.
© 2009 VectorNav Technologies – All rights reserved
Embedded Firmware Library
121/121
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.5 Linearized : No Page Count : 121 Language : en-US Tagged PDF : Yes Title : Embedded Firmware Library Author : John Creator : Microsoft® Word 2013 Create Date : 2014:06:16 06:25:33-05:00 Modify Date : 2014:06:16 06:25:33-05:00 Producer : Microsoft® Word 2013EXIF Metadata provided by EXIF.tools