ROS – ros_inemo_m1_imu package

Table of contents

The “st_inemo_m1_imu” package is used to interface ROS environment with the inertial board INEMO-M1 Discovery by STMicroelectronics.

The INEMO-M1 is the smallest 9-axis system-on-board (SoB) of the iNEMO module family; it integrates multiple ST sensors with a powerful computational core: a 6-axis geomagnetic module, a 3-axis gyroscope and an ARM Cortex™ M3 32-bit MCU.

The Discovery-M1 based on the INEMO-M1, and including a pressure sensor LPS331AP, represents a complete 10-DoF open platform able to provide fast inertial application development using MEMS sensors and the STM32. The pinout of the two connectors gives a complete set of communication interfaces in a very small size, making the Discovery-M1 a flexible solution for effortless orientation estimation embedded applications.

Discovery M1

INEMO-M1 Discovery

The node communicates with the board using the original Communication Protocol (PDF) made by STMicroelectronics.

Source code

The source code is fully available on Github:


The installation of the package is quite simple:

  1. Goto ROS workspace directory:
    cd ~/catkin_ws/src
  2. Clone the repository:
    git clone
  3. Back to the main directory of the workspace:
    cd ~/catkin_ws
  4.  Compile:


The node is fully compatible with the package “navigation” that allows to MyzharBot to navigate in a map using odometry, inertial and RGB-D information.

The node can be run simply with the following command:

rosrun st_inemo_m1_imu inemo_m1_node

The terminal will be filled with the stream of the inertial data read from the sensors and the pose information calculated by the “iNEMO engine lite sensor fusion algorithm“.

Remember that to access to the virtual COM created by the firmware running on the iNemo-M1, you must change the permission:

sudo chmod 666 /etc/ttyACM0




Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.