LPMS-IG1 User Manual
- 1 Introduction
- 2 Reference Systems
- 2.1 Coordinates
- 2.2 Raw Data
- 2.3 Euler Angles
- 2.4 Orientation Alignment Modes
- 2.4.1 Heading Reset
- 2.4.2 Alignment Reset
- 2.4.3 Object Reset
- 2.5 GPS Data
- 3 Communication
- 3.1 Communication Modes
- 3.2 LPBUS Protocol
- 3.2.1 GET Commands
- 3.2.2 SET Commands
- 3.3 LPBUS Packet Format
- 3.3.1 Example
- 3.3.2 Data Format in a Packet Data Field
- 3.3.3 Sensor Measurement Data
- 3.4 LPBUS Example Communication
- 3.4.1 Goto Command Mode
- 3.4.2 Goto Steaming Mode
- 3.4.3 Request Gyroscope Range
- 3.4.4 Set Accelerometer Range
- 3.4.5 Save Sensor Parameters
- 3.4.6 Read Sensor Status
- 3.4.7 Set UART / RS232 Baudrate
- 3.5 CANOpen and Sequential CAN Protocols
- 3.6 CAN Data Output Format
- 3.7 Example
- 3.8 ASCII Output
- 4 Appendix
- 4.1 Firmware Function / Command List
- 4.1.1 Summary
- 4.1.2 Acknowledged and Not-acknowledged Identifiers
- 4.1.3 Register Value Save and Reset Command
- 4.1.4 Mode Switching Commands
- 4.1.5 Sensor Status Command
- 4.1.6 Get Data Commands
- 4.1.7 Device Info Commands
- 4.1.8 Data Transmission Commands
- 4.1.9 IMU ID Setting Command
- 4.1.10 Stream Frequency Commands
- 4.1.11 Deg/Rad Output Commands
- 4.1.12 Reference Setting and Offset Reset Command
- 4.1.13 Accelerometer Settings Command
- 4.1.14 Gyroscope Settings Command
- 4.1.15 Magnetometer Settings Command
- 4.1.16 Filter Settings Command
- 4.1.17 CAN Settings Command
- 4.1.18 UART / RS232 Settings Command
- 4.1.19 Sensor Data Timestamp Manipulation
- 4.1.20 GPS Data Transmission Commands
- 4.1 Firmware Function / Command List
Introduction
This manual applies to the following sensor types:
LPMS-IG1-CAN | LPMS-IG1-RS232 | LPMS-IG1P-RS232 |
LPMS-IG1-RS485 | LPMS-IG1P-RS485 | Â |
LPMS-IG1 series sensors are high precision multi-purpose inertial measurement units specially developed for industrial applications. LPMS-IG1 sensors embed a powerful processor, 3 high precision single axis gyroscopes, a general purpose 3 axis gyroscope, accelerometer and magnetometer. The unique dual-gyroscope (Gyro I & II) setup enables accurate dynamics measurement in both low and high-speed applications. Gyro I is suitable for applications where the accuracy requirements are high and the detection range is not critical (<400dps). Gyro II is suitable for general applications where the expected measurement range exceeds 400dps.
LPMS-IG1 series include two models, LPMS-IG1 (without GPS) and LPMS-IG1P (with GPS). Both models offer the following communication methods: USB+RS232 or, USB+CAN or USB+RS485. For details on how to use the communication interface, please refer to the relevant sections below. LPMS-IG1 series come in a waterproof metal housing with a flat bottom profile and mounting holes for easy installation.
Main features:
High precision and stability
Dual 3-axis general purpose gyroscope, 3-axis accelerometer, 3-axis magnetometer
Gyro I: High precision 3-axis gyroscope
Gyro II: 3-axis general purpose gyroscope
Realtime output: Raw and calibrated sensor data, quaternion, Euler angles, temperature, GPS (LPMS-IG1P)
Communication method:USB+RS232 or USB+CAN or USB+RS485
Applications:
Robot navigation
Automotive navigation
Remote control and monitoring for industrial robots
Automated guided vehicle navigation
Reference Systems
Coordinates
The LPMS sensor calculates the orientation difference between a fixed sensor coordinate system (S), a object coordinate (O) and a global reference coordinate system (G). All coordinate systems are defined as right-handed Cartesian coordinate systems. The sensor coordinate system (S) can be referred to the sticker information on the sensor enclosure as showed in Fig. 2.1. The object coordinate (O) is the frame to which the sensor is attached. (S) and (O) can be aligned through the methods introduced in the following sections.
The global reference coordinate system (G) can be divided into two different cases. While the orientation calculation is using all acceleration, gyroscope and magnetic data (sensor filter mode set at acc+gyr+mag), (G) system is defined as following:
X positive when pointing to the magnetic north
Y positive when pointing to the magnetic west
Z positive when pointing up (gravity points vertically down with -1g)
While the orientation calculation is using only acceleration and gyroscope data (sensor filter mode set at acc+gyr), (G) system is defined as following:
X positive aligned to ground plane horizontal projection of x axis of (S) when sensor powered on
Y positive based on right-handed Cartesian coordinate definition
Z positive when pointing up (gravity points vertically down with -1g)
Raw Data
The raw data normally contains 3-axis accelerometer data, 3-axis gyroscope data and 3-axis magnetometer data. All these data are referred to coordinate (S) or (O).
Euler Angles
A positive rotation is always right-handed, i.e. defined according to the right-hand rule (corkscrew rule). This means a positive rotation is defined as clockwise in the direction of the axis of rotation.
The definition used for Euler angles in this document is equivalent to roll, pitch, yaw/heading. The Euler angles are of ZYX global type (subsequent rotation around global Z, Y and X axis, also known as aerospace sequence):
Roll: Rotation around global X, defined from -180°~180°
Pitch: Rotation around Y, defined from -90°~90°
Yaw: Rotation around Z, defined from -180°~180°
NOTE: Due to the definition of Euler angles there is a mathematical singularity when the sensor-fixed X-axis is pointing up or down in the global reference frame (i.e. pitch approaches+/-90). This singularity is not present in quaternion output.
Orientation Alignment Modes
Heading Reset
Often it is important that the global Z-axis remains along the vertical (defined by local gravity vector), but the global X-axis has to be pointed in a particular direction on horizontal plane. In this case a heading reset may be used. When performing a heading reset, the new global reference frame is chosen such that the global X-axis points in the direction of the sensor's x direction while keeping the global Z-axis vertical (along gravity, pointing upwards). In other words: The global Z-axis point upwards along gravity, where the X and Y axis orthogonally form a perpendicular plane.
The operation of heading reset comes out a result on Euler angles data is that yaw angle becomes zero, roll and pitch angles keep same.
NOTE: After a heading reset, the yaw may not be exactly zero, this occurs especially when the X-axis is close to the vertical. This is caused by the definition of the yaw when using Euler angles, which becomes unstable when the pitch approaches +/-90 deg.
Alignment Reset
The alignment reset function aims to facilitate in aligning the sensor coordinate system (S) with the ground plane. After an alignment reset, the (S) coordinate system is changed to (S') as follows:
The (S') Z-axis is the vertical (up) at time of reset
The (S') X-axis equals the (S) X-axis but projected on the new horizontal plane.
The (S') Y-axis is chosen as to obtain a right-handed coordinate frame.
The operation of alignment reset comes out a result on Euler angles data is that yaw angle keeps same, roll and pitch angles become zero.
NOTE: Once this alignment reset is done, orientation will be output in the new coordinate frame (S').
Object Reset
The object reset aligns the sensor coordinate frame to that of the object to which it is attached (see Fig. 2.2). The sensor must be attached in such a way that the X-axis is in the XZ-plane of the object coordinate frame, i.e. the sensor can be used to identify the X-axis of the object. To preserve the global vertical, the object must be oriented such that the object Z-axis is vertical. The object reset causes the new (S') coordinate frame and the object coordinate frame (O) to be aligned.
The object reset simply combines alignment reset and the heading reset at a single instant in time. This has the advantage that all coordinate systems can be aligned with a single action. Keep in mind that the new global reference X-axis (heading) is defined by the object X-axis (to which XZ-plane you have aligned the sensor).
NOTE: Since the sensor X-axis is used to describe the direction of the object X-axis, the reset will not work if the sensor X-axis is aligned along the Z-axis of the object.
GPS Data
LPMS-IG1P series also provide the GPS data output, which is contained by four parts as showed in the following table. See the LPMS-IG1P GPS data structure below.
Name | Description |
Timestamps | 1Hz update rate |
NAV-PVT | Navigation Position, Velocity, Time, etc |
NAV-ATT | Navigation Attitude, Orientation, etc |
ESF-STATUS | External Sensor Fusion Messages. |
Communication
LPMS-IG1 series offer two types of communication methods:
USB + RS232
USB + CAN
USB + RS485
Sensor data is streamed to both USB and RS232/CAN/RS485 terminals simultaneously. Communication protocol for different terminals are summarized as below:
Terminal | Protocol |
USB | LPBUS Protocol |
RS232 | LPBUS Protocol/ASCII |
RS232 | LPBUS Protocol/ASCII |
CAN | CANOpen / CAN sequential |
Communication Modes
There are two communication modes, Streaming Mode and Command mode in LPMS-IG1 sensors. By default, the sensor will start in Streaming Mode on power up (Except for RS485 communication, it starts at Command mode). In Streaming Mode, the sensor will continuously stream out sensor data via USB and RS232/CAN terminals simultaneously. Streaming frequency for both USB and RS232/CAN terminals is determined by the data streaming rate settings (default at 100Hz). The sensor will stop data streaming in Command Mode. User can change the sensor internal parameters in both Streaming and Command mode, but it is highly recommended to put the sensor in Command Mode before making any parameter changes. The state diagram of the sensor modes is summarized in Fig. 3.1.
NOTE: User must issue a Save Parameters command to retain any parameter changes to the sensor before next power cycle.
LPBUS Protocol
LPBUS is a communication protocol based on the industry standard MODBUS protocol. It is the default communication format used by LPMS sensors. .An LPBUS communication packet has two basic command types, GET and SET, that are sent from a host (PC, mobile data logging unit etc.) to a client (LPMS sensor). Later in this manual we will show a description of all supported commands to the sensor, their types and transported data.
GET Commands
Data from the client is read using GET requests. A GET request usually contains no data. The answer from the client to a GET request contains the requested data.
SET Commands
Data registers of the client are written using SET requests. A SET command from the host contains the data to be set. The answer from the client is either ACK (acknowledged) for a successful write, or NACK (not acknowledged) for a failure to set the register occurred.
LPBUS Packet Format
Each packet sent during the communication is based on the following structure:
Flag Name | Start | Sensor ID | Command No. | Data length | Data field | LRC | End |
Bytes | 1 | 2 | 2 | 2 | n | 2 | 2 |
Start: 1 byte. data packet start flag, which is fixed to 3Ah.
Sensor ID: 2 bytes transmitted at LSB. It contains ID of the sensor to be communicated with. The default value of this ID is 01h. The host sends out a GET / SET request to a specific LPMS sensor by using this ID, and the client answers to request also with the same ID. This ID can be adjusted by sending a SET command to the sensor firmware.
Command No.: 2 bytes transmitted at LSB. It contains command number information to be performed by the data transmission.
Data length: 2 bytes transmitted at LSB, It contains the length information of packet data field.
Data field: n bytes transmitted at LSB, where n is not a fixed number which depends on the command types. It contains all the data needed to be transmitted under a specific command.
LRC: 2 bytes transmitted at LSB. It contains the packet checksum information. To ensure the integrity of the transmitted data the LRC checksum is used. It is calculated in the following way:
LRC = sum(Sensor ID, Command no., Data length, and Data field).
The calculated LRC is usually compared with the LRC transmitted from the remote device. If the two LRCs are not equal, and error is reported.
End: 2 bytes transmitted at LSB, which is fixed to 0D0Ah.
Example
LPBus packet from sensor (hex):
3A 01 00 09 00 10 00 37 92 00 00 00 70 93 3E 00 40 7B BE 00 38 70 3F 84 04 0D 0A
Flag Name | Start | Sensor ID | Command No. | Data length | Data field | LRC | End |
Bytes | 1 | 2 | 2 | 2 | n | 2 | 2 |
Hex | 3A | 01 00 | 09 00 | 10 00 | 37 92 00 00 00 70 93 3E 00 40 7B BE 00 38 70 3F | 84 04 | 0D 0A |
Checksum LRC calculation
Calculated Checksum LRC (hex) | = 01 + 00 + 09 + 00 + 10 + 00 + 37 + 92 + 00 + 00 + 00 + 70 + 93 + 3E + 00 + 40 + 7B + BE + 00 + 38 + 70 + 3F |
 | = 0x0484 |
LRC from sensor is transmitted at LSB, hence 84 04
Data Format in a Packet Data Field
Generally, data is sent in little-endian format, low order byte first, high order byte last. Data in the data fields of a packet can be encoded in several ways, depending on the type of information to be transmitted. In the following we list the most common data types. Other command-specific data types are explained in the command reference.
Identifier | Description |
Int32 | 32-bit signed integer value |
UInt32 | 32-bit unsigned integer value |
Int16 | 16-bit signed integer value |
UInt16 | 16-bit unsigned integer value |
Int8 | 8-bit signed integer value |
UInt8 | 8-bit unsigned integer value |
Float32 | 32-bit float value |
Vector3f | 3 element 32-bit float vector |
Vector3i16 | 3 element 16-bit signed integer vector |
Vector4f | 4 element 32-bit float vector |
Vector4i16 | 4 element 16-bit signed integer vector |
Matrix3x3f | 3x3 element 32-bit float value matrix |
Sensor Measurement Data
IMU data
There are two precision modes for sensor data: 32-bit float or 16-bit integer. Users can switch between these modes based on the requested data sampling rate and volume. While sensor is in streaming operational mode, LPBUS transports measurement data in the data field of a packet in the following orders shown in the charts below for the cases of 32-bit float and 16-bit integer precision modes. The order of the sensor data chunks depends on which sensor data is enabled.
NOTE: Timestamp data is always 32-bit unsigned integer in both data precision modes.
Order | Identifier | Description | Unit |
1 | UInt32 | Timestamp | multiply by factor 0.002 to convert to seconds |
2 | Vector3f | Raw accelerometer | g |
3 | Vector3f | Calibrated accelerometer | g |
4 | Vector3f | Raw Gyro I | dps (default) or rad/s |
5 | Vector3f | Raw GyroII | dps (default) or rad/s |
6 | Vector3f | Static bias calibrated Gyro I | dps (default) or rad/s |
7 | Vector3f | Static bias calibrated Gyro II | dps (default) or rad/s |
8 | Vector3f | Alignment calibrated Gyro I | dps (default) or rad/s |
9 | Vector3f | Alignment calibrated Gyro II | dps (default) or rad/s |
10 | Vector3f | Raw magnetometer | uT |
11 | Vector3f | Calibrated magnetometer | uT |
12 | Vector3f | Angular Vel. | dps (default) or rad/s |
13 | Vector4f | Quaternion | Â |
14 | Vector3f | Euler | deg (default) or rad |
15 | Vector3f | Linear acceleration (g) | g |
16 | Float32 | Reserved | Â |
17 | Float32 | Reserved | Â |
18 | Float32 | Temperature | °C |
In 16-bit data precision mode values are transmitted to the host with a multiplication factor applied to increase precision:
Order | Format | Sensor data | Scale factor |
1 | UInt32 | Timestamp counter incremented in 500Hz. multiply by 0.002 to convert to seconds. | 500 |
2 | Vector3i16 | Raw accelerometer (g) | 1000 |
3 | Vector3i16 | Calibrated accelerometer (g) | 1000 |
4 | Vector3i16 | Raw GyroI (dps or rad/s) | dps: 10 rad/s: 1000 |
5 | Vector3i16 | Raw GyroII (dps or rad/s) | dps: 10 rad/s: 100 |
6 | Vector3i16 | Static bias calibrated GyroI (dps or rad/s) | dps: 10 rad/s: 1000 |
7 | Vector3i16 | Static bias calibrated GyroII (dps or rad/s) | dps: 10 rad/s: 100 |
8 | Vector3i16 | Alignment calibrated GyroI (dps or rad/s) | dps: 10 rad/s: 1000 |
9 | Vector3i16 | Alignment calibrated GyroII (dps or rad/s) | dps: 10 rad/s: 100 |
10 | Vector3i16 | Raw magnetometer (uT) | 100 |
11 | Vector3i16 | Calibrated magnetometer (uT) | 100 |
12 | Vector3i16 | Angular Vel. (dps or rad/s) | dps: 10 rad/s: 1000 (gyro range: 400dps) rad/s: 100 (gyro range >= 1000dps) |
13 | Vector4i16 | Quaternion | 10000 |
14 | Vector3i16 | Euler(degree or rad) | deg: 100 rad:10000 |
15 | Vector3i16 | Linear acceleration (g) | 1000 |
16 | Int16 | Reserved | Â |
17 | Int16 | Reserved | Â |
18 | Int16 | Temperature (°C) | 100 |
GPS Data
In addition to IMU data, LPMS-IG1P (with GPS) will output additional 1Hz GPS data packet with the following format:
Order | Format | Sensor data | Scale factor |
1 | UInt32 | Timestamp | Â |
2 | UInt32 | PVT iTOW (ms) - GPS time of week of the navigation epoch. | Â |
3 | UInt16 | PVT year (UTC) | Â |
4 | UInt8 | PVT month (UTC) | Â |
5 | UInt8 | PVT day (UTC) | Â |
6 | UInt8 | PVT hour (UTC) | Â |
7 | UInt8 | PVT min (UTC) | Â |
8 | UInt8 | PVT sec (UTC) | Â |
9 | UInt8 | PVT valid - Validity flags | Â |
10 | UInt32 | PVT tAcc - Time accuracy estimate (UTC) | Â |
11 | Int32 | PVT nano (ns) - Fraction of second (UTC) | Â |
12 | UInt8 | PVT fixType | Â |
13 | UInt8 | PVT flags - Fix status flags | Â |
14 | UInt8 | PVT flags2 - Additional flags | Â |
15 | UInt8 | PVT numSV - Number of satellites used in Nav Solution | Â |
16 | Int32 | PVT longitude (deg) | 10000000 |
17 | Int32 | PVT latitude (deg) | 10000000 |
18 | Int32 | PVT height (mm) - Height above ellipsoid | Â |
19 | Int32 | PVT hMSL (mm) - Height above mean sea level | Â |
20 | UInt32 | PVT hAcc (mm)- Horizontal accuracy estimate | Â |
21 | UInt32 | PVT vAcc (mm) - Vertical accuracy estimate | Â |
22 | Int32 | PVT velN (mm/s) - NED north velocity | Â |
23 | Int32 | PVT velE (mm/s) - NED east velocity | Â |
24 | Int32 | PVT velD (mm/s) - NED down velocity | Â |
25 | Int32 | PVT gSpeed (mm/s) - Ground Speed (2-D) | Â |
26 | Int32 | PVT headMot (deg) - Heading of motion (2-D) | 100000 |
27 | UInt32 | PVT sAcc (mm/s) - Speed accuracy estimate | Â |
28 | UInt32 | PVT headAcc (deg) - Heading accuracy estimate | 100000 |
29 | UInt16 | PVT pDOP - Position DOP | 100 |
30 | Int32 | PVT headVeh (deg) - Heading of vehicle (2-D) | 100000 |
31 | UInt32 | ATT iTOW (ms) - GPS time of week of the navigation epoch | Â |
32 | UInt8 | ATT version - Message version (0 for this version) | Â |
33 | Int32 | ATT roll (deg) - Vehicle roll | 100000 |
34 | Int32 | ATT pitch (deg) - Vehicle pitch | 100000 |
35 | Int32 | ATT heading (deg) - Vehicle heading | 100000 |
36 | UInt32 | ATT accRoll (deg) - Vehicle roll accuracy | 100000 |
37 | UInt32 | ATT accPitch (deg) - Vehicle pitch accuracy | 100000 |
38 | UInt32 | ATT accHeading (deg) - Vehicle heading accuracy | 100000 |
39 | UInt32 | ESF iTOW (ms) - GPS time of week of the navigation epoch | Â |
40 | UInt8 | ESF version - Message version (2 for this version) | Â |
41 | UInt8 | ESF initStatus1 | Â |
42 | UInt8 | ESF initStatus2 | Â |
43 | UInt8 | ESF fusionMode | Â |
44 | UInt8 | ESF numSens - Number of sensors | Â |
45 | UInt32[n] | ESF sensStatus | Â |
LPBUS Example Communication
In this section we will show a few practical examples of communication using the LPBUS protocol.
Goto Command Mode
GET request (HOST -> SENSOR)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 06h | Command no. LSB |
4 | 00h | Command no. MSB |
5 | 00h | Data length LSB (GET command = no data) |
6 | 00h | Data length MSB |
7 | 07h | Check sum LSB |
8 | 00h | Check sum MSB |
9 | 0Dh | Packet end 1 |
10 | 0Ah | Packet end 2 |
Reply data (SENSOR -> HOST)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 00h | Command no. LSB (00h = REPLY_ACK) |
4 | 00h | Command no. MSB |
5 | 00h | Data length LSB (Zero length data for ACK reply) |
6 | 00h | Data length MSB |
7 | 01h | Check sum LSB |
8 | 00h | Check sum MSB |
9 | 0Dh | Packet end 1 |
10 | 0Ah | Packet end 2 |
Goto Steaming Mode
GET request (HOST -> SENSOR)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 07h | Command no. LSB(07h = GOTO_STREAMING_MODE) |
4 | 00h | Command no. MSB |
5 | 00h | Data length LSB (GET command = no data) |
6 | 00h | Data length MSB |
7 | 08h | Check sum LSB |
8 | 00h | Check sum MSB |
9 | 0Dh | Packet end 1 |
10 | 0Ah | Packet end 2 |
Reply data (SENSOR -> HOST)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 00h | Command no. LSB (00h = REPLY_ACK) |
4 | 00h | Command no. MSB |
5 | 00h | Data length LSB (Zero length data for ACK reply) |
6 | 00h | Data length MSB |
7 | 01h | Check sum LSB |
8 | 00h | Check sum MSB |
9 | 0Dh | Packet end 1 |
10 | 0Ah | Packet end 2 |
Request Gyroscope Range
GET request (HOST -> SENSOR)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 3Dh | Command no. LSB(3Dh = GET_GYRO_RANGE) |
4 | 00h | Command no. MSB |
5 | 00h | Data length LSB (GET command = no data) |
6 | 00h | Data length MSB |
7 | 3Eh | Check sum LSB |
8 | 00h | Check sum MSB |
9 | 0Dh | Packet end 1 |
10 | 0Ah | Packet end 2 |
Reply data (SENSOR -> HOST)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 3Dh | Command no. LSB(3Dh = GET_GYRO_RANGE) |
4 | 00h | Command no. MSB |
5 | 04h | Data length LSB (32-bit integer = 4 bytes) |
6 | 00h | Data length MSB |
7 | xxh | Range data byte 1 (LSB) |
8 | xxh | Range data byte 2 |
9 | xxh | Range data byte 3 |
10 | xxh | Range data byte 4 (MSB) |
11 | xxh | Check sum LSB |
12 | xxh | Check sum MSB |
13 | 0Dh | Packet end 1 |
14 | 0Ah | Packet end 2 |
xx = Value depends on the current sensor configuration.
Set Accelerometer Range
SET request (HOST -> SENSOR)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 32h | Command no. LSB (32h = SET_ACC_RANGE) |
4 | 00h | Command no. MSB |
5 | 04h | Data length LSB (32-bit integer = 4 bytes) |
6 | 00h | Data length MSB |
7 | 08h | Range data byte 1 (Range indicator 8g = 8d) |
8 | 00h | Range data byte 2 |
9 | 00h | Range data byte 3 |
10 | 00h | Range data byte 4 |
11 | 3Fh | Check sum LSB |
12 | 00h | Check sum MSB |
13 | 0Dh | Packet end 1 |
14 | 0Ah | Packet end 2 |
Reply data (SENSOR -> HOST)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 00h | Command no. LSB (00h = REPLY_ACK) |
4 | 00h | Command no. MSB |
5 | 00h | Data length LSB (Zero length data for ACK reply) |
6 | 00h | Data length MSB |
7 | 01h | Check sum LSB |
8 | 00h | Check sum MSB |
9 | 0Dh | Packet end 1 |
10 | 0Ah | Packet end 2 |
Save Sensor Parameters
WRITE_REGISTER request (HOST -> SENSOR)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 04h | Command no. LSB(04h = WRITE_REGISTER) |
4 | 00h | Command no. MSB |
5 | 00h | Data length LSB (WRITE_REGISTER command = no data) |
6 | 00h | Data length MSB |
7 | 05h | Check sum LSB |
8 | 00h | Check sum MSB |
9 | 0Dh | Packet end 1 |
10 | 0Ah | Packet end 2 |
Reply data (SENSOR -> HOST)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 00h | Command no. LSB (00h = REPLY_ACK) |
4 | 00h | Command no. MSB |
5 | 00h | Data length LSB (Zero length data for ACK reply) |
6 | 00h | Data length MSB |
7 | 01h | Check sum LSB |
8 | 00h | Check sum MSB |
9 | 0Dh | Packet end 1 |
10 | 0Ah | Packet end 2 |
NOTE: WRITE_REGISTER command involves flash operation, which might result in delay ACK response
Read Sensor Status
GET request (HOST -> SENSOR)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 08h | Command no. LSB(08h = GET_SENSOR_STATUS) |
4 | 00h | Command no. MSB |
5 | 00h | Data length LSB (GET command = no data) |
6 | 00h | Data length MSB |
7 | 09h | Check sum LSB |
8 | 00h | Check sum MSB |
9 | 0Dh | Packet end 1 |
10 | 0Ah | Packet end 2 |
Reply data (SENSOR -> HOST)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 08h | Command no. LSB (08h = GET_SENSOR_STATUS) |
4 | 00h | Command no. MSB |
5 | 04h | Data length LSB (32-bit integer = 4 bytes) |
6 | 00h | Data length MSB |
7-10 | xxxxxxxxh | Sensor status data |
11 | xxh | Check sum LSB |
12 | xxh | Check sum MSB |
13 | 0Dh | Packet end 1 |
14 | 0Ah | Packet end 2 |
NOTE: Please refer to Appendix for details of reply data mapping
Set UART / RS232 Baudrate
SET request (HOST -> SENSOR)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 82h | Command no. LSB (82h = SET_UART_BAUDRATE) |
4 | 00h | Command no. MSB |
5 | 04h | Data length LSB (32-bit integer = 4 bytes) |
6 | 00h | Data length MSB |
7 | 00h | 921600 = 0x000E1000 |
8 | 10h | Â |
9 | 0Eh | Â |
10 | 00h | Â |
11 | A5h | Check sum LSB |
12 | 00h | Check sum MSB |
13 | 0Dh | Packet end 1 |
14 | 0Ah | Packet end 2 |
Reply data (SENSOR -> HOST)
Packet byte no. | Content | Description |
0 | 3Ah | Packet start |
1 | 01h | Sensor ID LSB (ID = 1) |
2 | 00h | Sensor ID MSB |
3 | 00h | Command no. LSB (00h = REPLY_ACK) |
4 | 00h | Command no. MSB |
5 | 00h | Data length LSB (Zero length data for ACK reply) |
6 | 00h | Data length MSB |
7 | 01h | Check sum LSB |
8 | 00h | Check sum MSB |
9 | 0Dh | Packet end 1 |
10 | 0Ah | Packet end 2 |
NOTE: Power cycle is required for baudrate settings to take effect
CANOpen and Sequential CAN Protocols
In CANOpen and sequential CAN transmission modes, two or more output words of measurement data can be assigned to a CAN channel. In sequential CAN mode the channel addressing can be individually controlled. In CANOpen mode, 4 TPDO (Transmission Data Process Object) messages and a heartbeat message are transmitted.
NOTE: In CANOpen mode a heartbeat message is transmitted with a frequency between 0.1 Hz and 2 Hz.
In CANOpen mode, the message base address is calculated in the following way:
CAN ID1 = Base CAN ID = Start ID + IMU ID
CAN ID2 = CAN ID1 + 100h
CAN ID3 = CAN ID2 + 100h
CAN ID4 = CAN ID3 + 100h
CAN ID5 = 700h + IMU ID
Note: In CANOpen mode, Start ID is fixed at 180h
In sequential CAN mode, the message base address is calculated in the following way:
CAN ID1 = Base CAN ID = Start ID + IMU ID
CAN ID2 = CAN ID1 + 1h
CAN ID3 = CAN ID2 + 1h
CAN ID4 = CAN ID3 + 1h
NOTE: In sequential CAN mode, Start ID is set to 514h (1300d) by default. This value can be changed via IG1Control interface
CAN Data Output Format
Each CAN message can be assigned multiple channels representing the sensor data. The number of assignable sensor data will depend on the data output precision, i.e. 32bit data or 16bit data output. By utilizing 4 CAN message with 16bit sensor data precision, the sensor can output a maximum of 16 different sensor data for a given instance.
CAN channel mapping (16bit data output)
CANOpen ID | Sequential CAN | Output data | Â | Â | Â |
181h | 515h | channel 1 | channel 2 | channel 3 | channel 4 |
281h | 516h | channel 5 | channel 6 | channel 7 | channel 8 |
381h | 517h | channel 9 | channel 10 | channel 11 | channel 12 |
481h | 518h | channel 13 | channel 14 | channel 15 | channel 16 |
701h | - |
| Â | Â | Â |
CAN channel mapping (32bit data output)
CANOpen ID | Sequential CAN | Output data | Â |
181h | 515h | channel 1 | channel 2 |
281h | 516h | channel 3 | channel 4 |
381h | 517h | channel 5 | channel 6 |
481h | 518h | channel 7 | channel 8 |
701h | - |
| Â |
CAN Mapping
Each channel can be assigned different sensor data by changing the CAN mapping via IG1Control. The table below summarizes the available sensor output data.
Mapping index | Data | Unit | 16bit data scaling factor |
0 | Not assigned | Â | Â |
1 | Raw Accelerometer X | g | 1000 |
2 | Raw Accelerometer Y | g | 1000 |
3 | Raw Accelerometer Z | g | 1000 |
4 | Calibrated Accelerometer X | g | 1000 |
5 | Calibrated Accelerometer Y | g | 1000 |
6 | Calibrated Accelerometer Z | g | 1000 |
7 | Raw GyroI X | dps or rad/s | 10 (dps), 100 (rad/s) |
8 | Raw GyroI Y | dps or rad/s | 10 (dps), 100 (rad/s) |
9 | Raw GyroI Z | dps or rad/s | 10 (dps), 100 (rad/s) |
10 | Raw GyroII X | dps or rad/s | 10 (dps), 100 (rad/s) |
11 | Raw GyroII Y | dps or rad/s | 10 (dps), 100 (rad/s) |
12 | Raw GyroII Z | dps or rad/s | 10 (dps), 100 (rad/s) |
13 | Bias calibrated GyroI X | dps or rad/s | 10 (dps), 100 (rad/s) |
14 | Bias calibrated GyroI Y | dps or rad/s | 10 (dps), 100 (rad/s) |
15 | Bias calibrated GyroI Z | dps or rad/s | 10 (dps), 100 (rad/s) |
16 | Bias calibrated GyroII X | dps or rad/s | 10 (dps), 100 (rad/s) |
17 | Bias calibrated GyroII Y | dps or rad/s | 10 (dps), 100 (rad/s) |
18 | Bias calibrated GyroII Z | dps or rad/s | 10 (dps), 100 (rad/s) |
19 | Alignment calibrated GyroI X | dps or rad/s | 10 (dps), 100 (rad/s) |
20 | Alignment calibrated GyroI Y | dps or rad/s | 10 (dps), 100 (rad/s) |
21 | Alignment calibrated GyroI Z | dps or rad/s | 10 (dps), 100 (rad/s) |
22 | Alignment calibrated GyroII X | dps or rad/s | 10 (dps), 100 (rad/s) |
23 | Alignment calibrated GyroII Y | dps or rad/s | 10 (dps), 100 (rad/s) |
24 | Alignment calibrated GyroII Z | dps or rad/s | 10 (dps), 100 (rad/s) |
25 | Raw magnetometer X | uT | 100 |
26 | Raw magnetometer Y | uT | 100 |
27 | Raw magnetometer Z | uT | 100 |
28 | Calibrated magnetometer X | uT | 100 |
29 | Calibrated magnetometer Y | uT | 100 |
30 | Calibrated magnetometer Z | uT | 100 |
31 | Angular Velocity X | dps or rad/s | 10 (dps), 100 (rad/s) |
32 | Angular Velocity Y | dps or rad/s | 10 (dps), 100 (rad/s) |
33 | Angular Velocity Z | dps or rad/s | 10 (dps), 100 (rad/s) |
34 | Quaternion W | Â | 10000 |
35 | Quaternion X | Â | 10000 |
36 | Quaternion Y | Â | 10000 |
37 | Quaternion Z | Â | 10000 |
38 | Euler X | deg or rad | 100 (deg), 10000 (rad) |
39 | Euler X | deg or rad | 100 (deg), 10000 (rad) |
40 | Euler Z | deg or rad | 100 (deg), 10000 (rad) |
41 | Linear Acceleration X | g | 1000 |
42 | Linear Acceleration Y | g | 1000 |
43 | Linear Acceleration Z | g | 1000 |
44 | Pressure | kPa | 100 |
45 | Temperature | °C | 100 |
Example
Assuming default sensor settings, the CAN bus settings and corresponding data output are shown below:
Here we can decode the data for CAN-ID 181h as follow:
181h | Byte [0:1] | Byte [2:3] | Byte [4:5] | Byte [6:7] |
---|---|---|---|---|
Byte | 22 FF | 39 00 | C9 03 | FA FF |
Integer value | -222 | 57 | 969 | -6 |
Corresponding data | Acc Calibrated X | Acc Calibrated Y | Acc Calibrated Z | GyroII Align. Calibrated X |
Scaled data | -0.222g | -0.057g | 0.969g | -0.6dps |
Like wise, the raw data can be decoded for 281h, 381h, 481h as follow:
281h | Byte [0:1] | Byte [2:3] | Byte [4:5] | Byte [6:7] |
---|---|---|---|---|
Byte | FF FF | 00 00 | 75 07 | 75 09 |
Integer value | -1 | 1 | 1909 | 2421 |
Corresponding data | GyroII Align. Calibrated Y | GyroII Align. Calibrated Z | Mag Calibrated X | Mag Calibrated Y |
Scaled data | -0.1dps | 0.1dps | 19.09uT | 24.21uT |
381h | Byte [0:1] | Byte [2:3] | Byte [4:5] | Byte [6:7] |
---|---|---|---|---|
Byte | DD 02 | 4F 01 | 0D 05 | 73 FB |
Integer value | 733 | 335 | 1293 | -1165 |
Corresponding data | Mag Calibrated Z | Euler X | Euler Y | Euler Z |
Scaled data | 7.33uT | 3.35deg | 12.93deg | -11.65deg |
481h | Byte [0:1] | Byte [2:3] | Byte [4:5] | Byte [6:7] |
---|---|---|---|---|
Byte | 96 26 | 93 01 | 42 04 | EF FB |
Integer value | 9878 | 403 | 1090 | -1041 |
Corresponding data | Quat W | Quat X | Quat Y | Quat Z |
Scaled data | 0.9878 | 0.0403 | 0.109 | -0.1041 |
Â
ASCII Output
LPMS-IG1 RS232 supports both LPBUS protocol and ASCII output via RS232 terminal. The output format can be set via SET_UART_FORMAT command. In ASCII output format, every data packet has a prefix Start character and End character at the end. Default start character is '$' and end character is '\n'. User can define both Start and End character via SET_UART_ASCII_CHARACTER command. Sensor data is streamed out in comma separated format.
Start character | Data 1 | , | Data 2 | , | ...... | , | Data n | End character |
Sensor data is in 16bit integer format. ASCII data should be divided by the scale factor as shown in the table below. For example, if the accelerometer X data is 234, the actual acceleration in g is 234/1000 = 0.234g.
Order | Format | Sensor data | Scale factor |
1 | UInt32 | Timestamp counter incremented in 500Hz. multiply by 0.002 to convert to seconds. | 500 |
2 | Vector3i16 | Raw accelerometer (g) | 1000 |
3 | Vector3i16 | Calibrated accelerometer (g) | 1000 |
4 | Vector3i16 | Raw GyroI (dps or rad/s) | dps: 1000 rad/s: 1000 |
5 | Vector3i16 | Raw GyroII (dps or rad/s) | dps: 1000 rad/s: 1000 |
6 | Vector3i16 | Static bias calibrated GyroI (dps or rad/s) | dps: 1000 rad/s: 1000 |
7 | Vector3i16 | Static bias calibrated GyroII (dps or rad/s) | dps: 1000 rad/s: 1000 |
8 | Vector3i16 | Alignment calibrated GyroI (dps or rad/s) | dps: 1000 rad/s: 1000 |
9 | Vector3i16 | Alignment calibrated GyroII (dps or rad/s) | dps: 1000 rad/s: 1000 |
10 | Vector3i16 | Raw magnetometer (uT) | 100 |
11 | Vector3i16 | Calibrated magnetometer (uT) | 100 |
12 | Vector3i16 | Angular Vel. (dps or rad/s) | dps: 1000 rad/s: 1000 |
13 | Vector4i16 | Quaternion | 100000 |
14 | Vector3i16 | Euler(degree or rad) | deg: 100 rad:10000 |
15 | Vector3i16 | Linear acceleration (g) | 1000 |
16 | Int16 | Reserved | Â |
17 | Int16 | Reserved | Â |
18 | Int16 | Temperature (°C) | 100 |
Â
Appendix
Firmware Function / Command List
Summary
Acknowledged / Not-acknowledged Identifiers | ||||
Identifier | Name | Parameter | Response | Default |
0(00h) | REPLY_ACK | Â | Â | Â |
1(01h) | REPLY_NACK | Â | Â | Â |
Â
Register Value Save and Reset Command | ||||
Identifier | Name | Parameter | Response | Default |
4 (04h) | WRITE_REGISTERS | NONE | ACK/NACK | Â |
5 (05h) | RESTORE_FACTORY_VALUE | NONE | ACK/NACK | Â |
Â
Mode Switching Commands | Â | Â | Â | Â |
Identifier | Name | Parameter | Response | Default |
6 (06h) | GOTO_COMMAND_MODE | NONE | ACK/NACK | Â |
7 (07h) | GOTO_STREAM_MODE | NONE | ACK/NACK | Â |
Â
Sensor Status Command | Â | Â | Â | Â |
Identifier | Name | Parameter | Response | Default |
8 (08h) | GET_SENSOR_STATUS | NONE | UInt32 | 1 |
Â
Get Data Commands | Â | Â | Â | Â |
Identifier | Name | Parameter | Response | Default |
9 (09h) | GET_IMU_DATA | NONE | Â | Â |
10 (0Ah) | GET_GPS_DATA | NONE | Â | Â |
Â
Device Info | Â | Â | Â | Â |
Identifier | Name | Parameter | Response | Default |
20 (14h) | GET_SENSOR_MODEL | NONE | Char[24] | Â |
21 (15h) | GET_FIRMWARE_INFO | NONE | Char[24] | Â |
22 (16h) | GET_SERIAL_NUMBER | NONE | Char[24] | Â |
23(17h) | GET_FILTER_VERSION | NONE | Char[24] | Â |
Â
Data Transmission Commands | Â | Â | Â | Â |
Identifier | Name | Parameter | Response | Default |
30 (1Eh) | SET_IMU_TRANSMIT_DATA | UInt32 | ACK/NACK | Â |
31 (1Fh) | GET_IMU_TRANSMIT_DATA | NONE | UInt32 | Â |
Â
IMU ID Settings Commands | Â | Â | Â | Â |
Identifier | Name | Parameter | Response | Default |
32 (20h) | SET_IMU_ID | Int32 | ACK/NACK | Â |
33 (21h) | GET_IMU_ID | NONE | Int32 | 1 |
Â
Stream Frequency Commands | ||||
Identifier | Name | Parameter | Response | Default |
34 (22h) | SET_STREAM_FREQ | Int32 | ACK/NACK | Â |
35 (23h) | GET_STREAM_FREQ | NONE | Int32 | 100 |
Â
Deg/Rad Output Commands | Â | Â | Â | Â |
Identifier | Name | Parameter | Response | Default |
36 (24h) | SET_DEGRAD_OUTPUT | Int32 | ACK/NACK | Â |
37 (25h) | GET_DEGRAD_OUTPUT | NONE | Int32 | 0 |
Â
Reference Setting and Offset Reset Commands | Â | |||
Identifier | Name | Parameter | Response | Default |
38 (26h) | SET_ORIENTATION_OFFSET | Int32 | ACK/NACK | Â |
39 (27h) | RESET_ORIENTATION_OFFSET | NONE | ACK/NACK | Â |
Â
Accelerometer Settings Commands | Â | ||||
Identifier | Name | Parameter | Response | Default | Â |
50 (32h) | SET_ACC_RANGE | Int32 | ACK/NACK | Â | Â |
51 (33h) | GET_ACC_RANGE | NONE | Int32 | 4g | Â |
Â
Gyroscope Settings Commands | ||||
Identifier | Name | Parameter | Response | Default |
60 (3Ch) | SET_GYR_RANGE | Int32 | ACK/NACK | |
61 (3Dh) | GET_GYR_RANGE | NONE | Int32 | 500dps |
62 (3Eh) | START_GYR_CALIBRATION | NONE | ACK/NACK | |
64 (40h) | SET_ENABLE_GYR_AUTOCALIBRATION | Int32 | ACK/NACK | |
65 (41h) | GET_ENABLE_GYR_AUTOCALIBRATION | NONE | Int32 | 1 |
66(42h) | SET_GYR_THRESHOLD | Float32 | ACK/NACK | Â |
67 (43h) | GET_GYR_THRESHOLD | NONE | Float32 | 0 |
Â
Magnetometer Settings Commands | ||||
Identifier | Name | Parameter | Response | Default |
70 (46h) | SET_MAG_RANGE | Int32 | ACK/NACK | Â |
71 (47h) | GET_MAG_RANGE | NONE | Int32 | 8 Gauss |
84 (54h) | START_MAG_CALIBRATION | NONE | ACK/NACK | Â |
85 (55h) | STOP_MAG_CALIBRATION | NONE | ACK/NACK | Â |
86 (56h) | SET_MAG_CALIBRATION_TIMEOUT | Int32 | ACK/NACK | Â |
87 (57h) | GET_MAG_CALIBRATION_TIMEOUT | NONE | Int32 | 20s |
Â
Filter Settings Command | Â | Â | Â | Â |
Identifier | Name | Parameter | Response | Default |
90 (5Ah) | SET_FILTER_MODE | Int32 | ACK/NACK | Â |
91 (5Bh) | GET_FILTER_MODE | NONE | Int32 | 1 |
Â
CAN Settings Command | Â | Â | Â | Â |
Identifier | Name | Parameter | Response | Default |
110 (6Eh) | SET_CAN_START_ID | Int32 | ACK/NACK | Â |
111 (6Fh) | GET_CAN_START_ID | NONE | Int32 | 0x514 |
112 (70h) | SET_CAN_BAUDRATE | Int32 | ACK/NACK | Â |
113 (71h) | GET_CAN_BAUDRATE | NONE | Int32 | 500 |
114 (72h) | SET_CAN_DATA_PRECISION | Int32 | ACK/NACK | Â |
115 (73h) | GET_CAN_DATA_PRECISION | NONE | Int32 | 0 |
116 (74h) | SET_CAN_MODE | Int32 | ACK/NACK | Â |
117 (75h) | GET_CAN_MODE | NONE | Int32 | 0 |
118 (76h) | SET_CAN_MAPPING | Int32[16] | ACK/NACK | Â |
119 (77h) | GET_CAN_MAPPING | NONE | Int32[16] | Â |
120 (78h) | SET_CAN_HEARTBEAT | Int32 | ACK/NACK | Â |
121 (79h) | GET_CAN_HEARTBEAT | NONE | Int32 | 1 |
Â
UART / RS232 Settings Command | ||||
Identifier | Name | Parameter | Response | Default |
130 (82h) | SET_UART_BAUDRATE | Int32 | ACK/NACK | Â |
131 (83h) | GET_UART_BAUDRATE | NONE | Int32 | 921600 |
132 (84h) | SET_UART_FORMAT | Int32 | ACK/NACK | Â |
133 (85h) | GET_UART_FORMAT | NONE | Int32 | 0 |
134 (86h) | SET_UART_ASCII_CHARACTER | Int8[4] | ACK/NACK | Â |
135 (87h) | GET_UART_ASCII_CHARACTER | NONE | Int8[4] | 0x24 0x0D 0x00 0x00 |
136 (88h) | SET_LPBUS_DATA_PRECISION | Int32 | ACK/NACK | Â |
137 (89h) | GET_LPBUS_DATA_PRECISION | NONE | Int32 | 1 |
Â
Sensor Data Timestamp Manipulation | Â | |||
Identifier | Name | Parameter | Response | Default |
152 (98h) | SET_TIMESTAMP | Int32 | ACK/NACK | Â |
Â
GPS Data Transmission Commands | Â | |||
Identifier | Name | Parameter | Response | Default |
160 (A0h) | SET_GPS_TRANSMIT_DATA | Int32[2] | ACK/NACK | Â |
161 (A1h) | GET_GPS_TRANSMIT_DATA | NONE | Int32[2] | Â |
162 (A2h) | SAVE_GPS_STATE | NONE | ACK/NACK | Â |
163 (A3h) | CLEAR_GPS_STATE | NONE | ACK/NACK | Â |
Acknowledged and Not-acknowledged Identifiers
Identifier | 0(0x00) |
Name | REPLY_ACK |
Description | Confirms a successful SET command. |
Â
Identifier | 1(0x01) |
Name | REPLY_NACK |
Description | Reports an error during processing a SET command. |
Register Value Save and Reset Command
Identifier | 4 (0x04) |
Name | WRITE_REGISTERS |
Description | Write the currently set parameters to flash memory. |
Parameter | NONE |
Response | ACK (success) or NACK (error |
Â
Identifier | 5 (0x05) |
Name | RESTORE_FACTORY_VALUE |
Description | Reset the LPMS parameters to factory default values. Please note that upon issuing this command your currently set parameters will be erased. |
Parameter | NONE |
Response | ACK (success) or NACK (error) |
Mode Switching Commands
Identifier | 6 (0x06) |
Name | GOTO_COMMAND_MODE |
Description | Switch to command mode. In command mode the user can issue commands to the firmware to perform calibration, set parameters etc. |
Parameter | NONE |
Response: | ACK (success) or NACK (error) |
Identifier | 7 (0x07) |
Name | GOTO_STREAM_MODE |
Description | Switch to streaming mode. In this mode data is continuously streamed from the sensor, and some commands cannot be performed until the sensor receives the GOTO_COMMAND_MODE command. |
Parameter | NONE |
Response | ACK (success) or NACK (error) |
Sensor Status Command
Identifier | 8 (0x08) |
Name | GET_SENSOR_STATUS |
Description | Get the current sensor status |
Parameter | NONE |
Response | Int32 |
Sensor status | Identifier |
Command Mode | 0 |
Streaming Mode | 1 |
Get Data Commands
Identifier | 9(0x09) |
Name | GET_IMU_DATA |
Description | Get the sensor data |
Parameter | NONE |
Response |
Â
Identifier | 10(0x0A) |
Name | GET_GPS_DATA |
Description | Get the GPS data |
Parameter | NONE |
Response |
Device Info Commands
Identifier | 20 (0x14) |
Name | GET_SENSOR_MODEL |
Description | Get the sensor model information |
Parameter | NONE |
Response | Char[24] |
Â
Identifier | 21 (0x15) |
Name | GET_FIRMWARE_INFO |
Description | Get the firmware information |
Parameter | NONE |
Response | Char[24] |
Â
Identifier | 22 (0x16) |
Name | GET_SERIAL_NUMBER |
Description | Get the serial number information |
Parameter | NONE |
Response | Char[24] |
Â
Identifier | 23 (0x17) |
Name | GET_FILTER_VERSION |
Description | Get the internal filter version information |
Parameter | NONE |
Response | Char[24] |
Data Transmission Commands
Identifier | 30 (0x1E) |
Name | SET_IMU_TRANSMIT_DATA |
Description | Set the current transmitted data of sensor |
Parameter | Int32 |
Bit | Reported State / Parameter |
0 | Accelerometer raw data transmission enabled |
1 | Accelerometer calibrated data transmission enabled |
2 | GyroI raw data transmission enabled |
3 | GyroII raw data transmission enabled |
4 | GyroI bias calibrated data transmission enabled |
5 | GyroII bias calibrated data transmission enabled |
6 | GyroI alignment calibrated data transmission enabled |
7 | GyroII alignment calibrated data transmission enabled |
8 | Magnetometer raw data transmission enabled |
9 | Magnetometer calibrated data transmission enabled |
10 | Angular velocity transmission enabled |
11 | Quaternion orientation transmission enabled |
12 | Euler angle data transmission enabled |
13 | LinAcc data transmission enabled |
14 | Reserved |
15 | Reserved |
16 | Temperature data transmission enabled |
17-31 | Reserved |
Response | ACK (success) or NACK (error) |
Â
Identifier | 31 (0x1F) |
Name | GET_IMU_TRANSMIT_DATA |
Description | Get the current transmitted data from sensor |
Parameter | NONE |
Response | Int32 |
Bit | Reported State / Parameter |
0 | Accelerometer raw data transmission enabled |
1 | Accelerometer calibrated data transmission enabled |
2 | GyroI raw data transmission enabled |
3 | GyroII raw data transmission enabled |
4 | GyroI bias calibrated data transmission enabled |
5 | GyroII bias calibrated data transmission enabled |
6 | GyroI alignment calibrated data transmission enabled |
7 | GyroII alignment calibrated data transmission enabled |
8 | Magnetometer raw data transmission enabled |
9 | Magnetometer calibrated data transmission enabled |
10 | Angular velocity transmission enabled |
11 | Quaternion orientation transmission enabled |
12 | Euler angle data transmission enabled |
13 | LinAcc data transmission enabled |
14 | Reserved |
15 | Reserved |
16 | Temperature data transmission enabled |
17-31 | Reserved |
IMU ID Setting Command
Identifier | 32 (0x20) |
Name | SET_IMU_ID |
Description | Set sensor ID |
Parameter | Int32 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 33 (0x21) |
Name | GET_IMU_ID |
Description | Get sensor ID |
Parameter | None |
Response | Int32 |
Stream Frequency Commands
Identifier | 34 (0x22) |
Name | SET_STREAM_FREQ |
Description | Set the current streaming frequency |
Parameter | Int32 |
Frequency (Hz) | Identifier |
5 | 5 |
10 | 10 |
50 | 50 |
100 | 100 |
250 | 250 |
500 | 500 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 35 (0x23) |
Name | GET_STREAM_FREQ |
Description | Get the current streaming frequency |
Parameter | NONE |
Response | Int32 |
Frequency (Hz) | Identifier |
5 | 5 |
10 | 10 |
50 | 50 |
100 | 100 |
250 | 250 |
500 | 500 |
Deg/Rad Output Commands
Identifier | 36 (0x24) |
Name | SET_DEGRAD_OUTPUT |
Description | Set the current output unit of angle and rate |
Parameter | Int32 |
Output unit | Identifier |
degree or degree per second | 0 |
radian or radian per second | 1 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 37 (0x25) |
Name | GET_DEGRAD_OUTPUT |
Description | Get the current output unit of angle and rate |
Parameter | NONE |
Response | Int32 |
Output unit | Identifier |
degree or degree per second | 0 |
radian or radian per second | 1 |
Reference Setting and Offset Reset Command
Identifier | 38 (0x26) |
Name | SET_ORIENTATION_OFFSET |
Description | Set the orientation offset (unity quaternion). |
Parameter | Int32 |
Offset Mode | Identifier |
Object | 0 |
Heading | 1 |
Alignment | 2 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 39 (0x27) |
Name | RESET_ORIENTATION_OFFSET |
Description | Reset the orientation offset to 0 (unity quaternion). |
Parameter | NONE |
Response | ACK (success) or NACK (error) |
Accelerometer Settings Command
Identifier | 50 (0x32) |
Name | SET_ACC_RANGE |
Description | Set the current range of the accelerometer |
Parameter | Int32 |
Range | Identifier |
2g | 2 |
4g | 4 |
8g | 8 |
16g | 16 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 51 (0x33) |
Name | GET_ACC_RANGE |
Description | Get the current range of the accelerometer |
Parameter | NONE |
Response | Int32 |
Range | Identifier |
2g | 2 |
4g | 4 |
8g | 8 |
16g | 16 |
Gyroscope Settings Command
Identifier | 60 (0x3C) |
Name | SET_GYR_RANGE |
Description | Set the current range of the gyroscope |
Parameter | Int32 |
Range (deg/s) | Identifier |
400 | 400 |
1000 | 1000 |
2000 | 2000 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 61 (0x3D) |
Name | GET_GYR_RANGE |
Description | Get current gyroscope range. |
Parameter | NONE |
Response | Int32 |
Range (deg/s) | Identifier |
400 | 400 |
1000 | 1000 |
2000 | 2000 |
Identifier | 62 (0x3E) |
Name | START_GYR_CALIBRATION |
Description | Start gyro static bias calibration. |
Parameter | NONE |
Response | ACK (success) or NACK (error) |
Â
Identifier | 64 (0x40) |
Name | SET_ENABLE_GYR_AUTOCALIBRATION |
Description | Enable / Disable gyro autocalibration. |
Parameter | Int32 |
Function | Identifier |
ENABLE_GYR_AUTOCAL | 1 |
DISABLE_GYR_AUTOCAL | 0 |
Response: | ACK (success) or NACK (error) |
Â
Identifier | 65 (0x41) |
Name | GET_ENABLE_GYR_AUTOCALIBRATION |
Description | Get gyro autocalibration status. |
Parameter | NONE |
Response | Int32 |
Function | Identifier |
ENABLE_GYR_AUTOCAL | 1 |
DISABLE_GYR_AUTOCAL | 0 |
Â
Identifier | 66 (0x42) |
Name | SET_GYR_THRESHOLD |
Description | Set the gyroscope threshold which can be used to suppress noise or vibrations that might impact the sensor measurements. |
Parameter | Float32 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 67 (0x43) |
Name | GET_GYR_THRESHOLD |
Description | Get the gyroscope threshold. |
Parameter | NONE |
Response | Float32 |
Magnetometer Settings Command
Identifier | 70 (0x46) |
Name | SET_MAG_RANGE |
Description | Set the current range of the gyroscope |
Parameter | Int32 |
Range | Identifier |
2 Gauss | 2 |
8 Gauss | 8 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 71 (0x47) |
Name | GET_MAG_RANGE |
Description | Get current magnetometer range. |
Parameter | NONE |
Response | Int32 |
Range | Identifier |
2 Gauss | 2 |
8 Gauss | 8 |
Â
Identifier | 84 (0x54) |
Name | START_MAG_CALIBRATION |
Description | Start calibration of magnetometer. |
Parameter | NONE |
Response | ACK (success) or NACK (error) |
Â
Identifier | 85 (0x55) |
Name | STOP_MAG_CALIBRATION |
Description | Stop calibration of magnetometer. |
Parameter | NONE |
Response | ACK (success) or NACK (error) |
Â
Identifier | 86 (0x56) |
Name | SET_MAG_CALBRATION_TIMEOUT |
Description | Set the time of the magnetometer calibration. |
Parameter | Int32 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 87 (0x57) |
Name | GET_MAG_CALBRATION_TIMEOUT |
Description | Get the time of the magnetometer calibration. |
Parameter | NONE |
Response | Int32 |
Filter Settings Command
Identifier | 90 (0x5A) |
Name | SET_ FILTER_MODE |
Description | Set the sensor filter mode |
Parameter | Int32 |
Mode | Value |
Gyroscope(Only) | 0 |
Accelerometer + gyroscope (Kalman filter) | 1 |
Accelerometer + gyroscope + Magnetometer(Kalman filter) | 2 |
Accelerometer + gyroscope (DCM filter) | 3 |
Accelerometer + gyroscope + Magnetometer(DCM filter) | 4 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 91 (0x5B) |
Name | GET_ FILTER_MODE |
Description | Get the sensor filter mode |
Parameter | NONE |
Response | Int32 |
Mode | Value |
Gyroscope(Only) | 0 |
Accelerometer + gyroscope (Kalman filter) | 1 |
Accelerometer + gyroscope + Magnetometer(Kalman filter) | 2 |
Accelerometer + gyroscope (DCM filter) | 3 |
Accelerometer + gyroscope + Magnetometer(DCM filter) | 4 |
CAN Settings Command
Identifier | 110 (0x6E) |
Name | SET_CAN_START_ID |
Description | Set the CAN sequential start ID |
Parameter | Int32 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 111 (0x6F) |
Name | GET_CAN_START_ID |
Description | Get the CAN sequential start ID |
Parameter | NONE |
Response | Int32 |
Â
Identifier | 112 (0x70) |
Name | SET_CAN_BAUDRATE |
Description | Set the current can baudrate |
Parameter | Int32 |
Baud rate | Identifier |
125K | 125 |
250K | 250 |
500K | 500 |
800K | 800 |
1M | 1000 |
Response: | ACK (success) or NACK (error) |
Â
Identifier | 113 (0x71) |
Name | GET_CAN_BAUDRATE |
Description | Get the current can baudrate |
Parameter | NONE |
Response | Int32 |
Baud rate | Identifier |
125K | 125 |
250K | 250 |
500K | 500 |
800K | 800 |
1M | 1000 |
Â
Identifier | 114 (0x72) |
Name | SET_CAN_DATA_PRECISION |
Description | Set the CAN output data precision |
Parameter | Int32 |
Data Precision | Identifier |
16bit Fixed point | 0 |
32bit Float point | 1 |
Response: | ACK (success) or NACK (error) |
Â
Identifier | 115 (0x73) |
Name | GET_CAN_DATA_PRECISION |
Description | Get the CAN output data precision |
Parameter | NONE |
Response: | Int32 |
Data Precision | Identifier |
16bit Fixed point | 0 |
32bit Float point | 1 |
Â
Identifier | 117 (0x75) |
Name | GET_CAN_MODE |
Description | Get the current can mode |
Parameter | NONE |
Response | Int32 |
Mode | Identifier |
CANopen | 0 |
Sequential can | 1 |
Â
Identifier | 118 (0x76) | Â |
Name | SET_CAN_MAPPING | Â |
Description | Set the current transmitted data of each can channel | Â |
Parameter | Int32[16] | Â |
Int32[] | CAN Channel | Identifier |
Int32[0] | Channel1 | Mapping index |
Int32[1] | Channel2 | Mapping index |
Int32[2] | Channel3 | Mapping index |
… | … | … |
Int32[15] | Channel16 | Mapping index |
Response | ACK (success) or NACK (error) | Â |
NOTE: See here for CAN mapping details
Â
Identifier | 119 (0x77) | Â |
Name | GET_CAN_MAPPING | Â |
Description | Get the current transmitted data of each can channel | Â |
Parameter | NONE | Â |
Response | Int32[16] | Â |
Int32[] | CAN Channel | Identifier |
Int32[0] | Channel1 | Mapping index |
Int32[1] | Channel2 | Mapping index |
Int32[2] | Channel3 | Mapping index |
… | … | … |
Int32[15] | Channel16 | Mapping |
NOTE: See here for CAN mapping details
Â
Identifier | 120 (0x78) |
Name | SET_CAN_HEARTBEAT |
Description | Set the CANopen heartbeat |
Parameter | Int32 |
Period | Identifier |
0.5s | 0 |
1s | 1 |
2s | 2 |
5s | 5 |
10s | 10 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 121 (0x79) |
Name | GET_CAN_HEARTBEAT |
Description | Get the CANopen heartbeat |
Parameter | NONE |
Response | Int32 |
period | Identifier |
0.5s | 0 |
1s | 1 |
2s | 2 |
5s | 5 |
10s | 10 |
UART / RS232 Settings Command
Identifier | 130 (0x82) |
Name | SET_UART_BAUDRATE |
Description | Set the current UART / RS232 baudrate |
Parameter | Int32 |
Baud rate | Identifier |
115200 | 115200 |
230400 | 230400 |
256000 | 256000 |
460800 | 460800 |
921600 | 921600 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 131 (0x83) |
Name | GET_UART_BAUDRATE |
Description | Get the current UART / RS232 baudrate |
Parameter | NONE |
Response | Int32 |
Baud rate | Identifier |
115200 | 115200 |
230400 | 230400 |
256000 | 256000 |
460800 | 460800 |
921600 | 921600 |
Identifier | 132 (0x84) |
Name | SET_UART_FORMAT |
Description | Set the UART / RS232 output format |
Parameter | Int32 |
Format | Identifier |
LPBUS | 0 |
ASCII | 1 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 133 (0x85) |
Name | GET_UART_FORMAT |
Description | Get the UART / RS232 output format |
Parameter | NONE |
Response | Int32 |
Format | Identifier |
LPBUS | 0 |
ASCII | 1 |
Â
Identifier | 134 (0x86) |
Name | SET_UART_ASCII_CHARACTER |
Description | Set the ASCII start/stop character |
Parameter | Int8[4] |
Byte | Parameter |
0 | Start character |
1 | stop character |
2 | Reserved |
3 | Reserved |
Response | ACK (success) or NACK (error) |
Â
Identifier | 135 (0x87) |
Name | GET_UART_ASCII_CHARACTER |
Description | Get the ASCII start/stop character |
Parameter | NONE |
Response | Int8[4] |
Byte | Parameter |
0 | Start character |
1 | stop character |
2 | Reserved |
3 | Reserved |
Â
Identifier | 136 (0x88) |
Name | SET_LPBUS_DATA_PRECISION |
Description | Set the current UART / RS232 output data precision |
Parameter | Int32 |
Data Precision | Identifier |
16bit Fixed point | 0 |
32bit Float point | 1 |
Response | ACK (success) or NACK (error) |
Â
Identifier | 137 (0x89) |
Name | GET_LPBUS_DATA_PRECISION |
Description | Get the current UART / RS232 output data precision |
Parameter | NONE |
Response | Int32 |
Data Precision | Identifier |
16bit Fixed point | 0 |
32bit Float point | 1 |
Sensor Data Timestamp Manipulation
Identifier | 152 (0x98) |
Name | SET_TIMESTAMP |
Description | Set the sensor data timestamp |
Parameter | Int32 |
Response | ACK (success) or NACK (error) |
GPS Data Transmission Commands
Identifier | 160 (0xA0) | Â |
Name | SET_GPS_TRANSMIT_DATA | Â |
Description | Set the current transmitted data of GPS | Â |
Parameter | Int32[2] | Â |
Int32[0] | Bit | Reported State / Parameter |
0 | GPS NAV-PVT iTOW transmission enabled | |
1 | GPS NAV-PVT year transmission enabled | |
2 | GPS NAV-PVT month transmission enabled | |
3 | GPS NAV-PVT day transmission enabled | |
4 | GPS NAV-PVT hour transmission enabled | |
5 | GPS NAV-PVT min transmission enabled | |
6 | GPS NAV-PVT sec transmission enabled | |
7 | GPS NAV-PVT valid transmission enabled | |
8 | GPS NAV-PVT tAcc transmission enabled | |
9 | GPS NAV-PVT nano transmission enabled | |
10 | GPS NAV-PVT fixType transmission enabled | |
11 | GPS NAV-PVT flags transmission enabled | |
12 | GPS NAV-PVT flags2 transmission enabled | |
13 | GPS NAV-PVT numSV transmission enabled | |
14 | GPS NAV-PVT longitude transmission enabled | |
15 | GPS NAV-PVT latitude transmission enabled | |
16 | GPS NAV-PVT height transmission enabled | |
17 | GPS NAV-PVT hMSL transmission enabled | |
18 | GPS NAV-PVT hAcc transmission enabled | |
19 | GPS NAV-PVT vAcc transmission enabled | |
20 | GPS NAV-PVT velN transmission enabled | |
21 | GPS NAV-PVT velE transmission enabled | |
22 | GPS NAV-PVT velD transmission enabled | |
23 | GPS NAV-PVT gSpeed transmission enabled | |
24 | GPS NAV-PVT headMot transmission enabled | |
25 | GPS NAV-PVT sAcc transmission enabled | |
26 | GPS NAV-PVT headAcc transmission enabled | |
27 | GPS NAV-PVT pDOP transmission enabled | |
28 | GPS NAV-PVT headVeh transmission enabled | |
 | 29-31 | Reserved |
Int32[1] | Bit | Reported State / Parameter |
0 | GPS NAV-ATT iTOW transmission enabled | |
1 | GPS NAV-ATT version transmission enabled | |
2 | GPS NAV-ATT roll transmission enabled | |
3 | GPS NAV-ATT pitch transmission enabled | |
4 | GPS NAV-ATT heading transmission enabled | |
5 | GPS NAV-ATT accRoll transmission enabled | |
6 | GPS NAV-ATT accPitch transmission enabled | |
7 | GPS NAV-ATT accHeading transmission enabled | |
8 | GPS ESF-STATUS iTOW transmission enabled | |
9 | GPS ESF-STATUS version transmission enabled | |
10 | GPS ESF-STATUS initStatus1 transmission enabled | |
11 | GPS ESF-STATUS initStatus2 transmission enabled | |
12 | GPS ESF-STATUS fusionMode transmission enabled | |
13 | GPS ESF-STATUS numSens transmission enabled | |
14 | GPS ESF-STATUS sensStatus transmission enabled | |
 | 15-31 | Reserved |
Response: | ACK (success) or NACK (error) | Â |
Â
Identifier | 161 (0xA1) | Â |
Name | GET_GPS_TRANSMIT_DATA | Â |
Description | Get the current transmitted data of GPS | Â |
Parameter | NONE | Â |
Response | Int32[2] | Â |
Int32[0] | Bit | Reported State / Parameter |
0 | GPS NAV-PVT iTOW transmission enabled | |
1 | GPS NAV-PVT year transmission enabled | |
2 | GPS NAV-PVT month transmission enabled | |
3 | GPS NAV-PVT day transmission enabled | |
4 | GPS NAV-PVT hour transmission enabled | |
5 | GPS NAV-PVT min transmission enabled | |
6 | GPS NAV-PVT sec transmission enabled | |
7 | GPS NAV-PVT valid transmission enabled | |
8 | GPS NAV-PVT tAcc transmission enabled | |
9 | GPS NAV-PVT nano transmission enabled | |
10 | GPS NAV-PVT fixType transmission enabled | |
11 | GPS NAV-PVT flags transmission enabled | |
12 | GPS NAV-PVT flags2 transmission enabled | |
13 | GPS NAV-PVT numSV transmission enabled | |
14 | GPS NAV-PVT longitude transmission enabled | |
15 | GPS NAV-PVT latitude transmission enabled | |
16 | GPS NAV-PVT height transmission enabled | |
17 | GPS NAV-PVT hMSL transmission enabled | |
18 | GPS NAV-PVT hAcc transmission enabled | |
19 | GPS NAV-PVT vAcc transmission enabled | |
20 | GPS NAV-PVT velN transmission enabled | |
21 | GPS NAV-PVT velE transmission enabled | |
22 | GPS NAV-PVT velD transmission enabled | |
23 | GPS NAV-PVT gSpeed transmission enabled | |
24 | GPS NAV-PVT headMot transmission enabled | |
25 | GPS NAV-PVT sAcc transmission enabled | |
26 | GPS NAV-PVT headAcc transmission enabled | |
27 | GPS NAV-PVT pDOP transmission enabled | |
28 | GPS NAV-PVT headVeh transmission enabled | |
 | 29-31 | Reserved |
Int32[1] | Bit | Reported State / Parameter |
0 | GPS NAV-ATT iTOW transmission enabled | |
1 | GPS NAV-ATT version transmission enabled | |
2 | GPS NAV-ATT roll transmission enabled | |
3 | GPS NAV-ATT pitch transmission enabled | |
4 | GPS NAV-ATT heading transmission enabled | |
5 | GPS NAV-ATT accRoll transmission enabled | |
6 | GPS NAV-ATT accPitch transmission enabled | |
7 | GPS NAV-ATT accHeading transmission enabled | |
8 | GPS ESF-STATUS iTOW transmission enabled | |
9 | GPS ESF-STATUS version transmission enabled | |
10 | GPS ESF-STATUS initStatus1 transmission enabled | |
11 | GPS ESF-STATUS initStatus2 transmission enabled | |
12 | GPS ESF-STATUS fusionMode transmission enabled | |
13 | GPS ESF-STATUS numSens transmission enabled | |
14 | GPS ESF-STATUS sensStatus transmission enabled | |
 | 15-31 | Reserved |
Â
Identifier | 162 (0xA2) |
Name | SAVE_GPS_STATE |
Description | Save current GPS state to the flash of GPS module |
Parameter | NONE |
Response: | ACK (success) or NACK (error) |
Â
Identifier | 163 (0xA3) |
Name | CLEAR_GPS_STATE |
Description | Clear flash of GPS module |
Parameter | NONE |
Response: | ACK (success) or NACK (error) |
Â