So the first step in this project is to interface the IMU to the Arduino to get the rotation values and send those values to ROS. We're essentially making an Arduino-ROS node that is receiving IMU values and publishing the yaw, pitch, and roll as well as the transformation (TF) corresponding to the IMU movement as ROS topics.
The following figure shows the interfacing of IMU with the Arduino. The IMU is interfaced using the I2C protocol:
The connection from Arduino to MPU-9250 is shown in this table:
Arduino pins | MPU - 9250 pins |
5V | VCC |
GND | GND |
SCL (21) | SCL |
SDA (20) | SDA |
Digital PIN2 | INT |
To start working on IMU values in ROS, we have to create a ROS-Arduino node that is receiving IMU values and send it as ROS topics. I hope you have set up the Arduino IDE in your system. For running this code, you will need the Arduino library for the MPU - 9250. Note that you can use the MPU - 9150 library for working with this IMU, and you can clone that library's files using the following command:
$ git clone https://github.com/sparkfun/MPU-9150_Breakout/tree/master/firmware
Copy firmware/I2Cdev and MPU6050 into the arduino_sketch_location/libraries folder. The sketchbook location can be obtained from the File | Preferences IDE option.
Once you've copied both of these folders, you can compile the ROS-Arduino node. You can open the code from chapter_5_codes/MPU9250_ROS_DMP. Just try to compile the code and check whether it's working or not. I hope that you have already set the Arduino ROS serial client library , which is ros_lib. The entire procedure was mentioned in Chapter 22, Controlling Embedded Boards Using ROS.
The following figure shows the flowchart of the complete code. We'll go through a detailed explanation of code after this.