The NIMU is a compact, high-performance Inertial Measurement Unit (IMU) system powered by the BNO085 sensor. It delivers rich 9-DoF sensor fusion output, including orientation, acceleration, and motion vectors. Designed for seamless integration into robotic and motion-control systems, the NIMU communicates via a built-in CAN interface and connects easily to the NLink Adapter, providing full control and effortless configuration through our intuitive Software SDKs.
Specifications
- 12-48 V DC Input Voltage
- On-board integrated BNO085 (Bosch) sensor.
- Delivers rich 9-DoF sensor fusion output including orientation, acceleration, and motion vectors.
- CAN 2.0B @500kbps (1Mbps Comming soon).
- Has Daisy Chainable CAN Bus Interface. Provides hassle free connection with other CAN components including our NMotion Components.
- Can be easily configured & controlled by using our Python / C++ SDKs and NMotion CLI Tool.
Hardware
LED Status Indications
The NIMU device incorporates three LEDs to indicate various operational states:
- Power LED: Turns ON when the board is powered ON.
- CAN Communication LED: Flashes to signify ongoing CAN bus communication (both incoming and outgoing data).
- Error LED: Turns ON when an error is encountered, and turns OFF when the errors are cleared
Power Interface
The board supports a wide input voltage range of 12–48 V and uses terminal blocks for power connection.
- DC power input pins can't tolerate reverse polarity, please verify all power connections before energizing the NIMU device.
- DC power supply line can't tolerate voltages above 56 V.
- Never hot plug NIMU device, make sure that the power connections are connected before turning on the power.
CAN Bus Interface
The board features a daisy chainable CAN bus interface with two CAN ports. One port is designated for incoming CAN bus connections from the main device, while the other port is intended for connecting to the subsequent device in the bus chain.
A 2-pin JST PH connector with a 2mm pitch is suitable for both CAN ports.
If NIMU is the last component in the CAN bus chain, ensure that the termination resistor is in ON position to enable the termination resistor. Failure to do so may result in communication errors.
Drawing
All dimensions are in mm
Configuration
The NIMU can be controlled via a CAN bus interface. When connected through the NLink Adapter, it also supports USB communication, enabling configuration and control using the NMotion CLI Tool and the NMotion Transport Library.
API functions for interacting with the NIMU are available in the NIMU API Documentation.
CAN Bus Configuration
The NIMU device utilizes a daisy chainable CAN bus for control. If multiple devices are present on the CAN bus, ensure that a unique CAN Node ID is assigned to the device. The allowable values of CAN Node ID is in the range of 0 to 127. The default CAN Node ID is 0 and must be modified to avoid communication conflicts.
The API functions involved in this configuration are as follows:
Data Configuration
The NIMU’s output data streams can be selectively enabled or disabled using dedicated API functions. This allows users to optimize bandwidth and processing based on application needs. These functions allow fine-grained control over which sensor fusion outputs are transmitted over CAN and made available via the SDK.
All data streams can be managed individually, including:
- Linear Acceleration
- Acceleration
- Rotation Vector
- Euler Angles
- Gravity Vector
- Gyroscope (Calibrated / Uncalibrated)
- Magnetometer
- Raw Sensor Data from Accelerometer, Gyroscope and Magnetometer
Configuration changes take effect immediately and persist until the device is reset or disabled via corresponding API function.
Raw data streams are accessible only after they have been explicitly enabled.
The API functions involved in this configuration are as follows:
Operation
Getting Datapoints
The NIMU provides real-time access to a range of motion and orientation parameters. These values are updated continuously and transmitted over the CAN bus, making them accessible to control systems, real-time algorithms, or logging frameworks. Sensor data from the NIMU can be accessed by first enabling the desired data stream using the corresponding enable function (e.g., enableEulerAngles(), enableAccelerometer()..etc), after which the relevant API function (such as getEulerAngles(), getLinearAcceleration(), etc.) can be used to retrieve the data. For raw sensor outputs like getRawGyroscope(), the corresponding base stream (e.g., enableGyroscope()) must be enabled first to ensure proper data flow.
The API functions involved in this configuration are as follows:
API Reference
C / C++ API Reference
IMU.IMU()
IMU::IMU(uint32_t device_id, Interface *interface)
Description
Construct a new IMU object.
Parameters
| Datatype | Variable | Description |
|---|
uint32_t | device_id | Device ID for the IMU device |
Interface* | interface | CAN Interface object connected to the IMU |
IMU.getNodeId()
ret_status_t IMU::getNodeId(uint32_t *node_id)
Description
Get current CAN Node ID of NIMU.
Parameters
| Datatype | Variable | Description |
|---|
uint32_t * | node_id | Pointer to the variable to which the current CAN Node ID of the NIMU is to be saved. |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.setNodeId()
ret_status_t IMU::setNodeId(uint32_t id)
Description
Set the node id for the IMU.
Parameters
| Datatype | Variable | Description |
|---|
uint32_t | id | CAN Node ID of the IMU |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.enableRotationVector()
ret_status_t IMU::enableRotationVector(uint16_t report_interval)
Description
Enable rotation vector data and configure it.
Parameters
| Datatype | Variable | Description |
|---|
uint16_t | report_interval | Report interval in milliseconds |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.disableRotationVector()
ret_status_t IMU::disableRotationVector()
Description
Disable rotation vector data.
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.enableRawAccelerometer()
ret_status_t IMU::enableRawAccelerometer(uint16_t report_interval)
Description
Enable raw accelerometer data and configure it.
Parameters
| Datatype | Variable | Description |
|---|
uint16_t | report_interval | Report interval in milliseconds |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.disableRawAccelerometer()
ret_status_t IMU::disableRawAccelerometer()
Description
Disable raw accelerometer data.
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.enableRawGyro()
ret_status_t IMU::enableRawGyro(uint16_t report_interval)
Description
Enable raw gyroscope data and configure it.
Parameters
| Datatype | Variable | Description |
|---|
uint16_t | report_interval | Report interval in milliseconds |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.disableRawGyro()
ret_status_t IMU::disableRawGyro()
Description
Disable raw gyroscope data.
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.enableRawMagnetometer()
ret_status_t IMU::enableRawMagnetometer(uint16_t report_interval)
Description
Enable raw magnetometer data and configure it.
Parameters
| Datatype | Variable | Description |
|---|
uint16_t | report_interval | Report interval in milliseconds |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.disableRawMagnetometer()
ret_status_t IMU::disableRawMagnetometer()
Description
Disable raw magnetometer data.
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.enableLinearAccelerometer()
ret_status_t IMU::enableLinearAccelerometer(uint16_t report_interval)
Description
Enable linear accelerometer data and configure it.
Parameters
| Datatype | Variable | Description |
|---|
uint16_t | report_interval | Report interval in milliseconds |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.disableLinearAccelerometer()
ret_status_t IMU::disableLinearAccelerometer()
Description
Disable linear accelerometer data.
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.enableAccelerometer()
ret_status_t IMU::enableAccelerometer(uint16_t report_interval)
Description
Enable accelerometer data and configure it.
Parameters
| Datatype | Variable | Description |
|---|
uint16_t | report_interval | Report interval in milliseconds |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.disableAccelerometer()
ret_status_t IMU::disableAccelerometer()
Description
Disable accelerometer data.
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.enableGyro()
ret_status_t IMU::enableGyro(uint16_t report_interval)
Description
Enable gyroscope data and configure it.
Parameters
| Datatype | Variable | Description |
|---|
uint16_t | report_interval | Report interval in milliseconds |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.disableGyro()
ret_status_t IMU::disableGyro()
Description
Disable gyroscope data.
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.enableMagnetometer()
ret_status_t IMU::enableMagnetometer(uint16_t report_interval)
Description
Enable magnetometer data and configure it.
Parameters
| Datatype | Variable | Description |
|---|
uint16_t | report_interval | Report interval in milliseconds |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.disableMagnetometer()
ret_status_t IMU::disableMagnetometer()
Description
Disable magnetometer data.
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.enableUncalibratedGyro()
ret_status_t IMU::enableUncalibratedGyro(uint16_t report_interval)
Description
Enable uncalibrated gyroscope data and configure it.
Parameters
| Datatype | Variable | Description |
|---|
uint16_t | report_interval | Report interval in milliseconds |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.disableUncalibratedGyro()
ret_status_t IMU::disableUncalibratedGyro()
Description
Disable uncalibrated gyroscope data.
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.enableGravity()
ret_status_t IMU::enableGravity(uint16_t report_interval)
Description
Enable gravity data and configure it.
Parameters
| Datatype | Variable | Description |
|---|
uint16_t | report_interval | Report interval in milliseconds |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.disableGravity()
ret_status_t IMU::disableGravity()
Description
Disable gravity data.
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.getRotationVectorData()
ret_status_t IMU::getRotationVectorData(float* quat_i, float* quat_j, float* quat_k, float* quat_real)
Description
Retrieves the rotation vector data from the IMU.
Parameters
| Datatype | Variable | Description |
|---|
float* | quat_i | i component of the quaternion |
float* | quat_j | j component of the quaternion |
float* | quat_k | k component of the quaternion |
float* | quat_real | real component of the quaternion |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.getRawAccelerometerData()
ret_status_t IMU::getRawAccelerometerData(int16_t* x, int16_t* y, int16_t* z)
Description
Retrieves the raw accelerometer data from the IMU.
Parameters
| Datatype | Variable | Description |
|---|
int16_t* | x | raw accelerometer value in x axis |
int16_t* | y | raw accelerometer value in y axis |
int16_t* | z | raw accelerometer value in z axis |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.getRawGyroData()
ret_status_t IMU::getRawGyroData(int16_t* x, int16_t* y, int16_t* z)
Description
Retrieves the raw gyroscope data from the IMU.
Parameters
| Datatype | Variable | Description |
|---|
int16_t* | x | raw gyro value in x axis |
int16_t* | y | raw gyro value in y axis |
int16_t* | z | raw gyro value in z axis |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.getRawMagnetometerData()
ret_status_t IMU::getRawMagnetometerData(int16_t* x, int16_t* y, int16_t* z)
Description
Retrieves the raw magnetometer data from the IMU.
Parameters
| Datatype | Variable | Description |
|---|
int16_t* | x | raw magnetometer value in x axis |
int16_t* | y | raw magnetometer value in y axis |
int16_t* | z | raw magnetometer value in z axis |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.getLinearAccelerometerData()
ret_status_t IMU::getLinearAccelerometerData(float* x, float* y, float* z, uint8_t* accuracy)
Description
Retrieves the linear accelerometer data from the IMU.
Parameters
| Datatype | Variable | Description |
|---|
float* | x | linear acceleration in x axis (m/s²) |
float* | y | linear acceleration in y axis (m/s²) |
float* | z | linear acceleration in z axis (m/s²) |
uint8_t* | accuracy | accuracy of the linear acceleration data |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.getAccelerometerData()
ret_status_t IMU::getAccelerometerData(float* x, float* y, float* z, uint8_t* accuracy)
Description
Retrieves the accelerometer data from the IMU.
Parameters
| Datatype | Variable | Description |
|---|
float* | x | acceleration in x axis (m/s²) |
float* | y | acceleration in y axis (m/s²) |
float* | z | acceleration in z axis (m/s²) |
uint8_t* | accuracy | accuracy of the acceleration data |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.getGyroData()
ret_status_t IMU::getGyroData(float* x, float* y, float* z, uint8_t* accuracy)
Description
Retrieves the gyroscope data from the IMU.
Parameters
| Datatype | Variable | Description |
|---|
float* | x | gyro value in x axis (radians per second) |
float* | y | gyro value in y axis (radians per second) |
float* | z | gyro value in z axis (radians per second) |
uint8_t* | accuracy | accuracy of the gyro data |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.getMagnetometerData()
ret_status_t IMU::getMagnetometerData(float* x, float* y, float* z, uint8_t* accuracy)
Description
Retrieves the magnetometer data from the IMU.
Parameters
| Datatype | Variable | Description |
|---|
float* | x | magnetometer value in x axis (uTesla) |
float* | y | magnetometer value in y axis (uTesla) |
float* | z | magnetometer value in z axis (uTesla) |
uint8_t* | accuracy | accuracy of the magnetometer data |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.getUncalibratedGyroData()
ret_status_t IMU::getUncalibratedGyroData(float* x, float* y, float* z)
Description
Retrieves the uncalibrated gyroscope data from the IMU.
Parameters
| Datatype | Variable | Description |
|---|
float* | x | uncalibrated gyro value in x axis (radians per second) |
float* | y | uncalibrated gyro value in y axis (radians per second) |
float* | z | uncalibrated gyro value in z axis (radians per second) |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.getUncalibratedGyroBiasData()
ret_status_t IMU::getUncalibratedGyroBiasData(float* x, float* y, float* z)
Description
Retrieves the uncalibrated gyroscope bias data from the IMU.
Parameters
| Datatype | Variable | Description |
|---|
float* | x | uncalibrated gyro bias in x axis (radians per second) |
float* | y | uncalibrated gyro bias in y axis (radians per second) |
float* | z | uncalibrated gyro bias in z axis (radians per second) |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.getEulerAngles()
ret_status_t IMU::getEulerAngles(float* yaw, float* pitch, float* roll)
Description
Retrieves the Euler angles from the IMU.
Parameters
| Datatype | Variable | Description |
|---|
float* | yaw | yaw angle (degrees) |
float* | pitch | pitch angle (degrees) |
float* | roll | roll angle (degrees) |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.getGravityData()
ret_status_t IMU::getGravityData(float* x, float* y, float* z)
Description
Retrieves the gravity data from the IMU.
Parameters
| Datatype | Variable | Description |
|---|
float* | x | gravity in x axis (g) |
float* | y | gravity in y axis (g) |
float* | z | gravity in z axis (g) |
Returns
| Datatype | Description |
|---|
ret_status_t | Return Status |
IMU.isConnected()
Description
Check if the device is still connected.
Returns
| Datatype | Description |
|---|
bool | true if connected, false otherwise |
Python API Reference
IMU.__init__()
__init__(id: int, interface: USBInterface)
Description
IMU class constructor.
Parameters
| Datatype | Variable | Description |
|---|
int | id | CAN Node ID of IMU |
USBInterface | interface | Initialised CANInterface or USBInterface object |
IMU.getNodeId()
getNodeId() -> 'tuple[int, int]'
Description
Get current CAN Node ID of the IMU.
Returns
| Datatype | Description |
|---|
'tuple[int,int]' | Tuple containing return status and the current CAN Node ID. |
IMU.setNodeId()
setNodeId(id: int) -> int
Description
Set the node id for the IMU.
Parameters
| Datatype | Variable | Description |
|---|
int | id | CAN Device ID of the IMU |
Returns
| Datatype | Description |
|---|
int | Return Status |
IMU.getRotationVectorData
getRotationVectorData() -> 'tuple[float, float, float, float]'
Description
Retrieve the rotation vector data from the IMU.
Returns
| Datatype | Description |
|---|
'tuple[float, float, float, float]' | Tuple containing quaternion components (quat_i, quat_j, quat_k, quat_real). |
IMU.getRawAccelerometerData
getRawAccelerometerData() -> 'tuple[int16_t, int16_t, int16_t]'
Description
Retrieve the raw accelerometer data from the IMU.
Returns
| Datatype | Description |
|---|
'tuple[int16_t, int16_t, int16_t]' | Raw accelerometer values (x, y, z). |
IMU.getRawGyroData
getRawGyroData() -> 'tuple[int16_t, int16_t, int16_t]'
Description
Retrieve the raw gyroscope data from the IMU.
Returns
| Datatype | Description |
|---|
'tuple[int16_t, int16_t, int16_t]' | Raw gyroscope values (x, y, z). |
IMU.getRawMagnetometerData
getRawMagnetometerData() -> 'tuple[int16_t, int16_t, int16_t]'
Description
Retrieve the raw magnetometer data from the IMU.
Returns
| Datatype | Description |
|---|
'tuple[int16_t, int16_t, int16_t]' | Raw magnetometer values (x, y, z). |
IMU.getLinearAccelerometerData
getLinearAccelerometerData() -> 'tuple[float, float, float, uint8_t]'
Description
Retrieve the linear accelerometer data from the IMU.
Returns
| Datatype | Description |
|---|
'tuple[float, float, float, uint8_t]' | Linear acceleration values (x, y, z) in m/s² and accuracy. |
IMU.getAccelerometerData
getAccelerometerData() -> 'tuple[float, float, float, uint8_t]'
Description
Retrieve the accelerometer data from the IMU.
Returns
| Datatype | Description |
|---|
'tuple[float, float, float, uint8_t]' | Acceleration values (x, y, z) in m/s² and accuracy. |
IMU.getGyroData
getGyroData() -> 'tuple[float, float, float, uint8_t]'
Description
Retrieve the gyroscope data from the IMU.
Returns
| Datatype | Description |
|---|
'tuple[float, float, float, uint8_t]' | Gyroscope values (x, y, z) in radians per second and accuracy. |
IMU.getMagnetometerData
getMagnetometerData() -> 'tuple[float, float, float, uint8_t]'
Description
Retrieve the magnetometer data from the IMU.
Returns
| Datatype | Description |
|---|
'tuple[float, float, float, uint8_t]' | Magnetometer values (x, y, z) in µT and accuracy. |
IMU.getUncalibratedGyroData
getUncalibratedGyroData() -> 'tuple[float, float, float]'
Description
Retrieve the uncalibrated gyroscope data from the IMU.
Returns
| Datatype | Description |
|---|
'tuple[float, float, float]' | Uncalibrated gyroscope values (x, y, z) in radians per second. |
IMU.getUncalibratedGyroBiasData
getUncalibratedGyroBiasData() -> 'tuple[float, float, float]'
Description
Retrieve the uncalibrated gyroscope bias data from the IMU.
Returns
| Datatype | Description |
|---|
'tuple[float, float, float]' | Uncalibrated gyroscope bias values (x, y, z) in radians per second. |
IMU.getEulerAngles
getEulerAngles() -> 'tuple[float, float, float]'
Description
Retrieve the Euler angles from the IMU.
Returns
| Datatype | Description |
|---|
'tuple[float, float, float]' | Euler angles (yaw, pitch, roll) in degrees. |
IMU.getGravityData
getGravityData() -> 'tuple[float, float, float]'
Description
Retrieve the gravity data from the IMU.
Returns
| Datatype | Description |
|---|
'tuple[float, float, float]' | Gravity vector values (x, y, z) in g. |
IMU.enableRotationVector
enableRotationVector(time_interval: int) -> int
Description
Enable Quaternion rotation vector data and configure report interval.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.disableRotationVector
disableRotationVector() -> int
Description
Disable Quaternion rotation vector data stream.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.enableRawAccelerometer
enableRawAccelerometer(time_interval: int) -> int
Description
Enable Raw accelerometer data and configure report interval.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.disableRawAccelerometer
disableRawAccelerometer() -> int
Description
Disable Raw accelerometer data stream.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.enableRawGyro
enableRawGyro(time_interval: int) -> int
Description
Enable Raw gyroscope data and configure report interval.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.disableRawGyro
Description
Disable Raw gyroscope data stream.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.enableRawMagnetometer
enableRawMagnetometer(time_interval: int) -> int
Description
Enable Raw magnetometer data and configure report interval.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.disableRawMagnetometer
disableRawMagnetometer() -> int
Description
Disable Raw magnetometer data stream.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.enableLinearAccelerometer
enableLinearAccelerometer(time_interval: int) -> int
Description
Enable Linear accelerometer data and configure report interval.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.disableLinearAccelerometer
disableLinearAccelerometer() -> int
Description
Disable Linear accelerometer data stream.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.enableAccelerometer
enableAccelerometer(time_interval: int) -> int
Description
Enable Calibrated accelerometer data and configure report interval.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.disableAccelerometer
disableAccelerometer() -> int
Description
Disable Calibrated accelerometer data stream.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.enableGyro
enableGyro(time_interval: int) -> int
Description
Enable Calibrated gyroscope data and configure report interval.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.disableGyro
Description
Disable Calibrated gyroscope data stream.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.enableMagnetometer
enableMagnetometer(time_interval: int) -> int
Description
Enable Calibrated magnetometer data and configure report interval.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.disableMagnetometer
disableMagnetometer() -> int
Description
Disable Calibrated magnetometer data stream.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.enableUncalibratedGyro
enableUncalibratedGyro(time_interval: int) -> int
Description
Enable Uncalibrated gyroscope data and configure report interval.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.disableUncalibratedGyro
disableUncalibratedGyro() -> int
Description
Disable Uncalibrated gyroscope data stream.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.enableGravity
enableGravity(time_interval: int) -> int
Description
Enable Gravity sensor data and configure report interval.
Returns
| Datatype | Description |
|---|
int | Status code. |
IMU.disableGravity
Description
Disable Gravity sensor data stream.
Returns
| Datatype | Description |
|---|
int | Status code. |